(t *testing.T)
| 20 | ) |
| 21 | |
| 22 | func TestRunnerRunConversation(t *testing.T) { |
| 23 | t.Parallel() |
| 24 | |
| 25 | chatID := uuid.MustParse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa") |
| 26 | noopMarkTurnStartReady := func() {} |
| 27 | |
| 28 | t.Run("OneTurnHappyPath", func(t *testing.T) { |
| 29 | t.Parallel() |
| 30 | |
| 31 | runner := newTestRunner(t, newRunConfig(t)) |
| 32 | events := make(chan codersdk.ChatStreamEvent, 3) |
| 33 | events <- statusEvent(chatID, codersdk.ChatStatusRunning) |
| 34 | events <- messagePartEvent(chatID) |
| 35 | events <- statusEvent(chatID, codersdk.ChatStatusWaiting) |
| 36 | close(events) |
| 37 | |
| 38 | err := runTestConversation(t, runner, chatID, events, noopMarkTurnStartReady) |
| 39 | require.NoError(t, err) |
| 40 | result := runner.result |
| 41 | require.Equal(t, string(codersdk.ChatStatusWaiting), result.finalStatus) |
| 42 | require.Empty(t, result.failureStage) |
| 43 | require.True(t, result.sawFirstOutput) |
| 44 | require.Equal(t, 1, result.turnsCompleted) |
| 45 | require.Equal(t, 3, result.eventCount) |
| 46 | }) |
| 47 | |
| 48 | t.Run("DuplicateWaitingDoesNotAdvanceTurn", func(t *testing.T) { |
| 49 | t.Parallel() |
| 50 | |
| 51 | cfg := newRunConfig(t) |
| 52 | cfg.Turns = 2 |
| 53 | |
| 54 | events := make(chan codersdk.ChatStreamEvent, 7) |
| 55 | events <- statusEvent(chatID, codersdk.ChatStatusRunning) |
| 56 | events <- messagePartEvent(chatID) |
| 57 | events <- statusEvent(chatID, codersdk.ChatStatusWaiting) |
| 58 | events <- statusEvent(chatID, codersdk.ChatStatusWaiting) |
| 59 | |
| 60 | var sendCount atomic.Int64 |
| 61 | runner := newTestRunnerWithChatMessage(t, cfg, chatID, func() { |
| 62 | sendCount.Add(1) |
| 63 | events <- statusEvent(chatID, codersdk.ChatStatusRunning) |
| 64 | events <- messagePartEvent(chatID) |
| 65 | events <- statusEvent(chatID, codersdk.ChatStatusWaiting) |
| 66 | close(events) |
| 67 | }) |
| 68 | |
| 69 | err := runTestConversation(t, runner, chatID, events, noopMarkTurnStartReady) |
| 70 | require.NoError(t, err) |
| 71 | result := runner.result |
| 72 | require.Equal(t, int64(1), sendCount.Load()) |
| 73 | require.Equal(t, 2, result.turnsCompleted) |
| 74 | require.Equal(t, 7, result.eventCount) |
| 75 | require.Equal(t, string(codersdk.ChatStatusWaiting), result.finalStatus) |
| 76 | }) |
| 77 | |
| 78 | t.Run("StaleWaitingAfterNextTurnRunningDoesNotAdvanceTurn", func(t *testing.T) { |
| 79 | t.Parallel() |
nothing calls this directly
no test coverage detected