mirror of
https://github.com/jcreek/LivingDexTracker.git
synced 2026-09-16 02:22:17 +00:00
fix(backup): pause revoked backups and tell users to reconnect
Google answers a revoked or expired refresh token with invalid_grant. Every save then retried the dead token, and reconnecting never cleared the old error, so it kept showing on Backup Settings afterwards. - The Google Drive and Dropbox OAuth callbacks clear lastError when a provider is reconnected. - An invalid_grant, or a missing refresh token, now pauses the integration with a readable "reconnect" message instead of retrying it on every catch update. Other failures still retry as before. - A banner on every page and an alert on the Pokédex page point to Backup Settings, which shows a "Reconnect needed" badge. The Pokédex page re-checks backup status after each export, because saving a catch record also exports on the server and may pause a provider first. - Offline sync status and the "Save all artwork" link move from every page to a new /offline-guide page, linked from the user menu and the home and welcome pages. Only the offline read-only banner stays sitewide. - Unit tests cover every export path and the backup status store. BDD covers revocation and reconnecting for both providers, and the offline guide. The mock provider can now reject token refreshes, and mock control calls fail loudly if a stale mock is reused. Coverage thresholds are raised to the new baseline.
This commit is contained in:
@@ -40,3 +40,29 @@ Feature: Backup and export
|
||||
When I update collection progress
|
||||
Then the catch remains marked caught
|
||||
And the provider failure is shown in backup settings
|
||||
And "Google Drive" is not flagged for reconnection
|
||||
|
||||
Scenario Outline: Warn when a provider's access is revoked
|
||||
Given "<provider>" is connected with a revoked refresh token
|
||||
When I update collection progress
|
||||
Then the Pokédex page tells me to reconnect "<provider>"
|
||||
And I can dismiss the reconnect alert
|
||||
And backup settings asks me to reconnect "<provider>"
|
||||
And other pages warn that my "<provider>" backup has stopped
|
||||
And later exports do not retry the revoked token
|
||||
|
||||
Examples:
|
||||
| provider |
|
||||
| Google Drive |
|
||||
| Dropbox |
|
||||
|
||||
Scenario Outline: Reconnecting clears a previous backup error
|
||||
Given "<provider>" previously lost access
|
||||
When I connect the mocked "<provider>" provider
|
||||
Then "<provider>" is shown as connected
|
||||
And the previous backup error is cleared
|
||||
|
||||
Examples:
|
||||
| provider |
|
||||
| Google Drive |
|
||||
| Dropbox |
|
||||
|
||||
@@ -26,6 +26,20 @@ Feature: Offline-friendly application
|
||||
When I go offline and reload the current Pokédex
|
||||
Then the offline copy contains "Offline Collection"
|
||||
|
||||
Scenario: Explain offline use on the offline guide
|
||||
Given I am signed in
|
||||
When I open the offline guide
|
||||
Then the offline guide shows my offline copy status
|
||||
|
||||
Scenario: Keep offline sync status off everyday pages
|
||||
Given I am signed in
|
||||
And I have a Living Dex named "Quiet Offline"
|
||||
And my offline copy is synchronized
|
||||
When I open the offline guide from the user menu
|
||||
Then the offline guide shows when my offline copy was updated
|
||||
When I return to my Pokédexes from the user menu
|
||||
Then no offline sync status is shown
|
||||
|
||||
Scenario: Restore network access
|
||||
Given I have opened the built application online
|
||||
When I go offline and then return online
|
||||
|
||||
Reference in New Issue
Block a user