diff --git a/server/channels/store/storetest/channel_store.go b/server/channels/store/storetest/channel_store.go index b87eadefd21..5b41d7b512e 100644 --- a/server/channels/store/storetest/channel_store.go +++ b/server/channels/store/storetest/channel_store.go @@ -43,6 +43,20 @@ type SqlXExecutor interface { Select(dest any, query string, args ...any) error } +// cleanupChannelStoreData purges all channel-related data written by TestChannelStore +// sub-tests. The integrity tests (TestCheck*) do full-table scans and fail if any +// orphaned rows remain. A blanket purge is safe: no FK constraints are enforced in the +// schema, and every test suite creates its own data independently. +func cleanupChannelStoreData(t *testing.T, s SqlStore) { + t.Helper() + db := s.GetMaster() + db.Exec(`DELETE FROM Threads`) + db.Exec(`DELETE FROM ChannelMemberHistory`) + db.Exec(`DELETE FROM ChannelMembers`) + db.Exec(`DELETE FROM Channels`) + db.Exec(`DELETE FROM TeamMembers`) +} + func cleanupChannels(t *testing.T, rctx request.CTX, ss store.Store) { list, err := ss.Channel().GetAllChannels(0, 100000, store.ChannelSearchOpts{IncludeDeleted: true}) require.NoError(t, err, "error cleaning all channels", err) @@ -68,6 +82,7 @@ func channelMemberToJSON(t *testing.T, cm *model.ChannelMember) string { func TestChannelStore(t *testing.T, rctx request.CTX, ss store.Store, s SqlStore) { createDefaultRoles(ss) + t.Cleanup(func() { cleanupChannelStoreData(t, s) }) t.Run("Save", func(t *testing.T) { testChannelStoreSave(t, rctx, ss) }) t.Run("SaveDirectChannel", func(t *testing.T) { testChannelStoreSaveDirectChannel(t, rctx, ss, s) })