memos/store/test
Steven d9e8387d63 fix(postgres): handle missing PAT data gracefully and add comprehensive tests
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
2026-02-09 21:02:09 +08:00
..
README.md chore: move store test 2025-03-17 21:51:02 +08:00
activity_test.go perf: enable parallel execution for all store tests 2026-01-14 22:44:19 +08:00
attachment_filter_test.go perf: enable parallel execution for all store tests 2026-01-14 22:44:19 +08:00
attachment_test.go perf: enable parallel execution for all store tests 2026-01-14 22:44:19 +08:00
containers.go fix: resolve flaky migration tests and add stable upgrade test (#5514) 2026-01-20 19:25:00 +08:00
filter_helpers_test.go chore: add store tests (#5397) 2025-12-31 21:26:35 +08:00
idp_test.go perf: enable parallel execution for all store tests 2026-01-14 22:44:19 +08:00
inbox_test.go perf: enable parallel execution for all store tests 2026-01-14 22:44:19 +08:00
instance_setting_test.go test: enhance memo filter tests with COALESCE for JSON extraction and add migration data persistence tests 2026-01-19 23:09:17 +08:00
main_test.go fix: resolve flaky migration tests and add stable upgrade test (#5514) 2026-01-20 19:25:00 +08:00
memo_filter_test.go fix: add Unicode case-insensitive search for SQLite (#5559) 2026-02-02 21:10:07 +08:00
memo_relation_test.go perf: enable parallel execution for all store tests 2026-01-14 22:44:19 +08:00
memo_test.go perf: enable parallel execution for all store tests 2026-01-14 22:44:19 +08:00
migrator_test.go fix: resolve flaky migration tests and add stable upgrade test (#5514) 2026-01-20 19:25:00 +08:00
reaction_test.go perf: enable parallel execution for all store tests 2026-01-14 22:44:19 +08:00
store.go refactor: migrate HOST roles to ADMIN 2026-01-20 23:38:30 +08:00
user_setting_test.go fix(postgres): handle missing PAT data gracefully and add comprehensive tests 2026-02-09 21:02:09 +08:00
user_test.go refactor: migrate HOST roles to ADMIN 2026-01-20 23:38:30 +08:00

README.md

Store tests

How to test store with MySQL?

  1. Create a database in your MySQL server.
  2. Run the following command with two environment variables set:
DRIVER=mysql DSN=root@/memos_test go test -v ./test/store/...
  • DRIVER should be set to mysql.
  • DSN should be set to the DSN of your MySQL server.