MM-29987 Implement new collapsed threads API (#16091)

Этот коммит содержится в:
Eli Yukelzon
2020-11-08 10:36:46 +02:00
коммит произвёл GitHub
родитель 483441cea2
Коммит 45e340b5be
22 изменённых файлов: 1155 добавлений и 49 удалений

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

@@ -5255,3 +5255,308 @@ func TestUpdatePassword(t *testing.T) {
CheckOKStatus(t, res)
})
}
func TestGetThreadsForUser(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
t.Run("empty", func(t *testing.T) {
Client := th.Client
_, resp := Client.CreatePost(&model.Post{ChannelId: th.BasicChannel.Id, Message: "testMsg"})
CheckNoError(t, resp)
CheckCreatedStatus(t, resp)
defer th.App.Srv().Store.Post().PermanentDeleteByUser(th.BasicUser.Id)
uss, resp := th.Client.GetUserThreads(th.BasicUser.Id, model.GetUserThreadsOpts{
Page: 0,
PageSize: 30,
})
require.Nil(t, resp.Error)
require.Len(t, uss.Threads, 0)
})
t.Run("no params, 1 thread", func(t *testing.T) {
Client := th.Client
rpost, resp := Client.CreatePost(&model.Post{ChannelId: th.BasicChannel.Id, Message: "testMsg"})
CheckNoError(t, resp)
CheckCreatedStatus(t, resp)
_, resp2 := Client.CreatePost(&model.Post{ChannelId: th.BasicChannel.Id, Message: "testReply", RootId: rpost.Id})
CheckNoError(t, resp2)
CheckCreatedStatus(t, resp2)
defer th.App.Srv().Store.Post().PermanentDeleteByUser(th.BasicUser.Id)
uss, resp := th.Client.GetUserThreads(th.BasicUser.Id, model.GetUserThreadsOpts{
Page: 0,
PageSize: 30,
})
require.Nil(t, resp.Error)
require.Len(t, uss.Threads, 1)
require.Equal(t, uss.Threads[0].PostId, rpost.Id)
require.Equal(t, uss.Threads[0].ReplyCount, int64(1))
})
t.Run("extended, 1 thread", func(t *testing.T) {
Client := th.Client
rpost, resp := Client.CreatePost(&model.Post{ChannelId: th.BasicChannel.Id, Message: "testMsg"})
CheckNoError(t, resp)
CheckCreatedStatus(t, resp)
_, resp2 := Client.CreatePost(&model.Post{ChannelId: th.BasicChannel.Id, Message: "testReply", RootId: rpost.Id})
CheckNoError(t, resp2)
CheckCreatedStatus(t, resp2)
defer th.App.Srv().Store.Post().PermanentDeleteByUser(th.BasicUser.Id)
uss, resp := th.Client.GetUserThreads(th.BasicUser.Id, model.GetUserThreadsOpts{
Page: 0,
PageSize: 30,
Extended: true,
})
require.Nil(t, resp.Error)
require.Len(t, uss.Threads, 1)
require.Equal(t, uss.Threads[0].PostId, rpost.Id)
require.Equal(t, uss.Threads[0].ReplyCount, int64(1))
require.Equal(t, uss.Threads[0].Participants[0].Id, th.BasicUser.Id)
})
t.Run("deleted, 1 thread", func(t *testing.T) {
Client := th.Client
rpost, resp := Client.CreatePost(&model.Post{ChannelId: th.BasicChannel.Id, Message: "testMsg"})
CheckNoError(t, resp)
CheckCreatedStatus(t, resp)
_, resp2 := Client.CreatePost(&model.Post{ChannelId: th.BasicChannel.Id, Message: "testReply", RootId: rpost.Id})
CheckNoError(t, resp2)
CheckCreatedStatus(t, resp2)
defer th.App.Srv().Store.Post().PermanentDeleteByUser(th.BasicUser.Id)
uss, resp := th.Client.GetUserThreads(th.BasicUser.Id, model.GetUserThreadsOpts{
Page: 0,
PageSize: 30,
Deleted: false,
})
require.Nil(t, resp.Error)
require.Len(t, uss.Threads, 1)
require.Equal(t, uss.Threads[0].PostId, rpost.Id)
require.Equal(t, uss.Threads[0].ReplyCount, int64(1))
require.Equal(t, uss.Threads[0].Participants[0].Id, th.BasicUser.Id)
res, resp2 := th.Client.DeletePost(rpost.Id)
require.True(t, res)
require.Nil(t, resp2.Error)
uss, resp = th.Client.GetUserThreads(th.BasicUser.Id, model.GetUserThreadsOpts{
Page: 0,
PageSize: 30,
Deleted: false,
})
require.Nil(t, resp.Error)
require.Len(t, uss.Threads, 0)
uss, resp = th.Client.GetUserThreads(th.BasicUser.Id, model.GetUserThreadsOpts{
Page: 0,
PageSize: 30,
Deleted: true,
})
require.Nil(t, resp.Error)
require.Len(t, uss.Threads, 1)
require.Greater(t, uss.Threads[0].Post.DeleteAt, int64(0))
})
t.Run("paged, 30 threads", func(t *testing.T) {
Client := th.Client
var rootIds []*model.Post
for i := 0; i < 30; i++ {
time.Sleep(1)
rpost, resp := Client.CreatePost(&model.Post{ChannelId: th.BasicChannel.Id, Message: "testMsg"})
CheckNoError(t, resp)
CheckCreatedStatus(t, resp)
rootIds = append(rootIds, rpost)
time.Sleep(1)
_, resp2 := Client.CreatePost(&model.Post{ChannelId: th.BasicChannel.Id, Message: "testReply", RootId: rpost.Id})
CheckNoError(t, resp2)
CheckCreatedStatus(t, resp2)
}
defer th.App.Srv().Store.Post().PermanentDeleteByUser(th.BasicUser.Id)
uss, resp := th.Client.GetUserThreads(th.BasicUser.Id, model.GetUserThreadsOpts{
Page: 0,
PageSize: 30,
Deleted: false,
})
require.Nil(t, resp.Error)
require.Len(t, uss.Threads, 30)
require.Len(t, rootIds, 30)
require.Equal(t, uss.Threads[0].PostId, rootIds[29].Id)
require.Equal(t, uss.Threads[0].ReplyCount, int64(1))
require.Equal(t, uss.Threads[0].Participants[0].Id, th.BasicUser.Id)
})
}
func TestFollowThreads(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
t.Run("1 thread", func(t *testing.T) {
Client := th.Client
rpost, resp := Client.CreatePost(&model.Post{ChannelId: th.BasicChannel.Id, Message: "testMsg"})
CheckNoError(t, resp)
CheckCreatedStatus(t, resp)
_, resp2 := Client.CreatePost(&model.Post{ChannelId: th.BasicChannel.Id, Message: "testReply", RootId: rpost.Id})
CheckNoError(t, resp2)
CheckCreatedStatus(t, resp2)
defer th.App.Srv().Store.Post().PermanentDeleteByUser(th.BasicUser.Id)
var uss *model.Threads
uss, resp = th.Client.GetUserThreads(th.BasicUser.Id, model.GetUserThreadsOpts{
Page: 0,
PageSize: 30,
Deleted: false,
})
CheckNoError(t, resp)
require.Len(t, uss.Threads, 1)
resp = th.Client.UpdateThreadFollowForUser(th.BasicUser.Id, rpost.Id, false)
CheckNoError(t, resp)
CheckOKStatus(t, resp)
uss, resp = th.Client.GetUserThreads(th.BasicUser.Id, model.GetUserThreadsOpts{
Page: 0,
PageSize: 30,
Deleted: false,
})
CheckNoError(t, resp)
require.Len(t, uss.Threads, 0)
resp = th.Client.UpdateThreadFollowForUser(th.BasicUser.Id, rpost.Id, true)
CheckNoError(t, resp)
CheckOKStatus(t, resp)
uss, resp = th.Client.GetUserThreads(th.BasicUser.Id, model.GetUserThreadsOpts{
Page: 0,
PageSize: 30,
Deleted: false,
})
CheckNoError(t, resp)
require.Len(t, uss.Threads, 1)
})
}
func TestReadThreads(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
t.Run("all threads", func(t *testing.T) {
Client := th.Client
rpost, resp := Client.CreatePost(&model.Post{ChannelId: th.BasicChannel.Id, Message: "testMsg"})
CheckNoError(t, resp)
CheckCreatedStatus(t, resp)
rpost2, resp2 := Client.CreatePost(&model.Post{ChannelId: th.BasicChannel.Id, Message: "testReply", RootId: rpost.Id})
CheckNoError(t, resp2)
CheckCreatedStatus(t, resp2)
defer th.App.Srv().Store.Post().PermanentDeleteByUser(th.BasicUser.Id)
var uss, uss2, uss3 *model.Threads
uss, resp = th.Client.GetUserThreads(th.BasicUser.Id, model.GetUserThreadsOpts{
Page: 0,
PageSize: 30,
Deleted: false,
})
CheckNoError(t, resp)
require.Len(t, uss.Threads, 1)
time.Sleep(1)
resp = th.Client.UpdateThreadsReadForUser(th.BasicUser.Id, model.GetMillis())
CheckNoError(t, resp)
CheckOKStatus(t, resp)
uss2, resp = th.Client.GetUserThreads(th.BasicUser.Id, model.GetUserThreadsOpts{
Page: 0,
PageSize: 30,
Deleted: false,
})
CheckNoError(t, resp)
require.Len(t, uss2.Threads, 1)
require.Greater(t, uss2.Threads[0].LastViewedAt, uss.Threads[0].LastViewedAt)
resp = th.Client.UpdateThreadsReadForUser(th.BasicUser.Id, rpost2.UpdateAt)
CheckNoError(t, resp)
CheckOKStatus(t, resp)
uss3, resp = th.Client.GetUserThreads(th.BasicUser.Id, model.GetUserThreadsOpts{
Page: 0,
PageSize: 30,
Deleted: false,
})
CheckNoError(t, resp)
require.Len(t, uss3.Threads, 1)
require.Equal(t, uss3.Threads[0].LastViewedAt, rpost2.UpdateAt)
})
t.Run("1 thread", func(t *testing.T) {
Client := th.Client
rpost, resp := Client.CreatePost(&model.Post{ChannelId: th.BasicChannel.Id, Message: "testMsg"})
CheckNoError(t, resp)
CheckCreatedStatus(t, resp)
_, resp2 := Client.CreatePost(&model.Post{ChannelId: th.BasicChannel.Id, Message: "testReply", RootId: rpost.Id})
CheckNoError(t, resp2)
CheckCreatedStatus(t, resp2)
rrpost, rresp := Client.CreatePost(&model.Post{ChannelId: th.BasicChannel.Id, Message: "testMsg"})
CheckNoError(t, rresp)
CheckCreatedStatus(t, rresp)
_, rresp2 := Client.CreatePost(&model.Post{ChannelId: th.BasicChannel.Id, Message: "testReply", RootId: rrpost.Id})
CheckNoError(t, rresp2)
CheckCreatedStatus(t, rresp2)
defer th.App.Srv().Store.Post().PermanentDeleteByUser(th.BasicUser.Id)
var uss, uss2, uss3 *model.Threads
uss, resp = th.Client.GetUserThreads(th.BasicUser.Id, model.GetUserThreadsOpts{
Page: 0,
PageSize: 30,
Deleted: false,
})
CheckNoError(t, resp)
require.Len(t, uss.Threads, 2)
resp = th.Client.UpdateThreadReadForUser(th.BasicUser.Id, rrpost.Id, model.GetMillis())
CheckNoError(t, resp)
CheckOKStatus(t, resp)
uss2, resp = th.Client.GetUserThreads(th.BasicUser.Id, model.GetUserThreadsOpts{
Page: 0,
PageSize: 30,
Deleted: false,
})
CheckNoError(t, resp)
require.Len(t, uss2.Threads, 2)
require.Greater(t, uss2.Threads[1].LastViewedAt, uss.Threads[1].LastViewedAt)
timestamp := model.GetMillis()
resp = th.Client.UpdateThreadReadForUser(th.BasicUser.Id, rrpost.Id, timestamp)
CheckNoError(t, resp)
CheckOKStatus(t, resp)
uss3, resp = th.Client.GetUserThreads(th.BasicUser.Id, model.GetUserThreadsOpts{
Page: 0,
PageSize: 30,
Deleted: false,
})
CheckNoError(t, resp)
require.Len(t, uss3.Threads, 2)
require.Equal(t, uss3.Threads[1].LastViewedAt, timestamp)
})
}