(t *testing.T)
| 1014 | } |
| 1015 | |
| 1016 | func TestService_PublishesEvents(t *testing.T) { |
| 1017 | t.Parallel() |
| 1018 | |
| 1019 | ctx := testutil.Context(t, testutil.WaitLong) |
| 1020 | db, _ := dbtestutil.NewDB(t) |
| 1021 | _, owner, chat, model := seedChat(t, db) |
| 1022 | require.NotEqual(t, uuid.Nil, owner.ID) |
| 1023 | |
| 1024 | memoryPubsub := dbpubsub.NewInMemory() |
| 1025 | svc := chatdebug.NewService(db, testutil.Logger(t), memoryPubsub) |
| 1026 | type eventResult struct { |
| 1027 | event chatdebug.DebugEvent |
| 1028 | err error |
| 1029 | } |
| 1030 | events := make(chan eventResult, 1) |
| 1031 | cancel, err := memoryPubsub.Subscribe(chatdebug.PubsubChannel(chat.ID), |
| 1032 | func(_ context.Context, message []byte) { |
| 1033 | var event chatdebug.DebugEvent |
| 1034 | unmarshalErr := json.Unmarshal(message, &event) |
| 1035 | events <- eventResult{event: event, err: unmarshalErr} |
| 1036 | }, |
| 1037 | ) |
| 1038 | require.NoError(t, err) |
| 1039 | defer cancel() |
| 1040 | |
| 1041 | run, err := svc.CreateRun(ctx, chatdebug.CreateRunParams{ |
| 1042 | ChatID: chat.ID, |
| 1043 | ModelConfigID: model.ID, |
| 1044 | Kind: chatdebug.KindChatTurn, |
| 1045 | Status: chatdebug.StatusInProgress, |
| 1046 | }) |
| 1047 | require.NoError(t, err) |
| 1048 | |
| 1049 | select { |
| 1050 | case received := <-events: |
| 1051 | require.NoError(t, received.err) |
| 1052 | require.Equal(t, chatdebug.EventKindRunUpdate, received.event.Kind) |
| 1053 | require.Equal(t, chat.ID, received.event.ChatID) |
| 1054 | require.Equal(t, run.ID, received.event.RunID) |
| 1055 | require.Equal(t, uuid.Nil, received.event.StepID) |
| 1056 | case <-time.After(testutil.WaitShort): |
| 1057 | t.Fatal("timed out waiting for debug event") |
| 1058 | } |
| 1059 | |
| 1060 | select { |
| 1061 | case received := <-events: |
| 1062 | t.Fatalf("unexpected extra event: %+v", received.event) |
| 1063 | default: |
| 1064 | } |
| 1065 | } |
| 1066 | |
| 1067 | func newFixture(t *testing.T) testFixture { |
| 1068 | t.Helper() |
nothing calls this directly
no test coverage detected