test(data): client-side sync round-trip integration tests
Server-side endpoint tests already exist in solitaire_server. This adds the client-side counterpart: five integration tests in solitaire_data/tests/sync_round_trip.rs that drive SolitaireServerClient against an in-process axum::serve harness with an in-memory SQLite database, covering: - register_login_push_pull_round_trip — happy path: register, push non-default stats, pull from a fresh client, assert the merged payload reflects the pushed values - pull_after_concurrent_pushes_merges_correctly — two clients on one user push different games_played values, verify the server-side merge returns the max - unauthenticated_pull_returns_authentication_error — pull without tokens surfaces SyncError::Auth as expected - jwt_refresh_on_401_succeeds — replace the access token with one whose exp is two hours stale (same signing key), pull triggers 401 → /api/auth/refresh → retry, asserts the call ultimately succeeds - pull_after_account_deletion_returns_default_or_error — register, push, delete via the trait, confirm the next push surfaces a result rather than panicking keyring_core's mock store is installed once per process via Once; each test uses a unique username so the shared store doesn't cross-contaminate. Production code in sync_client.rs needed no changes — the Box<dyn SyncProvider> design plus the mock keyring were sufficient to drive every flow from outside. solitaire_server is added as a path dev-dependency along with the direct crates the harness needs (axum, sqlx, jsonwebtoken, uuid, chrono, solitaire_sync); no runtime deps changed. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Generated
+5
@@ -7533,16 +7533,21 @@ name = "solitaire_data"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"axum",
|
||||
"chrono",
|
||||
"dirs",
|
||||
"jsonwebtoken",
|
||||
"keyring-core",
|
||||
"reqwest",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"solitaire_core",
|
||||
"solitaire_server",
|
||||
"solitaire_sync",
|
||||
"sqlx",
|
||||
"thiserror 2.0.18",
|
||||
"tokio",
|
||||
"uuid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
||||
Reference in New Issue
Block a user