[MM-53339] import: dont miss out reactions from replies (#29060)

Этот коммит содержится в:
Ibrahim Serdar Acikgoz
2024-11-15 09:45:14 +01:00
коммит произвёл GitHub
родитель 3da77f2f05
Коммит 0e6ec05d5c
2 изменённых файлов: 772 добавлений и 564 удалений

Просмотреть файл

@@ -1369,10 +1369,17 @@ func (a *App) importReplies(rctx request.CTX, data []imports.ReplyImportData, po
return err return err
} }
type postAndReactions struct {
post *model.Post
reactions *[]imports.ReactionImportData
}
var ( var (
postsWithData = []postAndData{} postsWithData = []postAndData{}
postsForCreateList = []*model.Post{} postsForCreateList = []*model.Post{}
postsForOverwriteList = []*model.Post{} postsForOverwriteList = []*model.Post{}
reactionsForCreateMap = make(map[string]postAndReactions)
interimReactionsMap = map[int64]*[]imports.ReactionImportData{}
) )
for _, replyData := range data { for _, replyData := range data {
@@ -1428,14 +1435,25 @@ func (a *App) importReplies(rctx request.CTX, data []imports.ReplyImportData, po
if reply.Id == "" { if reply.Id == "" {
postsForCreateList = append(postsForCreateList, reply) postsForCreateList = append(postsForCreateList, reply)
if replyData.Reactions != nil && len(*replyData.Reactions) > 0 {
// although createAt is not unique, I think it is safe to
// assume that it could be near-unique especially for the same thread.
// If this assumption fails, the last reactions would be used for the
// posts that share same createAt value.
interimReactionsMap[reply.CreateAt] = replyData.Reactions
}
} else { } else {
postsForOverwriteList = append(postsForOverwriteList, reply) postsForOverwriteList = append(postsForOverwriteList, reply)
if replyData.Reactions != nil && len(*replyData.Reactions) > 0 {
reactionsForCreateMap[reply.Id] = postAndReactions{post: reply, reactions: replyData.Reactions}
}
} }
postsWithData = append(postsWithData, postAndData{post: reply, replyData: &replyData}) postsWithData = append(postsWithData, postAndData{post: reply, replyData: &replyData})
} }
if len(postsForCreateList) > 0 { if len(postsForCreateList) > 0 {
if _, _, err := a.Srv().Store().Post().SaveMultiple(postsForCreateList); err != nil { postsCreated, _, err := a.Srv().Store().Post().SaveMultiple(postsForCreateList)
if err != nil {
var appErr *model.AppError var appErr *model.AppError
var invErr *store.ErrInvalidInput var invErr *store.ErrInvalidInput
switch { switch {
@@ -1447,12 +1465,28 @@ func (a *App) importReplies(rctx request.CTX, data []imports.ReplyImportData, po
return model.NewAppError("importReplies", "app.post.save.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return model.NewAppError("importReplies", "app.post.save.app_error", nil, "", http.StatusInternalServerError).Wrap(err)
} }
} }
for _, created := range postsCreated {
reactions, ok := interimReactionsMap[created.CreateAt]
if !ok || reactions == nil {
continue
}
reactionsForCreateMap[created.Id] = postAndReactions{post: created, reactions: reactions}
}
} }
if _, _, nErr := a.Srv().Store().Post().OverwriteMultiple(postsForOverwriteList); nErr != nil { if _, _, nErr := a.Srv().Store().Post().OverwriteMultiple(postsForOverwriteList); nErr != nil {
return model.NewAppError("importReplies", "app.post.overwrite.app_error", nil, "", http.StatusInternalServerError).Wrap(nErr) return model.NewAppError("importReplies", "app.post.overwrite.app_error", nil, "", http.StatusInternalServerError).Wrap(nErr)
} }
for _, postAndReactions := range reactionsForCreateMap {
for _, reaction := range *postAndReactions.reactions {
if err := a.importReaction(&reaction, postAndReactions.post); err != nil {
return err
}
}
}
for _, postWithData := range postsWithData { for _, postWithData := range postsWithData {
a.updateFileInfoWithPostId(rctx, postWithData.post) a.updateFileInfoWithPostId(rctx, postWithData.post)

Просмотреть файл

@@ -2013,10 +2013,26 @@ func TestImportimportMultiplePostLines(t *testing.T) {
user, err := th.App.GetUserByUsername(username) user, err := th.App.GetUserByUsername(username)
require.Nil(t, err, "Failed to get user from database.") require.Nil(t, err, "Failed to get user from database.")
username2 := model.NewUsername()
th.App.importUser(th.Context, &imports.UserImportData{
Username: &username2,
Email: model.NewPointer(model.NewId() + "@example.com"),
}, false)
user2, err := th.App.GetUserByUsername(username2)
require.Nil(t, err, "Failed to get user from database.")
// Count the number of posts in the testing team. // Count the number of posts in the testing team.
initialPostCount, nErr := th.App.Srv().Store().Post().AnalyticsPostCount(&model.PostCountOptions{TeamId: team.Id}) initialPostCount, nErr := th.App.Srv().Store().Post().AnalyticsPostCount(&model.PostCountOptions{TeamId: team.Id})
require.NoError(t, nErr) require.NoError(t, nErr)
createAt := model.GetMillis()
hashtagTime := createAt + 2
replyPostTime := hashtagTime + 4
replyTime := hashtagTime + 5
var assertionCount int64
t.Run("invalid post in dry run mode", func(t *testing.T) {
// Try adding an invalid post in dry run mode. // Try adding an invalid post in dry run mode.
data := imports.LineImportWorkerData{ data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{ LineImportData: imports.LineImportData{
@@ -2028,13 +2044,15 @@ func TestImportimportMultiplePostLines(t *testing.T) {
}, },
LineNumber: 25, LineNumber: 25,
} }
errLine, err := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, true, true) errLine, err2 := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, true, true)
assert.NotNil(t, err) assert.NotNil(t, err2)
assert.Equal(t, data.LineNumber, errLine) assert.Equal(t, data.LineNumber, errLine)
AssertAllPostsCount(t, th.App, initialPostCount, 0, team.Id) AssertAllPostsCount(t, th.App, initialPostCount, 0, team.Id)
})
t.Run("valid post in dry run mode", func(t *testing.T) {
// Try adding a valid post in dry run mode. // Try adding a valid post in dry run mode.
data = imports.LineImportWorkerData{ data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{ LineImportData: imports.LineImportData{
Post: &imports.PostImportData{ Post: &imports.PostImportData{
Team: &teamName, Team: &teamName,
@@ -2046,13 +2064,15 @@ func TestImportimportMultiplePostLines(t *testing.T) {
}, },
LineNumber: 1, LineNumber: 1,
} }
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, true, true) errLine, err2 := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, true, true)
assert.Nil(t, err) assert.Nil(t, err2)
assert.Equal(t, 0, errLine) assert.Equal(t, 0, errLine)
AssertAllPostsCount(t, th.App, initialPostCount, 0, team.Id) AssertAllPostsCount(t, th.App, initialPostCount, 0, team.Id)
})
t.Run("invalid post in apply mode", func(t *testing.T) {
// Try adding an invalid post in apply mode. // Try adding an invalid post in apply mode.
data = imports.LineImportWorkerData{ data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{ LineImportData: imports.LineImportData{
Post: &imports.PostImportData{ Post: &imports.PostImportData{
Team: &teamName, Team: &teamName,
@@ -2063,13 +2083,15 @@ func TestImportimportMultiplePostLines(t *testing.T) {
}, },
LineNumber: 35, LineNumber: 35,
} }
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err2 := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
assert.NotNil(t, err) assert.NotNil(t, err2)
assert.Equal(t, data.LineNumber, errLine) assert.Equal(t, data.LineNumber, errLine)
AssertAllPostsCount(t, th.App, initialPostCount, 0, team.Id) AssertAllPostsCount(t, th.App, initialPostCount, 0, team.Id)
})
t.Run("valid post with invalid team in apply mode", func(t *testing.T) {
// Try adding a valid post with invalid team in apply mode. // Try adding a valid post with invalid team in apply mode.
data = imports.LineImportWorkerData{ data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{ LineImportData: imports.LineImportData{
Post: &imports.PostImportData{ Post: &imports.PostImportData{
Team: model.NewPointer(NewTestId()), Team: model.NewPointer(NewTestId()),
@@ -2081,15 +2103,17 @@ func TestImportimportMultiplePostLines(t *testing.T) {
}, },
LineNumber: 10, LineNumber: 10,
} }
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err2 := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
assert.NotNil(t, err) assert.NotNil(t, err2)
// Batch will fail when searching for teams, so no specific line // Batch will fail when searching for teams, so no specific line
// is associated with the error // is associated with the error
assert.Equal(t, 0, errLine) assert.Equal(t, 0, errLine)
AssertAllPostsCount(t, th.App, initialPostCount, 0, team.Id) AssertAllPostsCount(t, th.App, initialPostCount, 0, team.Id)
})
t.Run("valid post with invalid channel in apply mode", func(t *testing.T) {
// Try adding a valid post with invalid channel in apply mode. // Try adding a valid post with invalid channel in apply mode.
data = imports.LineImportWorkerData{ data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{ LineImportData: imports.LineImportData{
Post: &imports.PostImportData{ Post: &imports.PostImportData{
Team: &teamName, Team: &teamName,
@@ -2101,15 +2125,17 @@ func TestImportimportMultiplePostLines(t *testing.T) {
}, },
LineNumber: 7, LineNumber: 7,
} }
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err2 := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
assert.NotNil(t, err) assert.NotNil(t, err2)
// Batch will fail when searching for channels, so no specific // Batch will fail when searching for channels, so no specific
// line is associated with the error // line is associated with the error
assert.Equal(t, 0, errLine) assert.Equal(t, 0, errLine)
AssertAllPostsCount(t, th.App, initialPostCount, 0, team.Id) AssertAllPostsCount(t, th.App, initialPostCount, 0, team.Id)
})
t.Run("valid post with invalid user in apply mode", func(t *testing.T) {
// Try adding a valid post with invalid user in apply mode. // Try adding a valid post with invalid user in apply mode.
data = imports.LineImportWorkerData{ data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{ LineImportData: imports.LineImportData{
Post: &imports.PostImportData{ Post: &imports.PostImportData{
Team: &teamName, Team: &teamName,
@@ -2121,16 +2147,17 @@ func TestImportimportMultiplePostLines(t *testing.T) {
}, },
LineNumber: 2, LineNumber: 2,
} }
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err2 := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
assert.NotNil(t, err) assert.NotNil(t, err2)
// Batch will fail when searching for users, so no specific line // Batch will fail when searching for users, so no specific line
// is associated with the error // is associated with the error
assert.Equal(t, 0, errLine) assert.Equal(t, 0, errLine)
AssertAllPostsCount(t, th.App, initialPostCount, 0, team.Id) AssertAllPostsCount(t, th.App, initialPostCount, 0, team.Id)
})
t.Run("valid post in apply mode", func(t *testing.T) {
// Try adding a valid post in apply mode. // Try adding a valid post in apply mode.
createAt := model.GetMillis() data := imports.LineImportWorkerData{
data = imports.LineImportWorkerData{
LineImportData: imports.LineImportData{ LineImportData: imports.LineImportData{
Post: &imports.PostImportData{ Post: &imports.PostImportData{
Team: &teamName, Team: &teamName,
@@ -2142,10 +2169,11 @@ func TestImportimportMultiplePostLines(t *testing.T) {
}, },
LineNumber: 1, LineNumber: 1,
} }
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err2 := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
assert.Nil(t, err) assert.Nil(t, err2)
assert.Equal(t, 0, errLine) assert.Equal(t, 0, errLine)
AssertAllPostsCount(t, th.App, initialPostCount, 1, team.Id) assertionCount++
AssertAllPostsCount(t, th.App, initialPostCount, assertionCount, team.Id)
// Check the post values. // Check the post values.
posts, nErr := th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, createAt) posts, nErr := th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, createAt)
@@ -2173,7 +2201,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, 0, errLine) assert.Equal(t, 0, errLine)
AssertAllPostsCount(t, th.App, initialPostCount, 1, team.Id) AssertAllPostsCount(t, th.App, initialPostCount, assertionCount, team.Id)
// Check the post values. // Check the post values.
posts, nErr = th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, createAt) posts, nErr = th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, createAt)
@@ -2184,10 +2212,12 @@ func TestImportimportMultiplePostLines(t *testing.T) {
post = posts[0] post = posts[0]
postBool = post.Message != *data.Post.Message || post.CreateAt != *data.Post.CreateAt || post.UserId != user.Id postBool = post.Message != *data.Post.Message || post.CreateAt != *data.Post.CreateAt || post.UserId != user.Id
require.False(t, postBool, "Post properties not as expected") require.False(t, postBool, "Post properties not as expected")
})
t.Run("import the post with a different time", func(t *testing.T) {
// Save the post with a different time. // Save the post with a different time.
newTime := createAt + 1 newTime := createAt + 1
data = imports.LineImportWorkerData{ data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{ LineImportData: imports.LineImportData{
Post: &imports.PostImportData{ Post: &imports.PostImportData{
Team: &teamName, Team: &teamName,
@@ -2199,13 +2229,16 @@ func TestImportimportMultiplePostLines(t *testing.T) {
}, },
LineNumber: 1, LineNumber: 1,
} }
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err2 := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
assert.Nil(t, err) assert.Nil(t, err2)
assert.Equal(t, 0, errLine) assert.Equal(t, 0, errLine)
AssertAllPostsCount(t, th.App, initialPostCount, 2, team.Id) assertionCount++
AssertAllPostsCount(t, th.App, initialPostCount, assertionCount, team.Id)
})
t.Run("import the post with a different message", func(t *testing.T) {
// Save the post with a different message. // Save the post with a different message.
data = imports.LineImportWorkerData{ data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{ LineImportData: imports.LineImportData{
Post: &imports.PostImportData{ Post: &imports.PostImportData{
Team: &teamName, Team: &teamName,
@@ -2217,14 +2250,16 @@ func TestImportimportMultiplePostLines(t *testing.T) {
}, },
LineNumber: 1, LineNumber: 1,
} }
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err2 := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
assert.Nil(t, err) assert.Nil(t, err2)
assert.Equal(t, 0, errLine) assert.Equal(t, 0, errLine)
AssertAllPostsCount(t, th.App, initialPostCount, 3, team.Id) assertionCount++
AssertAllPostsCount(t, th.App, initialPostCount, assertionCount, team.Id)
})
t.Run("import post with hashtags", func(t *testing.T) {
// Test with hashtags // Test with hashtags
hashtagTime := createAt + 2 data := imports.LineImportWorkerData{
data = imports.LineImportWorkerData{
LineImportData: imports.LineImportData{ LineImportData: imports.LineImportData{
Post: &imports.PostImportData{ Post: &imports.PostImportData{
Team: &teamName, Team: &teamName,
@@ -2236,33 +2271,28 @@ func TestImportimportMultiplePostLines(t *testing.T) {
}, },
LineNumber: 1, LineNumber: 1,
} }
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err2 := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
assert.Nil(t, err) assert.Nil(t, err2)
assert.Equal(t, 0, errLine) assert.Equal(t, 0, errLine)
AssertAllPostsCount(t, th.App, initialPostCount, 4, team.Id) assertionCount++
AssertAllPostsCount(t, th.App, initialPostCount, assertionCount, team.Id)
posts, nErr = th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, hashtagTime) posts, nErr := th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, hashtagTime)
require.NoError(t, nErr) require.NoError(t, nErr)
require.Len(t, posts, 1, "Unexpected number of posts found.") require.Len(t, posts, 1, "Unexpected number of posts found.")
post = posts[0] post := posts[0]
postBool = post.Message != *data.Post.Message || post.CreateAt != *data.Post.CreateAt || post.UserId != user.Id postBool := post.Message != *data.Post.Message || post.CreateAt != *data.Post.CreateAt || post.UserId != user.Id
require.False(t, postBool, "Post properties not as expected") require.False(t, postBool, "Post properties not as expected")
require.Equal(t, "#hashtagmashupcity", post.Hashtags, "Hashtags not as expected: %s", post.Hashtags) require.Equal(t, "#hashtagmashupcity", post.Hashtags, "Hashtags not as expected: %s", post.Hashtags)
})
t.Run("import post with flags", func(t *testing.T) {
// Post with flags. // Post with flags.
username2 := model.NewUsername()
th.App.importUser(th.Context, &imports.UserImportData{
Username: &username2,
Email: model.NewPointer(model.NewId() + "@example.com"),
}, false)
user2, err := th.App.GetUserByUsername(username2)
require.Nil(t, err, "Failed to get user from database.")
flagsTime := hashtagTime + 1 flagsTime := hashtagTime + 1
data = imports.LineImportWorkerData{ data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{ LineImportData: imports.LineImportData{
Post: &imports.PostImportData{ Post: &imports.PostImportData{
Team: &teamName, Team: &teamName,
@@ -2279,29 +2309,125 @@ func TestImportimportMultiplePostLines(t *testing.T) {
LineNumber: 1, LineNumber: 1,
} }
errLine, err2 := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
assert.Nil(t, err2, "Expected success.")
assert.Equal(t, 0, errLine)
assertionCount++
AssertAllPostsCount(t, th.App, initialPostCount, assertionCount, team.Id)
// Check the post values.
posts, nErr := th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, flagsTime)
require.NoError(t, nErr)
require.Len(t, posts, 1, "Unexpected number of posts found.")
post := posts[0]
postBool := post.Message != *data.Post.Message || post.CreateAt != *data.Post.CreateAt || post.UserId != user.Id
require.False(t, postBool, "Post properties not as expected")
checkPreference(t, th.App, user.Id, model.PreferenceCategoryFlaggedPost, post.Id, "true")
checkPreference(t, th.App, user2.Id, model.PreferenceCategoryFlaggedPost, post.Id, "true")
})
t.Run("import new post with reactions", func(t *testing.T) {
// Post with reaction.
reactionPostTime := hashtagTime + 2
reactionTime := hashtagTime + 3
data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{
Post: &imports.PostImportData{
Team: &teamName,
Channel: &channelName,
User: &username,
Message: model.NewPointer("Message with reactions"),
CreateAt: &reactionPostTime,
Reactions: &[]imports.ReactionImportData{{
User: &user2.Username,
EmojiName: model.NewPointer("+1"),
CreateAt: &reactionTime,
}, {
User: &user.Username,
EmojiName: model.NewPointer("+1"),
CreateAt: &reactionTime,
}},
},
},
LineNumber: 1,
}
errLine, err2 := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
assert.Nil(t, err2, "Expected success.")
assert.Equal(t, 0, errLine)
assertionCount++
AssertAllPostsCount(t, th.App, initialPostCount, assertionCount, team.Id)
// Check the post values.
posts, nErr := th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, reactionPostTime)
require.NoError(t, nErr)
require.Len(t, posts, 1, "Unexpected number of posts found.")
post := posts[0]
postBool := post.Message != *data.Post.Message || post.CreateAt != *data.Post.CreateAt || post.UserId != user.Id || !post.HasReactions
require.False(t, postBool, "Post properties not as expected")
reactions, nErr := th.App.Srv().Store().Reaction().GetForPost(post.Id, false)
require.NoError(t, nErr, "Can't get reaction")
require.Len(t, reactions, 2, "Invalid number of reactions")
// Update post with replies with reactions.
newReactionTime := reactionTime + 1
newReplyTime := reactionPostTime + 1
data = imports.LineImportWorkerData{
LineImportData: imports.LineImportData{
Post: &imports.PostImportData{
Team: &teamName,
Channel: &channelName,
User: &username,
Message: model.NewPointer("Message with reactions"),
CreateAt: &reactionPostTime,
Replies: &[]imports.ReplyImportData{{
User: &username,
Message: model.NewPointer("Message reply"),
CreateAt: &newReplyTime,
Reactions: &[]imports.ReactionImportData{{
User: &user2.Username,
EmojiName: model.NewPointer("+1"),
CreateAt: &newReactionTime,
}},
}},
},
},
LineNumber: 1,
}
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
assert.Nil(t, err, "Expected success.") assert.Nil(t, err, "Expected success.")
assert.Equal(t, 0, errLine) assert.Equal(t, 0, errLine)
// No new post created, only the reply is added.
AssertAllPostsCount(t, th.App, initialPostCount, 5, team.Id) assertionCount++
AssertAllPostsCount(t, th.App, initialPostCount, assertionCount, team.Id)
// Check the post values. // Check the post values.
posts, nErr = th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, flagsTime) posts, nErr = th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, newReplyTime)
require.NoError(t, nErr) require.NoError(t, nErr)
require.Len(t, posts, 1, "Unexpected number of posts found.") require.Len(t, posts, 1, "Unexpected number of posts found.")
post = posts[0] post = posts[0]
postBool = post.Message != *data.Post.Message || post.CreateAt != *data.Post.CreateAt || post.UserId != user.Id
require.False(t, postBool, "Post properties not as expected")
checkPreference(t, th.App, user.Id, model.PreferenceCategoryFlaggedPost, post.Id, "true") reactions, nErr = th.App.Srv().Store().Reaction().GetForPost(post.Id, false)
checkPreference(t, th.App, user2.Id, model.PreferenceCategoryFlaggedPost, post.Id, "true") require.NoError(t, nErr, "Can't get reaction")
require.Len(t, reactions, 1, "Invalid number of reactions")
})
t.Run("import post with reactions with new replies", func(t *testing.T) {
// Post with reaction. // Post with reaction.
reactionPostTime := hashtagTime + 2 reactionPostTime := hashtagTime + 11
reactionTime := hashtagTime + 3 reactionTime := hashtagTime + 12
data = imports.LineImportWorkerData{ newReplyTime := reactionPostTime + 1
newReactionTime := reactionTime + 1
data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{ LineImportData: imports.LineImportData{
Post: &imports.PostImportData{ Post: &imports.PostImportData{
Team: &teamName, Team: &teamName,
@@ -2314,24 +2440,34 @@ func TestImportimportMultiplePostLines(t *testing.T) {
EmojiName: model.NewPointer("+1"), EmojiName: model.NewPointer("+1"),
CreateAt: &reactionTime, CreateAt: &reactionTime,
}}, }},
Replies: &[]imports.ReplyImportData{{
User: &username,
Message: model.NewPointer("Message reply"),
CreateAt: &newReplyTime,
Reactions: &[]imports.ReactionImportData{{
User: &user2.Username,
EmojiName: model.NewPointer("+1"),
CreateAt: &newReactionTime,
}},
}},
}, },
}, },
LineNumber: 1, LineNumber: 1,
} }
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err2 := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
assert.Nil(t, err, "Expected success.") assert.Nil(t, err2, "Expected success.")
assert.Equal(t, 0, errLine) assert.Equal(t, 0, errLine)
assertionCount += 2
AssertAllPostsCount(t, th.App, initialPostCount, 6, team.Id) AssertAllPostsCount(t, th.App, initialPostCount, assertionCount, team.Id)
// Check the post values. // Check the post values.
posts, nErr = th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, reactionPostTime) posts, nErr := th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, reactionPostTime)
require.NoError(t, nErr) require.NoError(t, nErr)
require.Len(t, posts, 1, "Unexpected number of posts found.") require.Len(t, posts, 1, "Unexpected number of posts found.")
post = posts[0] post := posts[0]
postBool = post.Message != *data.Post.Message || post.CreateAt != *data.Post.CreateAt || post.UserId != user.Id || !post.HasReactions postBool := post.Message != *data.Post.Message || post.CreateAt != *data.Post.CreateAt || post.UserId != user.Id || !post.HasReactions
require.False(t, postBool, "Post properties not as expected") require.False(t, postBool, "Post properties not as expected")
reactions, nErr := th.App.Srv().Store().Reaction().GetForPost(post.Id, false) reactions, nErr := th.App.Srv().Store().Reaction().GetForPost(post.Id, false)
@@ -2339,10 +2475,23 @@ func TestImportimportMultiplePostLines(t *testing.T) {
require.Len(t, reactions, 1, "Invalid number of reactions") require.Len(t, reactions, 1, "Invalid number of reactions")
// Check the post values.
posts, nErr = th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, newReplyTime)
require.NoError(t, nErr)
require.Len(t, posts, 1, "Unexpected number of posts found.")
post = posts[0]
reactions, nErr = th.App.Srv().Store().Reaction().GetForPost(post.Id, false)
require.NoError(t, nErr, "Can't get reaction")
require.Len(t, reactions, 1, "Invalid number of reactions")
})
t.Run("import post with replies", func(t *testing.T) {
// Post with reply. // Post with reply.
replyPostTime := hashtagTime + 4 data := imports.LineImportWorkerData{
replyTime := hashtagTime + 5
data = imports.LineImportWorkerData{
LineImportData: imports.LineImportData{ LineImportData: imports.LineImportData{
Post: &imports.PostImportData{ Post: &imports.PostImportData{
Team: &teamName, Team: &teamName,
@@ -2359,20 +2508,20 @@ func TestImportimportMultiplePostLines(t *testing.T) {
}, },
LineNumber: 1, LineNumber: 1,
} }
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err2 := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
assert.Nil(t, err, "Expected success.") assert.Nil(t, err2, "Expected success.")
assert.Equal(t, 0, errLine) assert.Equal(t, 0, errLine)
assertionCount += 2
AssertAllPostsCount(t, th.App, initialPostCount, 8, team.Id) AssertAllPostsCount(t, th.App, initialPostCount, assertionCount, team.Id)
// Check the post values. // Check the post values.
posts, nErr = th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, replyPostTime) posts, nErr := th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, replyPostTime)
require.NoError(t, nErr) require.NoError(t, nErr)
require.Len(t, posts, 1, "Unexpected number of posts found.") require.Len(t, posts, 1, "Unexpected number of posts found.")
post = posts[0] post := posts[0]
postBool = post.Message != *data.Post.Message || post.CreateAt != *data.Post.CreateAt || post.UserId != user.Id postBool := post.Message != *data.Post.Message || post.CreateAt != *data.Post.CreateAt || post.UserId != user.Id
require.False(t, postBool, "Post properties not as expected") require.False(t, postBool, "Post properties not as expected")
// Check the reply values. // Check the reply values.
@@ -2386,6 +2535,28 @@ func TestImportimportMultiplePostLines(t *testing.T) {
require.False(t, replyBool, "Post properties not as expected") require.False(t, replyBool, "Post properties not as expected")
require.Equal(t, post.Id, reply.RootId, "Unexpected reply RootId") require.Equal(t, post.Id, reply.RootId, "Unexpected reply RootId")
})
t.Run("update post with replies", func(t *testing.T) {
replyPostTime2 := replyPostTime + 1
// Create post without replies.
data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{
Post: &imports.PostImportData{
Team: &teamName,
Channel: &channelName,
User: &user2.Username,
Message: model.NewPointer("Message with reply"),
CreateAt: &replyPostTime2,
},
},
LineNumber: 1,
}
errLine, err2 := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
assert.Nil(t, err2, "Expected success.")
assert.Equal(t, 0, errLine)
assertionCount++
AssertAllPostsCount(t, th.App, initialPostCount, assertionCount, team.Id)
// Update post with replies. // Update post with replies.
data = imports.LineImportWorkerData{ data = imports.LineImportWorkerData{
@@ -2395,7 +2566,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
Channel: &channelName, Channel: &channelName,
User: &user2.Username, User: &user2.Username,
Message: model.NewPointer("Message with reply"), Message: model.NewPointer("Message with reply"),
CreateAt: &replyPostTime, CreateAt: &replyPostTime2,
Replies: &[]imports.ReplyImportData{{ Replies: &[]imports.ReplyImportData{{
User: &username, User: &username,
Message: model.NewPointer("Message reply"), Message: model.NewPointer("Message reply"),
@@ -2408,8 +2579,9 @@ func TestImportimportMultiplePostLines(t *testing.T) {
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
assert.Nil(t, err, "Expected success.") assert.Nil(t, err, "Expected success.")
assert.Equal(t, 0, errLine) assert.Equal(t, 0, errLine)
// No new post created, only the reply is added.
AssertAllPostsCount(t, th.App, initialPostCount, 8, team.Id) assertionCount++
AssertAllPostsCount(t, th.App, initialPostCount, assertionCount, team.Id)
// Create new post with replies based on the previous one. // Create new post with replies based on the previous one.
data = imports.LineImportWorkerData{ data = imports.LineImportWorkerData{
@@ -2419,7 +2591,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
Channel: &channelName, Channel: &channelName,
User: &user2.Username, User: &user2.Username,
Message: model.NewPointer("Message with reply 2"), Message: model.NewPointer("Message with reply 2"),
CreateAt: &replyPostTime, CreateAt: &replyPostTime2,
Replies: &[]imports.ReplyImportData{{ Replies: &[]imports.ReplyImportData{{
User: &username, User: &username,
Message: model.NewPointer("Message reply"), Message: model.NewPointer("Message reply"),
@@ -2432,8 +2604,8 @@ func TestImportimportMultiplePostLines(t *testing.T) {
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
assert.Nil(t, err, "Expected success.") assert.Nil(t, err, "Expected success.")
assert.Equal(t, 0, errLine) assert.Equal(t, 0, errLine)
assertionCount += 2
AssertAllPostsCount(t, th.App, initialPostCount, 10, team.Id) AssertAllPostsCount(t, th.App, initialPostCount, assertionCount, team.Id)
// Create new reply for existing post with replies. // Create new reply for existing post with replies.
data = imports.LineImportWorkerData{ data = imports.LineImportWorkerData{
@@ -2443,7 +2615,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
Channel: &channelName, Channel: &channelName,
User: &user2.Username, User: &user2.Username,
Message: model.NewPointer("Message with reply"), Message: model.NewPointer("Message with reply"),
CreateAt: &replyPostTime, CreateAt: &replyPostTime2,
Replies: &[]imports.ReplyImportData{{ Replies: &[]imports.ReplyImportData{{
User: &username, User: &username,
Message: model.NewPointer("Message reply 2"), Message: model.NewPointer("Message reply 2"),
@@ -2456,12 +2628,10 @@ func TestImportimportMultiplePostLines(t *testing.T) {
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
assert.Nil(t, err, "Expected success.") assert.Nil(t, err, "Expected success.")
assert.Equal(t, 0, errLine) assert.Equal(t, 0, errLine)
assertionCount++
AssertAllPostsCount(t, th.App, initialPostCount, 11, team.Id) AssertAllPostsCount(t, th.App, initialPostCount, assertionCount, team.Id)
// Create new reply with type and edit_at for existing post with replies. // Create new reply with type and edit_at for existing post with replies.
// Post with reply.
editedReplyPostTime := hashtagTime + 6 editedReplyPostTime := hashtagTime + 6
editedReplyTime := hashtagTime + 7 editedReplyTime := hashtagTime + 7
editedReplyEditTime := hashtagTime + 8 editedReplyEditTime := hashtagTime + 8
@@ -2488,17 +2658,19 @@ func TestImportimportMultiplePostLines(t *testing.T) {
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
assert.Nil(t, err, "Expected success.") assert.Nil(t, err, "Expected success.")
assert.Equal(t, 0, errLine) assert.Equal(t, 0, errLine)
assertionCount += 2
AssertAllPostsCount(t, th.App, initialPostCount, 13, team.Id) AssertAllPostsCount(t, th.App, initialPostCount, assertionCount, team.Id)
// Check the reply values. // Check the reply values.
replies, nErr = th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, editedReplyTime) replies, nErr := th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, editedReplyTime)
assert.NoError(t, nErr, "Expected success.") assert.NoError(t, nErr, "Expected success.")
reply = replies[0] reply := replies[0]
importReply := (*data.Post.Replies)[0] importReply := (*data.Post.Replies)[0]
replyBool = reply.Type != *importReply.Type || reply.Message != *importReply.Message || reply.CreateAt != *importReply.CreateAt || reply.EditAt != *importReply.EditAt || reply.UserId != user.Id replyBool := reply.Type != *importReply.Type || reply.Message != *importReply.Message || reply.CreateAt != *importReply.CreateAt || reply.EditAt != *importReply.EditAt || reply.UserId != user.Id
require.False(t, replyBool, "Post properties not as expected") require.False(t, replyBool, "Post properties not as expected")
})
t.Run("import post with pinned message", func(t *testing.T) {
// Create another Team. // Create another Team.
teamName2 := model.NewRandomTeamName() teamName2 := model.NewRandomTeamName()
th.App.importTeam(th.Context, &imports.TeamImportData{ th.App.importTeam(th.Context, &imports.TeamImportData{
@@ -2506,8 +2678,8 @@ func TestImportimportMultiplePostLines(t *testing.T) {
DisplayName: model.NewPointer("Display Name 2"), DisplayName: model.NewPointer("Display Name 2"),
Type: model.NewPointer("O"), Type: model.NewPointer("O"),
}, false) }, false)
team2, err := th.App.GetTeamByName(teamName2) team2, err2 := th.App.GetTeamByName(teamName2)
require.Nil(t, err, "Failed to get team from database.") require.Nil(t, err2, "Failed to get team from database.")
// Create another Channel for the another team. // Create another Channel for the another team.
th.App.importChannel(th.Context, &imports.ChannelImportData{ th.App.importChannel(th.Context, &imports.ChannelImportData{
@@ -2524,7 +2696,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
require.NoError(t, nErr) require.NoError(t, nErr)
// Try adding two valid posts in apply mode. // Try adding two valid posts in apply mode.
data = imports.LineImportWorkerData{ data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{ LineImportData: imports.LineImportData{
Post: &imports.PostImportData{ Post: &imports.PostImportData{
Team: &teamName, Team: &teamName,
@@ -2548,8 +2720,8 @@ func TestImportimportMultiplePostLines(t *testing.T) {
}, },
LineNumber: 1, LineNumber: 1,
} }
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data, data2}, false, true) errLine, err2 := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data, data2}, false, true)
assert.Nil(t, err) assert.Nil(t, err2)
assert.Equal(t, 0, errLine) assert.Equal(t, 0, errLine)
// Create a pinned message. // Create a pinned message.
@@ -2579,13 +2751,15 @@ func TestImportimportMultiplePostLines(t *testing.T) {
// Posts should be added to the right team // Posts should be added to the right team
AssertAllPostsCount(t, th.App, initialPostCountForTeam2, 1, team2.Id) AssertAllPostsCount(t, th.App, initialPostCountForTeam2, 1, team2.Id)
AssertAllPostsCount(t, th.App, initialPostCount, 15, team.Id) assertionCount += 2
AssertAllPostsCount(t, th.App, initialPostCount, assertionCount, team.Id)
})
t.Run("Importing a post with a reply both pinned", func(t *testing.T) { t.Run("Importing a post with a reply both pinned", func(t *testing.T) {
// Create a thread. // Create a thread.
importCreate := time.Now().Add(-1 * time.Minute).UnixMilli() importCreate := time.Now().Add(-1 * time.Minute).UnixMilli()
replyCreate := time.Now().Add(-30 * time.Second).UnixMilli() replyCreate := time.Now().Add(-30 * time.Second).UnixMilli()
data = imports.LineImportWorkerData{ data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{ LineImportData: imports.LineImportData{
Post: &imports.PostImportData{ Post: &imports.PostImportData{
Team: &teamName, Team: &teamName,
@@ -2608,7 +2782,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
_, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) _, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
require.Nil(t, err) require.Nil(t, err)
resultPosts, nErr = th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, importCreate) resultPosts, nErr := th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, importCreate)
require.NoError(t, nErr) require.NoError(t, nErr)
require.Equal(t, 1, len(resultPosts)) require.Equal(t, 1, len(resultPosts))
require.True(t, resultPosts[0].IsPinned) require.True(t, resultPosts[0].IsPinned)
@@ -2622,7 +2796,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
t.Run("Importing a post with a thread", func(t *testing.T) { t.Run("Importing a post with a thread", func(t *testing.T) {
// Create a thread. // Create a thread.
importCreate := time.Now().Add(-1 * time.Minute).UnixMilli() importCreate := time.Now().Add(-1 * time.Minute).UnixMilli()
data = imports.LineImportWorkerData{ data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{ LineImportData: imports.LineImportData{
Post: &imports.PostImportData{ Post: &imports.PostImportData{
Team: &teamName, Team: &teamName,
@@ -2647,16 +2821,16 @@ func TestImportimportMultiplePostLines(t *testing.T) {
LineNumber: 1, LineNumber: 1,
} }
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err2 := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
require.Nil(t, err) require.Nil(t, err2)
require.Equal(t, 0, errLine) require.Equal(t, 0, errLine)
resultPosts, nErr = th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, importCreate) resultPosts, nErr := th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, importCreate)
require.NoError(t, nErr) require.NoError(t, nErr)
require.Equal(t, 1, len(resultPosts)) require.Equal(t, 1, len(resultPosts))
followers, err := th.App.Srv().Store().Thread().GetThreadFollowers(resultPosts[0].Id, true) followers, nErr := th.App.Srv().Store().Thread().GetThreadFollowers(resultPosts[0].Id, true)
require.NoError(t, err) require.NoError(t, nErr)
assert.ElementsMatch(t, []string{user.Id, user2.Id}, followers) assert.ElementsMatch(t, []string{user.Id, user2.Id}, followers)
}) })
@@ -2664,7 +2838,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
t.Run("Importing a post with a non existent follower", func(t *testing.T) { t.Run("Importing a post with a non existent follower", func(t *testing.T) {
// Create a thread. // Create a thread.
importCreate := time.Now().Add(-1 * time.Minute).UnixMilli() importCreate := time.Now().Add(-1 * time.Minute).UnixMilli()
data = imports.LineImportWorkerData{ data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{ LineImportData: imports.LineImportData{
Post: &imports.PostImportData{ Post: &imports.PostImportData{
Team: &teamName, Team: &teamName,
@@ -2688,14 +2862,14 @@ func TestImportimportMultiplePostLines(t *testing.T) {
LineNumber: 1, LineNumber: 1,
} }
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
require.NotNil(t, err) require.NotNil(t, err)
require.Equal(t, 1, errLine) require.Equal(t, 1, errLine)
}) })
t.Run("Importing a post with a non existent follower", func(t *testing.T) { t.Run("Importing a post with a non existent follower", func(t *testing.T) {
importCreate := time.Now().Add(-1 * time.Minute).UnixMilli() importCreate := time.Now().Add(-1 * time.Minute).UnixMilli()
data = imports.LineImportWorkerData{ data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{ LineImportData: imports.LineImportData{
Post: &imports.PostImportData{ Post: &imports.PostImportData{
Team: &teamName, Team: &teamName,
@@ -2719,14 +2893,14 @@ func TestImportimportMultiplePostLines(t *testing.T) {
LineNumber: 1, LineNumber: 1,
} }
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
require.NotNil(t, err) require.NotNil(t, err)
require.Equal(t, 1, errLine) require.Equal(t, 1, errLine)
}) })
t.Run("Importing a post with new followers", func(t *testing.T) { t.Run("Importing a post with new followers", func(t *testing.T) {
importCreate := time.Now().Add(-5 * time.Minute).UnixMilli() importCreate := time.Now().Add(-5 * time.Minute).UnixMilli()
data = imports.LineImportWorkerData{ data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{ LineImportData: imports.LineImportData{
Post: &imports.PostImportData{ Post: &imports.PostImportData{
Team: &teamName, Team: &teamName,
@@ -2739,11 +2913,11 @@ func TestImportimportMultiplePostLines(t *testing.T) {
LineNumber: 1, LineNumber: 1,
} }
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
require.Nil(t, err) require.Nil(t, err)
require.Equal(t, 0, errLine) require.Equal(t, 0, errLine)
resultPosts, nErr = th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, importCreate) resultPosts, nErr := th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, importCreate)
require.NoError(t, nErr) require.NoError(t, nErr)
require.Equal(t, 1, len(resultPosts)) require.Equal(t, 1, len(resultPosts))
@@ -2773,8 +2947,8 @@ func TestImportimportMultiplePostLines(t *testing.T) {
require.Nil(t, err) require.Nil(t, err)
require.Equal(t, 0, errLine) require.Equal(t, 0, errLine)
followers, err := th.App.Srv().Store().Thread().GetThreadFollowers(resultPosts[0].Id, true) followers, nErr := th.App.Srv().Store().Thread().GetThreadFollowers(resultPosts[0].Id, true)
require.NoError(t, err) require.NoError(t, nErr)
assert.ElementsMatch(t, []string{user.Id}, followers) assert.ElementsMatch(t, []string{user.Id}, followers)
}) })
@@ -2782,7 +2956,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
t.Run("Importing a post that someone flagged", func(t *testing.T) { t.Run("Importing a post that someone flagged", func(t *testing.T) {
// Create a thread. // Create a thread.
importCreate := time.Now().Add(-1 * time.Minute).UnixMilli() importCreate := time.Now().Add(-1 * time.Minute).UnixMilli()
data = imports.LineImportWorkerData{ data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{ LineImportData: imports.LineImportData{
Post: &imports.PostImportData{ Post: &imports.PostImportData{
Team: &teamName, Team: &teamName,
@@ -2796,16 +2970,16 @@ func TestImportimportMultiplePostLines(t *testing.T) {
LineNumber: 1, LineNumber: 1,
} }
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
require.Nil(t, err) require.Nil(t, err)
require.Equal(t, 0, errLine) require.Equal(t, 0, errLine)
resultPosts, nErr = th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, importCreate) resultPosts, nErr := th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, importCreate)
require.NoError(t, nErr) require.NoError(t, nErr)
require.Equal(t, 1, len(resultPosts)) require.Equal(t, 1, len(resultPosts))
pref, err := th.App.ch.srv.Store().Preference().GetCategoryAndName(model.PreferenceCategoryFlaggedPost, resultPosts[0].Id) pref, nErr := th.App.ch.srv.Store().Preference().GetCategoryAndName(model.PreferenceCategoryFlaggedPost, resultPosts[0].Id)
require.NoError(t, err) require.NoError(t, nErr)
require.Len(t, pref, 1) require.Len(t, pref, 1)
assert.Equal(t, user.Id, pref[0].UserId) assert.Equal(t, user.Id, pref[0].UserId)
@@ -2815,7 +2989,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
// Create a thread. // Create a thread.
importCreate := time.Now().Add(-1 * time.Minute).UnixMilli() importCreate := time.Now().Add(-1 * time.Minute).UnixMilli()
replyCreate := time.Now().Add(-30 * time.Second).UnixMilli() replyCreate := time.Now().Add(-30 * time.Second).UnixMilli()
data = imports.LineImportWorkerData{ data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{ LineImportData: imports.LineImportData{
Post: &imports.PostImportData{ Post: &imports.PostImportData{
Team: &teamName, Team: &teamName,
@@ -2834,16 +3008,16 @@ func TestImportimportMultiplePostLines(t *testing.T) {
LineNumber: 1, LineNumber: 1,
} }
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true) errLine, err := th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
require.Nil(t, err) require.Nil(t, err)
require.Equal(t, 0, errLine) require.Equal(t, 0, errLine)
resultPosts, nErr = th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, replyCreate) resultPosts, nErr := th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, replyCreate)
require.NoError(t, nErr) require.NoError(t, nErr)
require.Equal(t, 1, len(resultPosts)) require.Equal(t, 1, len(resultPosts))
pref, err := th.App.ch.srv.Store().Preference().GetCategoryAndName(model.PreferenceCategoryFlaggedPost, resultPosts[0].Id) pref, nErr := th.App.ch.srv.Store().Preference().GetCategoryAndName(model.PreferenceCategoryFlaggedPost, resultPosts[0].Id)
require.NoError(t, err) require.NoError(t, nErr)
require.Len(t, pref, 1) require.Len(t, pref, 1)
assert.Equal(t, user2.Id, pref[0].UserId) assert.Equal(t, user2.Id, pref[0].UserId)