(t *testing.T)
| 267 | } |
| 268 | |
| 269 | func TestChatDebugStep(t *testing.T) { |
| 270 | t.Parallel() |
| 271 | |
| 272 | startedAt := time.Now().UTC().Round(time.Second) |
| 273 | finishedAt := startedAt.Add(2 * time.Second) |
| 274 | attempts := json.RawMessage(`[ |
| 275 | { |
| 276 | "attempt_number": 1, |
| 277 | "status": "completed", |
| 278 | "raw_request": {"url": "https://example.com"}, |
| 279 | "raw_response": {"status": "200"}, |
| 280 | "duration_ms": 123, |
| 281 | "started_at": "2026-03-01T10:00:01Z", |
| 282 | "finished_at": "2026-03-01T10:00:02Z" |
| 283 | } |
| 284 | ]`) |
| 285 | step := database.ChatDebugStep{ |
| 286 | ID: uuid.New(), |
| 287 | RunID: uuid.New(), |
| 288 | ChatID: uuid.New(), |
| 289 | StepNumber: 1, |
| 290 | Operation: "stream", |
| 291 | Status: "completed", |
| 292 | NormalizedRequest: json.RawMessage(`{"messages":[]}`), |
| 293 | Attempts: attempts, |
| 294 | Metadata: json.RawMessage(`{"provider":"openai"}`), |
| 295 | StartedAt: startedAt, |
| 296 | UpdatedAt: finishedAt, |
| 297 | FinishedAt: sql.NullTime{Time: finishedAt, Valid: true}, |
| 298 | } |
| 299 | |
| 300 | sdk := db2sdk.ChatDebugStep(step) |
| 301 | |
| 302 | // Verify all scalar fields are mapped correctly. |
| 303 | require.Equal(t, step.ID, sdk.ID) |
| 304 | require.Equal(t, step.RunID, sdk.RunID) |
| 305 | require.Equal(t, step.ChatID, sdk.ChatID) |
| 306 | require.Equal(t, step.StepNumber, sdk.StepNumber) |
| 307 | require.Equal(t, codersdk.ChatDebugStepOperationStream, sdk.Operation) |
| 308 | require.Equal(t, codersdk.ChatDebugStatusCompleted, sdk.Status) |
| 309 | require.Equal(t, startedAt, sdk.StartedAt) |
| 310 | require.Equal(t, finishedAt, sdk.UpdatedAt) |
| 311 | require.Equal(t, &finishedAt, sdk.FinishedAt) |
| 312 | |
| 313 | // Verify JSON object fields are deserialized. |
| 314 | require.NotNil(t, sdk.NormalizedRequest) |
| 315 | require.Equal(t, map[string]any{"messages": []any{}}, sdk.NormalizedRequest) |
| 316 | require.NotNil(t, sdk.Metadata) |
| 317 | require.Equal(t, map[string]any{"provider": "openai"}, sdk.Metadata) |
| 318 | |
| 319 | // Verify nullable fields are nil when the DB row has NULL values. |
| 320 | require.Nil(t, sdk.HistoryTipMessageID, "NULL HistoryTipMessageID should map to nil") |
| 321 | require.Nil(t, sdk.AssistantMessageID, "NULL AssistantMessageID should map to nil") |
| 322 | require.Nil(t, sdk.NormalizedResponse, "NULL NormalizedResponse should map to nil") |
| 323 | require.Nil(t, sdk.Usage, "NULL Usage should map to nil") |
| 324 | require.Nil(t, sdk.Error, "NULL Error should map to nil") |
| 325 | |
| 326 | // Verify attempts are preserved with all fields. |
nothing calls this directly
no test coverage detected