(t *testing.T)
| 10204 | } |
| 10205 | |
| 10206 | func TestDeleteExpiredAPIKeys(t *testing.T) { |
| 10207 | t.Parallel() |
| 10208 | db, _ := dbtestutil.NewDB(t) |
| 10209 | |
| 10210 | // Constant time for testing |
| 10211 | now := time.Date(2025, 11, 20, 12, 0, 0, 0, time.UTC) |
| 10212 | expiredBefore := now.Add(-time.Hour) // Anything before this is expired |
| 10213 | |
| 10214 | ctx := testutil.Context(t, testutil.WaitLong) |
| 10215 | |
| 10216 | user := dbgen.User(t, db, database.User{}) |
| 10217 | |
| 10218 | expiredTimes := []time.Time{ |
| 10219 | expiredBefore.Add(-time.Hour * 24 * 365), |
| 10220 | expiredBefore.Add(-time.Hour * 24), |
| 10221 | expiredBefore.Add(-time.Hour), |
| 10222 | expiredBefore.Add(-time.Minute), |
| 10223 | expiredBefore.Add(-time.Second), |
| 10224 | } |
| 10225 | for _, exp := range expiredTimes { |
| 10226 | // Expired api keys |
| 10227 | dbgen.APIKey(t, db, database.APIKey{UserID: user.ID, ExpiresAt: exp}) |
| 10228 | } |
| 10229 | |
| 10230 | unexpiredTimes := []time.Time{ |
| 10231 | expiredBefore.Add(time.Hour * 24 * 365), |
| 10232 | expiredBefore.Add(time.Hour * 24), |
| 10233 | expiredBefore.Add(time.Hour), |
| 10234 | expiredBefore.Add(time.Minute), |
| 10235 | expiredBefore.Add(time.Second), |
| 10236 | } |
| 10237 | for _, unexp := range unexpiredTimes { |
| 10238 | // Unexpired api keys |
| 10239 | dbgen.APIKey(t, db, database.APIKey{UserID: user.ID, ExpiresAt: unexp}) |
| 10240 | } |
| 10241 | |
| 10242 | // All keys are present before deletion |
| 10243 | keys, err := db.GetAPIKeysByUserID(ctx, database.GetAPIKeysByUserIDParams{ |
| 10244 | LoginType: user.LoginType, |
| 10245 | UserID: user.ID, |
| 10246 | IncludeExpired: true, |
| 10247 | }) |
| 10248 | require.NoError(t, err) |
| 10249 | require.Len(t, keys, len(expiredTimes)+len(unexpiredTimes)) |
| 10250 | |
| 10251 | // Delete expired keys |
| 10252 | // First verify the limit works by deleting one at a time |
| 10253 | deletedCount, err := db.DeleteExpiredAPIKeys(ctx, database.DeleteExpiredAPIKeysParams{ |
| 10254 | Before: expiredBefore, |
| 10255 | LimitCount: 1, |
| 10256 | }) |
| 10257 | require.NoError(t, err) |
| 10258 | require.Equal(t, int64(1), deletedCount) |
| 10259 | |
| 10260 | // Ensure it was deleted |
| 10261 | remaining, err := db.GetAPIKeysByUserID(ctx, database.GetAPIKeysByUserIDParams{ |
| 10262 | LoginType: user.LoginType, |
| 10263 | UserID: user.ID, |
nothing calls this directly
no test coverage detected