[MM-53339] import: dont miss out reactions from replies (#29060)
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
3da77f2f05
Коммит
0e6ec05d5c
@@ -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)
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user