MCPcopy Index your code
hub / github.com/coder/coder / TestUsageEventsTrigger

Function TestUsageEventsTrigger

coderd/database/querier_test.go:9557–9757  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

9555}
9556
9557func TestUsageEventsTrigger(t *testing.T) {
9558 t.Parallel()
9559
9560 // This is not exposed in the querier interface intentionally.
9561 getDailyRows := func(ctx context.Context, sqlDB *sql.DB) []database.UsageEventsDaily {
9562 t.Helper()
9563 rows, err := sqlDB.QueryContext(ctx, "SELECT day, event_type, usage_data FROM usage_events_daily ORDER BY day ASC")
9564 require.NoError(t, err, "perform query")
9565 defer rows.Close()
9566
9567 var out []database.UsageEventsDaily
9568 for rows.Next() {
9569 var row database.UsageEventsDaily
9570 err := rows.Scan(&row.Day, &row.EventType, &row.UsageData)
9571 require.NoError(t, err, "scan row")
9572 out = append(out, row)
9573 }
9574 return out
9575 }
9576
9577 t.Run("OK", func(t *testing.T) {
9578 t.Parallel()
9579
9580 ctx := testutil.Context(t, testutil.WaitLong)
9581 db, _, sqlDB := dbtestutil.NewDBWithSQLDB(t)
9582
9583 // Assert there are no daily rows.
9584 rows := getDailyRows(ctx, sqlDB)
9585 require.Len(t, rows, 0)
9586
9587 // Insert a usage event.
9588 err := db.InsertUsageEvent(ctx, database.InsertUsageEventParams{
9589 ID: "1",
9590 EventType: "dc_managed_agents_v1",
9591 EventData: []byte(`{"count": 41}`),
9592 CreatedAt: time.Date(2025, 1, 1, 0, 0, 0, 0, time.UTC),
9593 })
9594 require.NoError(t, err)
9595
9596 // Assert there is one daily row that contains the correct data.
9597 rows = getDailyRows(ctx, sqlDB)
9598 require.Len(t, rows, 1)
9599 require.Equal(t, "dc_managed_agents_v1", rows[0].EventType)
9600 require.JSONEq(t, `{"count": 41}`, string(rows[0].UsageData))
9601 // The read row might be `+0000` rather than `UTC` specifically, so just
9602 // ensure it's within 1 second of the expected time.
9603 require.WithinDuration(t, time.Date(2025, 1, 1, 0, 0, 0, 0, time.UTC), rows[0].Day, time.Second)
9604
9605 // Insert a new usage event on the same UTC day, should increment the count.
9606 locSydney, err := time.LoadLocation("Australia/Sydney")
9607 require.NoError(t, err)
9608 err = db.InsertUsageEvent(ctx, database.InsertUsageEventParams{
9609 ID: "2",
9610 EventType: "dc_managed_agents_v1",
9611 EventData: []byte(`{"count": 1}`),
9612 // Insert it at a random point during the same day. Sydney is +1000 or
9613 // +1100, so 8am in Sydney is the previous day in UTC.
9614 CreatedAt: time.Date(2025, 1, 2, 8, 38, 57, 0, locSydney),

Callers

nothing calls this directly

Calls 13

ContextFunction · 0.92
NewDBWithSQLDBFunction · 0.92
QueryContextMethod · 0.80
ExecContextMethod · 0.80
QueryRowContextMethod · 0.80
HelperMethod · 0.65
CloseMethod · 0.65
NextMethod · 0.65
RunMethod · 0.65
InsertUsageEventMethod · 0.65
ScanMethod · 0.45
LenMethod · 0.45

Tested by

no test coverage detected