[MM-59367] export: enable exporting thread followers for CRT (#27623)

Этот коммит содержится в:
Ibrahim Serdar Acikgoz
2024-08-29 14:06:41 +02:00
коммит произвёл GitHub
родитель 3dc0e63c03
Коммит d5cc2eb2f6
17 изменённых файлов: 1430 добавлений и 63 удалений

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

@@ -11,6 +11,7 @@ import (
"path/filepath"
"strings"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
@@ -2103,7 +2104,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
AssertAllPostsCount(t, th.App, initialPostCount, 0, team.Id)
// Try adding a valid post in apply mode.
time := model.GetMillis()
createAt := model.GetMillis()
data = imports.LineImportWorkerData{
LineImportData: imports.LineImportData{
Post: &imports.PostImportData{
@@ -2111,7 +2112,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
Channel: &channelName,
User: &username,
Message: ptrStr("Message"),
CreateAt: &time,
CreateAt: &createAt,
},
},
LineNumber: 1,
@@ -2122,7 +2123,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
AssertAllPostsCount(t, th.App, initialPostCount, 1, team.Id)
// Check the post values.
posts, nErr := th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, time)
posts, nErr := th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, createAt)
require.NoError(t, nErr)
require.Len(t, posts, 1, "Unexpected number of posts found.")
@@ -2139,7 +2140,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
Channel: &channelName,
User: &username,
Message: ptrStr("Message"),
CreateAt: &time,
CreateAt: &createAt,
},
},
LineNumber: 1,
@@ -2150,7 +2151,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
AssertAllPostsCount(t, th.App, initialPostCount, 1, team.Id)
// Check the post values.
posts, nErr = th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, time)
posts, nErr = th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, createAt)
require.NoError(t, nErr)
require.Len(t, posts, 1, "Unexpected number of posts found.")
@@ -2160,7 +2161,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
require.False(t, postBool, "Post properties not as expected")
// Save the post with a different time.
newTime := time + 1
newTime := createAt + 1
data = imports.LineImportWorkerData{
LineImportData: imports.LineImportData{
Post: &imports.PostImportData{
@@ -2186,7 +2187,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
Channel: &channelName,
User: &username,
Message: ptrStr("Message 2"),
CreateAt: &time,
CreateAt: &createAt,
},
},
LineNumber: 1,
@@ -2197,7 +2198,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
AssertAllPostsCount(t, th.App, initialPostCount, 3, team.Id)
// Test with hashtags
hashtagTime := time + 2
hashtagTime := createAt + 2
data = imports.LineImportWorkerData{
LineImportData: imports.LineImportData{
Post: &imports.PostImportData{
@@ -2505,7 +2506,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
Channel: &channelName,
User: &username,
Message: ptrStr("another message"),
CreateAt: &time,
CreateAt: &createAt,
},
},
LineNumber: 1,
@@ -2517,7 +2518,7 @@ func TestImportimportMultiplePostLines(t *testing.T) {
Channel: &channelName,
User: &username,
Message: ptrStr("another message"),
CreateAt: &time,
CreateAt: &createAt,
},
},
LineNumber: 1,
@@ -2554,6 +2555,166 @@ func TestImportimportMultiplePostLines(t *testing.T) {
// Posts should be added to the right team
AssertAllPostsCount(t, th.App, initialPostCountForTeam2, 1, team2.Id)
AssertAllPostsCount(t, th.App, initialPostCount, 15, team.Id)
t.Run("Importing a post with a thread", func(t *testing.T) {
// Create a thread.
importCreate := time.Now().Add(-1 * time.Minute).UnixMilli()
data = imports.LineImportWorkerData{
LineImportData: imports.LineImportData{
Post: &imports.PostImportData{
Team: &teamName,
Channel: &channelName,
User: &user.Username,
Message: ptrStr("Thread Message"),
CreateAt: ptrInt64(importCreate),
Replies: &[]imports.ReplyImportData{{
User: &user.Username,
Message: ptrStr("Reply"),
CreateAt: ptrInt64(model.GetMillis()),
}},
ThreadFollowers: &[]imports.ThreadFollowerImportData{{
User: &user.Username,
LastViewed: ptrInt64(model.GetMillis()),
}, {
User: &user2.Username,
LastViewed: ptrInt64(model.GetMillis()),
}},
},
},
LineNumber: 1,
}
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
require.Nil(t, err)
require.Equal(t, 0, errLine)
resultPosts, nErr = th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, importCreate)
require.NoError(t, nErr)
require.Equal(t, 1, len(resultPosts))
followers, err := th.App.Srv().Store().Thread().GetThreadFollowers(resultPosts[0].Id, true)
require.NoError(t, err)
assert.ElementsMatch(t, []string{user.Id, user2.Id}, followers)
})
t.Run("Importing a post with a non existent follower", func(t *testing.T) {
// Create a thread.
importCreate := time.Now().Add(-1 * time.Minute).UnixMilli()
data = imports.LineImportWorkerData{
LineImportData: imports.LineImportData{
Post: &imports.PostImportData{
Team: &teamName,
Channel: &channelName,
User: &user.Username,
Message: ptrStr("Thread Message"),
CreateAt: ptrInt64(importCreate),
Replies: &[]imports.ReplyImportData{{
User: &user.Username,
Message: ptrStr("Reply"),
CreateAt: ptrInt64(model.GetMillis()),
}},
ThreadFollowers: &[]imports.ThreadFollowerImportData{{
User: &user.Username,
LastViewed: ptrInt64(model.GetMillis()),
}, {
User: ptrStr("invalid.user"),
}},
},
},
LineNumber: 1,
}
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
require.NotNil(t, err)
require.Equal(t, 1, errLine)
})
t.Run("Importing a post with a non existent follower", func(t *testing.T) {
importCreate := time.Now().Add(-1 * time.Minute).UnixMilli()
data = imports.LineImportWorkerData{
LineImportData: imports.LineImportData{
Post: &imports.PostImportData{
Team: &teamName,
Channel: &channelName,
User: &user.Username,
Message: ptrStr("Thread Message"),
CreateAt: ptrInt64(importCreate),
Replies: &[]imports.ReplyImportData{{
User: &user.Username,
Message: ptrStr("Reply"),
CreateAt: ptrInt64(model.GetMillis()),
}},
ThreadFollowers: &[]imports.ThreadFollowerImportData{{
User: &user.Username,
LastViewed: ptrInt64(model.GetMillis()),
}, {
User: ptrStr("invalid.user"),
}},
},
},
LineNumber: 1,
}
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
require.NotNil(t, err)
require.Equal(t, 1, errLine)
})
t.Run("Importing a post with new followers", func(t *testing.T) {
importCreate := time.Now().Add(-5 * time.Minute).UnixMilli()
data = imports.LineImportWorkerData{
LineImportData: imports.LineImportData{
Post: &imports.PostImportData{
Team: &teamName,
Channel: &channelName,
User: &username,
Message: ptrStr("Hello"),
CreateAt: ptrInt64(importCreate),
},
},
LineNumber: 1,
}
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
require.Nil(t, err)
require.Equal(t, 0, errLine)
resultPosts, nErr = th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, importCreate)
require.NoError(t, nErr)
require.Equal(t, 1, len(resultPosts))
data = imports.LineImportWorkerData{
LineImportData: imports.LineImportData{
Post: &imports.PostImportData{
Team: &teamName,
Channel: &channelName,
User: &user.Username,
Message: ptrStr("Hello"),
CreateAt: ptrInt64(importCreate),
Replies: &[]imports.ReplyImportData{{
User: &user.Username,
Message: ptrStr("Reply"),
CreateAt: ptrInt64(model.GetMillis()),
}},
ThreadFollowers: &[]imports.ThreadFollowerImportData{{
User: &user.Username,
LastViewed: ptrInt64(model.GetMillis()),
}},
},
},
LineNumber: 1,
}
errLine, err = th.App.importMultiplePostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
require.Nil(t, err)
require.Equal(t, 0, errLine)
followers, err := th.App.Srv().Store().Thread().GetThreadFollowers(resultPosts[0].Id, true)
require.NoError(t, err)
assert.ElementsMatch(t, []string{user.Id}, followers)
})
}
func TestImportImportPost(t *testing.T) {
@@ -3890,6 +4051,109 @@ func TestImportImportDirectPost(t *testing.T) {
require.True(t, post.IsPinned)
})
t.Run("Importing a direct post with a thread", func(t *testing.T) {
// Create a thread.
importCreate := time.Now().Add(-1 * time.Minute).UnixMilli()
data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{
DirectPost: &imports.DirectPostImportData{
ChannelMembers: &[]string{
th.BasicUser.Username,
th.BasicUser2.Username,
},
User: ptrStr(th.BasicUser.Username),
Message: ptrStr("Thread Message"),
CreateAt: ptrInt64(importCreate),
Replies: &[]imports.ReplyImportData{{
User: ptrStr(th.BasicUser.Username),
Message: ptrStr("Reply"),
CreateAt: ptrInt64(model.GetMillis()),
}},
ThreadFollowers: &[]imports.ThreadFollowerImportData{{
User: ptrStr(th.BasicUser.Username),
LastViewed: ptrInt64(model.GetMillis()),
}, {
User: ptrStr(th.BasicUser2.Username),
LastViewed: ptrInt64(model.GetMillis()),
}},
},
},
LineNumber: 1,
}
errLine, err := th.App.importMultipleDirectPostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
require.Nil(t, err)
require.Equal(t, 0, errLine)
resultPosts, nErr := th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, importCreate)
require.NoError(t, nErr)
require.Equal(t, 1, len(resultPosts))
followers, nErr := th.App.Srv().Store().Thread().GetThreadFollowers(resultPosts[0].Id, true)
require.NoError(t, nErr)
assert.ElementsMatch(t, []string{th.BasicUser.Id, th.BasicUser2.Id}, followers)
})
t.Run("Importing a direct post with new followers", func(t *testing.T) {
importCreate := time.Now().Add(-5 * time.Minute).UnixMilli()
data := imports.LineImportWorkerData{
LineImportData: imports.LineImportData{
DirectPost: &imports.DirectPostImportData{
ChannelMembers: &[]string{
th.BasicUser.Username,
th.BasicUser2.Username,
},
User: ptrStr(th.BasicUser.Username),
Message: ptrStr("Hello"),
CreateAt: ptrInt64(importCreate),
},
},
LineNumber: 1,
}
errLine, err := th.App.importMultipleDirectPostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
require.Nil(t, err)
require.Equal(t, 0, errLine)
resultPosts, nErr := th.App.Srv().Store().Post().GetPostsCreatedAt(channel.Id, importCreate)
require.NoError(t, nErr)
require.Equal(t, 1, len(resultPosts))
data = imports.LineImportWorkerData{
LineImportData: imports.LineImportData{
DirectPost: &imports.DirectPostImportData{
ChannelMembers: &[]string{
th.BasicUser.Username,
th.BasicUser2.Username,
},
User: ptrStr(th.BasicUser.Username),
Message: ptrStr("Hello"),
CreateAt: ptrInt64(importCreate),
Replies: &[]imports.ReplyImportData{{
User: ptrStr(th.BasicUser.Username),
Message: ptrStr("Reply"),
CreateAt: ptrInt64(model.GetMillis()),
}},
ThreadFollowers: &[]imports.ThreadFollowerImportData{{
User: ptrStr(th.BasicUser.Username),
LastViewed: ptrInt64(model.GetMillis()),
}},
},
},
LineNumber: 1,
}
errLine, err = th.App.importMultipleDirectPostLines(th.Context, []imports.LineImportWorkerData{data}, false, true)
require.Nil(t, err)
require.Equal(t, 0, errLine)
followers, nErr := th.App.Srv().Store().Thread().GetThreadFollowers(resultPosts[0].Id, true)
require.NoError(t, nErr)
assert.ElementsMatch(t, []string{th.BasicUser.Id}, followers)
})
// ------------------ Group Channel -------------------------
// Create the GROUP channel.