@@ -461,20 +461,33 @@ def test_user_with_null_email_verified_not_deleted(self, app, legacy_env):
461461 institution = "Test" ,
462462 )
463463 user .created_at = old_date
464- # Simulate edge case with NULL email_verified
465- user .email_verified = None
466464 user .last_login_at = None
467465 db .session .add (user )
468466 db .session .commit ()
469467 user_id = user .id
470468
469+ # Force NULL email_verified using raw SQL since SQLAlchemy __init__ sets False
470+ from sqlalchemy import text
471+
472+ db .session .execute (
473+ text ('UPDATE "user" SET email_verified = NULL WHERE id = :uid' ),
474+ {"uid" : str (user_id )},
475+ )
476+ db .session .commit ()
477+
478+ # Verify it's actually NULL
479+ db .session .expire_all ()
480+ user = User .query .get (user_id )
481+ assert user .email_verified is None , f"Expected None but got { user .email_verified } "
482+
471483 # Run unverified cleanup task (checks for email_verified=False)
472484 from gefapi .tasks .user_cleanup import cleanup_unverified_users
473485
474486 with patch .object (cleanup_unverified_users , "retry" ):
475487 cleanup_unverified_users ()
476488
477489 # User should still exist (email_verified is NULL, not False)
490+ db .session .expire_all ()
478491 assert User .query .get (user_id ) is not None
479492
480493 # Clean up
@@ -625,6 +638,9 @@ def test_inactive_tokens_are_revoked(self, app):
625638 with patch .object (cleanup_inactive_refresh_tokens , "retry" ):
626639 result = cleanup_inactive_refresh_tokens ()
627640
641+ # Expire session to see fresh data from database
642+ db .session .expire_all ()
643+
628644 # Token should be revoked
629645 token = RefreshToken .query .get (token_id )
630646 assert token .is_revoked is True
@@ -676,6 +692,9 @@ def test_recently_used_tokens_not_revoked(self, app):
676692 with patch .object (cleanup_inactive_refresh_tokens , "retry" ):
677693 cleanup_inactive_refresh_tokens ()
678694
695+ # Expire session to see fresh data from database
696+ db .session .expire_all ()
697+
679698 # Token should NOT be revoked
680699 token = RefreshToken .query .get (token_id )
681700 assert token .is_revoked is False
@@ -726,6 +745,9 @@ def test_null_last_used_tokens_not_revoked(self, app):
726745 with patch .object (cleanup_inactive_refresh_tokens , "retry" ):
727746 cleanup_inactive_refresh_tokens ()
728747
748+ # Expire session to see fresh data from database
749+ db .session .expire_all ()
750+
729751 # Token should NOT be revoked (NULL last_used_at = legacy)
730752 token = RefreshToken .query .get (token_id )
731753 assert token .is_revoked is False
0 commit comments