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

Function TestCheckInactiveUsers

enterprise/coderd/dormancy/dormantusersjob_test.go:19–98  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

17)
18
19func TestCheckInactiveUsers(t *testing.T) {
20 t.Parallel()
21
22 // Predefine job settings
23 interval := time.Millisecond
24 dormancyPeriod := 90 * 24 * time.Hour
25
26 // Add some dormant accounts
27 logger := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true})
28 db, _ := dbtestutil.NewDB(t)
29
30 ctx, cancelFunc := context.WithCancel(context.Background())
31 t.Cleanup(cancelFunc)
32
33 // Use a fixed base time to avoid timing races
34 baseTime := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC)
35 dormancyThreshold := baseTime.Add(-dormancyPeriod)
36
37 // Create inactive users (last seen BEFORE dormancy threshold)
38 inactiveUser1 := setupUser(ctx, t, db, "dormant-user-1@coder.com", database.UserStatusActive, dormancyThreshold.Add(-time.Minute))
39 inactiveUser2 := setupUser(ctx, t, db, "dormant-user-2@coder.com", database.UserStatusActive, dormancyThreshold.Add(-time.Hour))
40 inactiveUser3 := setupUser(ctx, t, db, "dormant-user-3@coder.com", database.UserStatusActive, dormancyThreshold.Add(-6*time.Hour))
41
42 // Create active users (last seen AFTER dormancy threshold)
43 activeUser1 := setupUser(ctx, t, db, "active-user-1@coder.com", database.UserStatusActive, baseTime.Add(-time.Minute))
44 activeUser2 := setupUser(ctx, t, db, "active-user-2@coder.com", database.UserStatusActive, baseTime.Add(-time.Hour))
45 activeUser3 := setupUser(ctx, t, db, "active-user-3@coder.com", database.UserStatusActive, baseTime.Add(-6*time.Hour))
46
47 suspendedUser1 := setupUser(ctx, t, db, "suspended-user-1@coder.com", database.UserStatusSuspended, dormancyThreshold.Add(-time.Minute))
48 suspendedUser2 := setupUser(ctx, t, db, "suspended-user-2@coder.com", database.UserStatusSuspended, dormancyThreshold.Add(-time.Hour))
49 suspendedUser3 := setupUser(ctx, t, db, "suspended-user-3@coder.com", database.UserStatusSuspended, dormancyThreshold.Add(-6*time.Hour))
50
51 mAudit := audit.NewMock()
52 mClock := quartz.NewMock(t)
53 // Set the mock clock to the base time to ensure consistent behavior
54 mClock.Set(baseTime)
55 // Run the periodic job
56 closeFunc := dormancy.CheckInactiveUsersWithOptions(ctx, logger, mClock, db, mAudit, interval, dormancyPeriod)
57 t.Cleanup(closeFunc)
58
59 dur, w := mClock.AdvanceNext()
60 require.Equal(t, interval, dur)
61 w.MustWait(ctx)
62
63 rows, err := db.GetUsers(ctx, database.GetUsersParams{})
64 require.NoError(t, err)
65
66 var dormant, suspended int
67 for _, row := range rows {
68 if row.Status == database.UserStatusDormant {
69 dormant++
70 } else if row.Status == database.UserStatusSuspended {
71 suspended++
72 }
73 }
74
75 // 9 users in total, 3 active, 3 dormant, 3 suspended
76 require.Len(t, rows, 9)

Callers

nothing calls this directly

Calls 14

NewDBFunction · 0.92
NewMockFunction · 0.92
ConvertUserRowsFunction · 0.92
ignoreUpdatedAtFunction · 0.85
asDormantFunction · 0.85
setupUserFunction · 0.70
CleanupMethod · 0.65
AddMethod · 0.65
SetMethod · 0.65
GetUsersMethod · 0.65
EqualMethod · 0.45

Tested by

no test coverage detected