(t *testing.T)
| 8121 | } |
| 8122 | |
| 8123 | func TestStreamChat(t *testing.T) { |
| 8124 | t.Parallel() |
| 8125 | |
| 8126 | t.Run("Success", func(t *testing.T) { |
| 8127 | t.Parallel() |
| 8128 | |
| 8129 | ctx := testutil.Context(t, testutil.WaitLong) |
| 8130 | client := newChatClient(t) |
| 8131 | firstUser := coderdtest.CreateFirstUser(t, client.Client) |
| 8132 | _ = createChatModelConfig(t, client) |
| 8133 | |
| 8134 | const initialMessage = "stream chat route initial message" |
| 8135 | chat, err := client.CreateChat(ctx, codersdk.CreateChatRequest{ |
| 8136 | OrganizationID: firstUser.OrganizationID, |
| 8137 | Content: []codersdk.ChatInputPart{ |
| 8138 | { |
| 8139 | Type: codersdk.ChatInputPartTypeText, |
| 8140 | Text: initialMessage, |
| 8141 | }, |
| 8142 | }, |
| 8143 | }) |
| 8144 | require.NoError(t, err) |
| 8145 | |
| 8146 | events, closer, err := client.StreamChat(ctx, chat.ID, nil) |
| 8147 | require.NoError(t, err) |
| 8148 | defer closer.Close() |
| 8149 | |
| 8150 | hasTextPart := func(parts []codersdk.ChatMessagePart, want string) bool { |
| 8151 | for _, part := range parts { |
| 8152 | if part.Type == codersdk.ChatMessagePartTypeText && part.Text == want { |
| 8153 | return true |
| 8154 | } |
| 8155 | } |
| 8156 | return false |
| 8157 | } |
| 8158 | |
| 8159 | foundInitialUserMessage := false |
| 8160 | for !foundInitialUserMessage { |
| 8161 | select { |
| 8162 | case <-ctx.Done(): |
| 8163 | require.FailNow(t, "timed out waiting for expected stream chat event") |
| 8164 | case event, ok := <-events: |
| 8165 | require.True(t, ok, "stream closed before expected event") |
| 8166 | require.Equal(t, chat.ID, event.ChatID) |
| 8167 | require.NotEqual(t, codersdk.ChatStreamEventTypeError, event.Type) |
| 8168 | |
| 8169 | if event.Type == codersdk.ChatStreamEventTypeMessage && |
| 8170 | event.Message != nil && |
| 8171 | event.Message.Role == codersdk.ChatMessageRoleUser && |
| 8172 | hasTextPart(event.Message.Content, initialMessage) { |
| 8173 | foundInitialUserMessage = true |
| 8174 | } |
| 8175 | } |
| 8176 | } |
| 8177 | }) |
| 8178 | |
| 8179 | t.Run("Unauthenticated", func(t *testing.T) { |
| 8180 | t.Parallel() |
nothing calls this directly
no test coverage detected