(t *testing.T)
| 10283 | } |
| 10284 | |
| 10285 | func TestChatCostUsers(t *testing.T) { |
| 10286 | t.Parallel() |
| 10287 | |
| 10288 | seedCtx := testutil.Context(t, testutil.WaitLong) |
| 10289 | client, db := newChatClientWithDatabase(t) |
| 10290 | firstUser := coderdtest.CreateFirstUser(t, client.Client) |
| 10291 | memberClientRaw, member := coderdtest.CreateAnotherUser(t, client.Client, firstUser.OrganizationID) |
| 10292 | memberClient := codersdk.NewExperimentalClient(memberClientRaw) |
| 10293 | firstUserRecord, err := db.GetUserByID(dbauthz.AsSystemRestricted(seedCtx), firstUser.UserID) |
| 10294 | require.NoError(t, err) |
| 10295 | modelConfig := createChatModelConfig(t, client) |
| 10296 | |
| 10297 | adminChat := dbgen.Chat(t, db, database.Chat{ |
| 10298 | OrganizationID: firstUser.OrganizationID, |
| 10299 | OwnerID: firstUser.UserID, |
| 10300 | LastModelConfigID: modelConfig.ID, |
| 10301 | Title: "admin chat", |
| 10302 | }) |
| 10303 | _ = dbgen.ChatMessage(t, db, database.ChatMessage{ |
| 10304 | ChatID: adminChat.ID, |
| 10305 | ModelConfigID: uuid.NullUUID{UUID: modelConfig.ID, Valid: true}, |
| 10306 | Role: database.ChatMessageRoleAssistant, |
| 10307 | InputTokens: sql.NullInt64{Int64: 100, Valid: true}, |
| 10308 | OutputTokens: sql.NullInt64{Int64: 50, Valid: true}, |
| 10309 | TotalCostMicros: sql.NullInt64{Int64: 300, Valid: true}, |
| 10310 | }) |
| 10311 | |
| 10312 | memberChat := dbgen.Chat(t, db, database.Chat{ |
| 10313 | OrganizationID: firstUser.OrganizationID, |
| 10314 | OwnerID: member.ID, |
| 10315 | LastModelConfigID: modelConfig.ID, |
| 10316 | Title: "member chat", |
| 10317 | }) |
| 10318 | _ = dbgen.ChatMessage(t, db, database.ChatMessage{ |
| 10319 | ChatID: memberChat.ID, |
| 10320 | ModelConfigID: uuid.NullUUID{UUID: modelConfig.ID, Valid: true}, |
| 10321 | Role: database.ChatMessageRoleAssistant, |
| 10322 | InputTokens: sql.NullInt64{Int64: 200, Valid: true}, |
| 10323 | OutputTokens: sql.NullInt64{Int64: 100, Valid: true}, |
| 10324 | TotalCostMicros: sql.NullInt64{Int64: 800, Valid: true}, |
| 10325 | }) |
| 10326 | |
| 10327 | t.Run("AdminCanListUsers", func(t *testing.T) { |
| 10328 | t.Parallel() |
| 10329 | |
| 10330 | ctx := testutil.Context(t, testutil.WaitLong) |
| 10331 | resp, err := client.GetChatCostUsers(ctx, codersdk.ChatCostUsersOptions{}) |
| 10332 | require.NoError(t, err) |
| 10333 | require.Equal(t, int64(2), resp.Count) |
| 10334 | require.Len(t, resp.Users, 2) |
| 10335 | require.Equal(t, member.ID, resp.Users[0].UserID) |
| 10336 | require.Equal(t, member.Username, resp.Users[0].Username) |
| 10337 | require.Equal(t, int64(800), resp.Users[0].TotalCostMicros) |
| 10338 | require.Equal(t, int64(1), resp.Users[0].MessageCount) |
| 10339 | require.Equal(t, int64(1), resp.Users[0].ChatCount) |
| 10340 | require.Equal(t, firstUser.UserID, resp.Users[1].UserID) |
| 10341 | require.Equal(t, firstUserRecord.Username, resp.Users[1].Username) |
| 10342 | require.Equal(t, int64(300), resp.Users[1].TotalCostMicros) |
nothing calls this directly
no test coverage detected