(t *testing.T)
| 125 | } |
| 126 | |
| 127 | func TestService_AggregateRunSummary(t *testing.T) { |
| 128 | t.Parallel() |
| 129 | |
| 130 | t.Run("NilRunID", func(t *testing.T) { |
| 131 | t.Parallel() |
| 132 | fixture := newFixture(t) |
| 133 | got, err := fixture.svc.AggregateRunSummary(fixture.ctx, uuid.Nil, nil) |
| 134 | require.NoError(t, err) |
| 135 | require.Nil(t, got) |
| 136 | }) |
| 137 | |
| 138 | t.Run("ZeroSteps", func(t *testing.T) { |
| 139 | t.Parallel() |
| 140 | fixture := newFixture(t) |
| 141 | run := createRun(t, fixture) |
| 142 | |
| 143 | // No steps created. Call with a base summary containing |
| 144 | // first_message so we can verify it is preserved. |
| 145 | base := map[string]any{"first_message": "hello world"} |
| 146 | got, err := fixture.svc.AggregateRunSummary(fixture.ctx, run.ID, base) |
| 147 | require.NoError(t, err) |
| 148 | require.Equal(t, "hello world", got["first_message"]) |
| 149 | require.EqualValues(t, 0, got["step_count"]) |
| 150 | require.EqualValues(t, int64(0), got["total_input_tokens"]) |
| 151 | require.EqualValues(t, int64(0), got["total_output_tokens"]) |
| 152 | require.NotContains(t, got, "total_reasoning_tokens") |
| 153 | require.NotContains(t, got, "total_cache_creation_tokens") |
| 154 | require.NotContains(t, got, "total_cache_read_tokens") |
| 155 | require.NotContains(t, got, "has_error") |
| 156 | require.NotContains(t, got, "endpoint_label") |
| 157 | }) |
| 158 | |
| 159 | t.Run("NilBaseSummary", func(t *testing.T) { |
| 160 | t.Parallel() |
| 161 | fixture := newFixture(t) |
| 162 | run := createRun(t, fixture) |
| 163 | |
| 164 | // Create a step with usage. |
| 165 | step := createTestStep(t, fixture, run.ID) |
| 166 | updateTestStepWithUsage(t, fixture, step.ID, 10, 5, 0, 0) |
| 167 | |
| 168 | got, err := fixture.svc.AggregateRunSummary(fixture.ctx, run.ID, nil) |
| 169 | require.NoError(t, err) |
| 170 | require.NotNil(t, got) |
| 171 | require.EqualValues(t, 1, got["step_count"]) |
| 172 | require.EqualValues(t, int64(10), got["total_input_tokens"]) |
| 173 | require.EqualValues(t, int64(5), got["total_output_tokens"]) |
| 174 | }) |
| 175 | |
| 176 | t.Run("PreservesFirstMessage", func(t *testing.T) { |
| 177 | t.Parallel() |
| 178 | fixture := newFixture(t) |
| 179 | run := createRun(t, fixture) |
| 180 | |
| 181 | step := createTestStep(t, fixture, run.ID) |
| 182 | updateTestStepWithUsage(t, fixture, step.ID, 20, 10, 0, 0) |
| 183 | |
| 184 | base := map[string]any{"first_message": "hello world"} |
nothing calls this directly
no test coverage detected