[MM-62004] update threads after a channel gets moved (#29624)
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
3aaa379687
Коммит
a3f22bd349
@@ -721,6 +721,24 @@ func (_m *ThreadStore) UpdateMembership(membership *model.ThreadMembership) (*mo
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// UpdateTeamIdForChannelThreads provides a mock function with given fields: channelId, teamId
|
||||
func (_m *ThreadStore) UpdateTeamIdForChannelThreads(channelId string, teamId string) error {
|
||||
ret := _m.Called(channelId, teamId)
|
||||
|
||||
if len(ret) == 0 {
|
||||
panic("no return value specified for UpdateTeamIdForChannelThreads")
|
||||
}
|
||||
|
||||
var r0 error
|
||||
if rf, ok := ret.Get(0).(func(string, string) error); ok {
|
||||
r0 = rf(channelId, teamId)
|
||||
} else {
|
||||
r0 = ret.Error(0)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// NewThreadStore creates a new instance of ThreadStore. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
||||
// The first argument is typically a *testing.T value.
|
||||
func NewThreadStore(t interface {
|
||||
|
||||
@@ -32,6 +32,7 @@ func TestThreadStore(t *testing.T, rctx request.CTX, ss store.Store, s SqlStore)
|
||||
t.Run("DeleteMembershipsForChannel", func(t *testing.T) { testDeleteMembershipsForChannel(t, rctx, ss) })
|
||||
t.Run("SaveMultipleMemberships", func(t *testing.T) { testSaveMultipleMemberships(t, ss) })
|
||||
t.Run("MaintainMultipleFromImport", func(t *testing.T) { testMaintainMultipleFromImport(t, rctx, ss) })
|
||||
t.Run("UpdateTeamIdForChannelThreads", func(t *testing.T) { testUpdateTeamIdForChannelThreads(t, rctx, ss) })
|
||||
}
|
||||
|
||||
func testThreadStorePopulation(t *testing.T, rctx request.CTX, ss store.Store) {
|
||||
@@ -2016,3 +2017,113 @@ func testMaintainMultipleFromImport(t *testing.T, rctx request.CTX, ss store.Sto
|
||||
require.NoError(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
func testUpdateTeamIdForChannelThreads(t *testing.T, rctx request.CTX, ss store.Store) {
|
||||
createThreadMembership := func(userID, postID string, following bool) (*model.ThreadMembership, func()) {
|
||||
t.Helper()
|
||||
opts := store.ThreadMembershipOpts{
|
||||
Following: following,
|
||||
IncrementMentions: false,
|
||||
UpdateFollowing: true,
|
||||
UpdateViewedTimestamp: false,
|
||||
UpdateParticipants: true,
|
||||
}
|
||||
mem, err := ss.Thread().MaintainMembership(userID, postID, opts)
|
||||
require.NoError(t, err)
|
||||
|
||||
return mem, func() {
|
||||
err := ss.Thread().DeleteMembershipForUser(userID, postID)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
}
|
||||
|
||||
postingUserID := model.NewId()
|
||||
|
||||
team1, err := ss.Team().Save(&model.Team{
|
||||
DisplayName: "DisplayName",
|
||||
Name: "team" + model.NewId(),
|
||||
Email: MakeEmail(),
|
||||
Type: model.TeamOpen,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
team2, err := ss.Team().Save(&model.Team{
|
||||
DisplayName: "DisplayNameTwo",
|
||||
Name: "team" + model.NewId(),
|
||||
Email: MakeEmail(),
|
||||
Type: model.TeamOpen,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
channel1, err := ss.Channel().Save(rctx, &model.Channel{
|
||||
TeamId: team1.Id,
|
||||
DisplayName: "DisplayName",
|
||||
Name: "channel1" + model.NewId(),
|
||||
Type: model.ChannelTypeOpen,
|
||||
}, -1)
|
||||
require.NoError(t, err)
|
||||
|
||||
rootPost1, err := ss.Post().Save(rctx, &model.Post{
|
||||
ChannelId: channel1.Id,
|
||||
UserId: postingUserID,
|
||||
Message: model.NewRandomString(10),
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = ss.Post().Save(rctx, &model.Post{
|
||||
ChannelId: channel1.Id,
|
||||
UserId: postingUserID,
|
||||
Message: model.NewRandomString(10),
|
||||
RootId: rootPost1.Id,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
t.Run("Should move threads to the new team", func(t *testing.T) {
|
||||
userA, err := ss.User().Save(request.TestContext(t), &model.User{
|
||||
Username: model.NewId(),
|
||||
Email: MakeEmail(),
|
||||
Password: model.NewId(),
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
_, clean := createThreadMembership(userA.Id, rootPost1.Id, true)
|
||||
defer clean()
|
||||
|
||||
err = ss.Thread().UpdateTeamIdForChannelThreads(channel1.Id, team2.Id)
|
||||
require.NoError(t, err)
|
||||
|
||||
defer func() {
|
||||
err = ss.Thread().UpdateTeamIdForChannelThreads(channel1.Id, team1.Id)
|
||||
require.NoError(t, err)
|
||||
}()
|
||||
|
||||
threads, err := ss.Thread().GetThreadsForUser(userA.Id, team2.Id, model.GetUserThreadsOpts{})
|
||||
require.NoError(t, err)
|
||||
require.Len(t, threads, 1)
|
||||
})
|
||||
|
||||
t.Run("Should not move threads to a non existent team", func(t *testing.T) {
|
||||
userA, err := ss.User().Save(request.TestContext(t), &model.User{
|
||||
Username: model.NewId(),
|
||||
Email: MakeEmail(),
|
||||
Password: model.NewId(),
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
newTeamID := model.NewId()
|
||||
|
||||
_, clean := createThreadMembership(userA.Id, rootPost1.Id, true)
|
||||
t.Cleanup(clean)
|
||||
|
||||
err = ss.Thread().UpdateTeamIdForChannelThreads(channel1.Id, newTeamID)
|
||||
require.NoError(t, err)
|
||||
|
||||
threads, err := ss.Thread().GetThreadsForUser(userA.Id, newTeamID, model.GetUserThreadsOpts{})
|
||||
require.NoError(t, err)
|
||||
require.Len(t, threads, 0)
|
||||
|
||||
threads, err = ss.Thread().GetThreadsForUser(userA.Id, team1.Id, model.GetUserThreadsOpts{})
|
||||
require.NoError(t, err)
|
||||
require.Len(t, threads, 1)
|
||||
})
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user