• Steven's avatar
    fix(postgres): handle missing PAT data gracefully and add comprehensive tests · d9e8387d
    Steven authored
    Fixes #5612, #5611
    
    Root cause: PostgreSQL's jsonb_array_elements() throws errors when the
    'tokens' key is missing or malformed, while SQLite/MySQL return NULL
    gracefully. This caused:
    - 502 errors when creating admin after v0.25.3 → v0.26.0 upgrade
    - Settings not persisting and users unable to stay logged in
    
    Changes to store/db/postgres/user_setting.go:
    - Remove strict JSONB operations from GetUserByPATHash query
    - Fetch all PERSONAL_ACCESS_TOKENS rows and filter in Go
    - Skip malformed/invalid JSON rows with continue (error recovery)
    - Match SQLite/MySQL's forgiving error handling
    
    New integration tests (store/test/user_setting_test.go):
    - TestUserSettingGetUserByPATHashNoTokensKey
    - TestUserSettingGetUserByPATHashEmptyTokensArray
    - TestUserSettingGetUserByPATHashWithOtherUsers
    
    New PostgreSQL-specific tests (store/db/postgres/user_setting_test.go):
    - TestGetUserByPATHashWithMissingData (comprehensive edge cases)
    - TestGetUserByPATHashPerformance (100+ users)
    - TestUpsertUserSetting (basic upsert)
    
    Test coverage:
     Missing PERSONAL_ACCESS_TOKENS key
     Empty/malformed JSON data
     Multiple users with mixed valid/invalid data
     Performance with 100+ users
     Error recovery without crashes
    
    Benefits:
    - No database migration required (TEXT column works fine)
    - Backward compatible with v0.25.3 upgrades
    - Handles missing/corrupt data gracefully
    - Consistent behavior across all database drivers
    d9e8387d
user_setting_test.go 29.2 KB