@@ -31,20 +31,28 @@ func TestCheckInactiveUsers(t *testing.T) {
31
31
ctx , cancelFunc := context .WithCancel (context .Background ())
32
32
t .Cleanup (cancelFunc )
33
33
34
- inactiveUser1 := setupUser ( ctx , t , db , "dormant-user-1@coder.com" , database . UserStatusActive , time . Now (). Add ( - dormancyPeriod ). Add ( - time . Minute ))
35
- inactiveUser2 := setupUser ( ctx , t , db , "dormant-user-2@coder.com" , database . UserStatusActive , time .Now (). Add ( - dormancyPeriod ). Add ( - time . Hour ) )
36
- inactiveUser3 := setupUser ( ctx , t , db , "dormant-user-3@coder.com" , database . UserStatusActive , time . Now (). Add (- dormancyPeriod ). Add ( - 6 * time . Hour ) )
34
+ // Use a fixed base time to avoid timing races
35
+ baseTime := time . Date ( 2023 , 1 , 1 , 0 , 0 , 0 , 0 , time .UTC )
36
+ dormancyThreshold := baseTime . Add (- dormancyPeriod )
37
37
38
- activeUser1 := setupUser (ctx , t , db , "active-user-1@coder.com" , database .UserStatusActive , time .Now ().Add (- dormancyPeriod ).Add (time .Minute ))
39
- activeUser2 := setupUser (ctx , t , db , "active-user-2@coder.com" , database .UserStatusActive , time .Now ().Add (- dormancyPeriod ).Add (time .Hour ))
40
- activeUser3 := setupUser (ctx , t , db , "active-user-3@coder.com" , database .UserStatusActive , time .Now ().Add (- dormancyPeriod ).Add (6 * time .Hour ))
38
+ // Create inactive users (last seen BEFORE dormancy threshold)
39
+ inactiveUser1 := setupUser (ctx , t , db , "dormant-user-1@coder.com" , database .UserStatusActive , dormancyThreshold .Add (- time .Minute ))
40
+ inactiveUser2 := setupUser (ctx , t , db , "dormant-user-2@coder.com" , database .UserStatusActive , dormancyThreshold .Add (- time .Hour ))
41
+ inactiveUser3 := setupUser (ctx , t , db , "dormant-user-3@coder.com" , database .UserStatusActive , dormancyThreshold .Add (- 6 * time .Hour ))
41
42
42
- suspendedUser1 := setupUser (ctx , t , db , "suspended-user-1@coder.com" , database .UserStatusSuspended , time .Now ().Add (- dormancyPeriod ).Add (- time .Minute ))
43
- suspendedUser2 := setupUser (ctx , t , db , "suspended-user-2@coder.com" , database .UserStatusSuspended , time .Now ().Add (- dormancyPeriod ).Add (- time .Hour ))
44
- suspendedUser3 := setupUser (ctx , t , db , "suspended-user-3@coder.com" , database .UserStatusSuspended , time .Now ().Add (- dormancyPeriod ).Add (- 6 * time .Hour ))
43
+ // Create active users (last seen AFTER dormancy threshold)
44
+ activeUser1 := setupUser (ctx , t , db , "active-user-1@coder.com" , database .UserStatusActive , baseTime .Add (- time .Minute ))
45
+ activeUser2 := setupUser (ctx , t , db , "active-user-2@coder.com" , database .UserStatusActive , baseTime .Add (- time .Hour ))
46
+ activeUser3 := setupUser (ctx , t , db , "active-user-3@coder.com" , database .UserStatusActive , baseTime .Add (- 6 * time .Hour ))
47
+
48
+ suspendedUser1 := setupUser (ctx , t , db , "suspended-user-1@coder.com" , database .UserStatusSuspended , dormancyThreshold .Add (- time .Minute ))
49
+ suspendedUser2 := setupUser (ctx , t , db , "suspended-user-2@coder.com" , database .UserStatusSuspended , dormancyThreshold .Add (- time .Hour ))
50
+ suspendedUser3 := setupUser (ctx , t , db , "suspended-user-3@coder.com" , database .UserStatusSuspended , dormancyThreshold .Add (- 6 * time .Hour ))
45
51
46
52
mAudit := audit .NewMock ()
47
53
mClock := quartz .NewMock (t )
54
+ // Set the mock clock to the base time to ensure consistent behavior
55
+ mClock .Set (baseTime )
48
56
// Run the periodic job
49
57
closeFunc := dormancy .CheckInactiveUsersWithOptions (ctx , logger , mClock , db , mAudit , interval , dormancyPeriod )
50
58
t .Cleanup (closeFunc )
0 commit comments