@@ -7835,3 +7835,81 @@ func TestUpdateAIBridgeInterceptionEnded(t *testing.T) {
78357835 }
78367836 })
78377837}
7838+
7839+ func TestDeleteExpiredAPIKeys (t * testing.T ) {
7840+ t .Parallel ()
7841+ db , _ := dbtestutil .NewDB (t )
7842+
7843+ // Constant time for testing
7844+ now := time .Date (2025 , 11 , 20 , 12 , 0 , 0 , 0 , time .UTC )
7845+ expiredBefore := now .Add (- time .Hour ) // Anything before this is expired
7846+
7847+ ctx := testutil .Context (t , testutil .WaitLong )
7848+
7849+ user := dbgen .User (t , db , database.User {})
7850+
7851+ expiredTimes := []time.Time {
7852+ expiredBefore .Add (- time .Hour * 24 * 365 ),
7853+ expiredBefore .Add (- time .Hour * 24 ),
7854+ expiredBefore .Add (- time .Hour ),
7855+ expiredBefore .Add (- time .Minute ),
7856+ expiredBefore .Add (- time .Second ),
7857+ }
7858+ for _ , exp := range expiredTimes {
7859+ // Expired api keys
7860+ dbgen .APIKey (t , db , database.APIKey {UserID : user .ID , ExpiresAt : exp })
7861+ }
7862+
7863+ unexpiredTimes := []time.Time {
7864+ expiredBefore .Add (time .Hour * 24 * 365 ),
7865+ expiredBefore .Add (time .Hour * 24 ),
7866+ expiredBefore .Add (time .Hour ),
7867+ expiredBefore .Add (time .Minute ),
7868+ expiredBefore .Add (time .Second ),
7869+ }
7870+ for _ , unexp := range unexpiredTimes {
7871+ // Unexpired api keys
7872+ dbgen .APIKey (t , db , database.APIKey {UserID : user .ID , ExpiresAt : unexp })
7873+ }
7874+
7875+ // All keys are present before deletion
7876+ keys , err := db .GetAPIKeysByUserID (ctx , database.GetAPIKeysByUserIDParams {
7877+ LoginType : user .LoginType ,
7878+ UserID : user .ID ,
7879+ })
7880+ require .NoError (t , err )
7881+ require .Len (t , keys , len (expiredTimes )+ len (unexpiredTimes ))
7882+
7883+ // Delete expired keys
7884+ // First verify the limit works by deleting one at a time
7885+ deletedCount , err := db .DeleteExpiredAPIKeys (ctx , database.DeleteExpiredAPIKeysParams {
7886+ Before : expiredBefore ,
7887+ LimitCount : 1 ,
7888+ })
7889+ require .NoError (t , err )
7890+ require .Equal (t , int64 (1 ), deletedCount )
7891+
7892+ // Ensure it was deleted
7893+ remaining , err := db .GetAPIKeysByUserID (ctx , database.GetAPIKeysByUserIDParams {
7894+ LoginType : user .LoginType ,
7895+ UserID : user .ID ,
7896+ })
7897+ require .NoError (t , err )
7898+ require .Len (t , remaining , len (expiredTimes )+ len (unexpiredTimes )- 1 )
7899+
7900+ // Delete the rest of the expired keys
7901+ deletedCount , err = db .DeleteExpiredAPIKeys (ctx , database.DeleteExpiredAPIKeysParams {
7902+ Before : expiredBefore ,
7903+ LimitCount : 100 ,
7904+ })
7905+ require .NoError (t , err )
7906+ require .Equal (t , int64 (len (expiredTimes )- 1 ), deletedCount )
7907+
7908+ // Ensure only unexpired keys remain
7909+ remaining , err = db .GetAPIKeysByUserID (ctx , database.GetAPIKeysByUserIDParams {
7910+ LoginType : user .LoginType ,
7911+ UserID : user .ID ,
7912+ })
7913+ require .NoError (t , err )
7914+ require .Len (t , remaining , len (unexpiredTimes ))
7915+ }
0 commit comments