(t *testing.T)
| 870 | } |
| 871 | |
| 872 | func TestWorker_MarkStale_NilChatID_Broadcasts(t *testing.T) { |
| 873 | t.Parallel() |
| 874 | ctx := testutil.Context(t, testutil.WaitShort) |
| 875 | |
| 876 | workspaceID := uuid.New() |
| 877 | ownerID := uuid.New() |
| 878 | chat1 := uuid.New() |
| 879 | |
| 880 | var mu sync.Mutex |
| 881 | var upsertRefCalls []database.UpsertChatDiffStatusReferenceParams |
| 882 | var publishedIDs []uuid.UUID |
| 883 | |
| 884 | ctrl := gomock.NewController(t) |
| 885 | store := dbmock.NewMockStore(ctrl) |
| 886 | |
| 887 | // Broadcast path: GetChatsByWorkspaceIDs scopes the query to |
| 888 | // the workspace directly; no post-filtering needed. |
| 889 | store.EXPECT().GetChatsByWorkspaceIDs(gomock.Any(), gomock.Any()). |
| 890 | DoAndReturn(func(_ context.Context, ids []uuid.UUID) ([]database.Chat, error) { |
| 891 | require.Equal(t, []uuid.UUID{workspaceID}, ids) |
| 892 | return []database.Chat{ |
| 893 | {ID: chat1, OwnerID: ownerID, WorkspaceID: uuid.NullUUID{UUID: workspaceID, Valid: true}}, |
| 894 | }, nil |
| 895 | }) |
| 896 | store.EXPECT().UpsertChatDiffStatusReference(gomock.Any(), gomock.Any()).DoAndReturn(func(_ context.Context, arg database.UpsertChatDiffStatusReferenceParams) (database.ChatDiffStatus, error) { |
| 897 | mu.Lock() |
| 898 | upsertRefCalls = append(upsertRefCalls, arg) |
| 899 | mu.Unlock() |
| 900 | return database.ChatDiffStatus{ChatID: arg.ChatID}, nil |
| 901 | }).Times(1) |
| 902 | |
| 903 | pub := func(_ context.Context, chatID uuid.UUID) error { |
| 904 | mu.Lock() |
| 905 | publishedIDs = append(publishedIDs, chatID) |
| 906 | mu.Unlock() |
| 907 | return nil |
| 908 | } |
| 909 | |
| 910 | mClock := quartz.NewMock(t) |
| 911 | logger := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true}) |
| 912 | refresher := newTestRefresher(t, mClock) |
| 913 | worker := gitsync.NewWorker(store, refresher, pub, mClock, logger) |
| 914 | |
| 915 | // Zero-value ChatID (uuid.Nil) triggers broadcast. |
| 916 | worker.MarkStale(ctx, gitsync.MarkStaleParams{ |
| 917 | WorkspaceID: workspaceID, |
| 918 | Branch: "main", |
| 919 | Origin: "https://github.com/org/repo", |
| 920 | }) |
| 921 | |
| 922 | mu.Lock() |
| 923 | defer mu.Unlock() |
| 924 | |
| 925 | require.Len(t, upsertRefCalls, 1) |
| 926 | assert.Equal(t, chat1, upsertRefCalls[0].ChatID) |
| 927 | assert.Equal(t, "main", upsertRefCalls[0].GitBranch) |
| 928 | |
| 929 | require.Len(t, publishedIDs, 1) |
nothing calls this directly
no test coverage detected