Fix TokenStorage stale cache bug and add user-friendly error messages

- Fix TokenStorage.getToken() returning stale cached token after login/logout
- Add comprehensive ErrorMessageParser with 80+ error code mappings
- Add Suite9 and Suite10 UI test files for E2E integration testing
- Fix accessibility identifiers in RegisterView and ResidenceFormView
- Fix UITestHelpers logout to target alert button specifically
- Update various UI components with proper accessibility identifiers

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Trey t
2025-12-17 11:48:35 -06:00
parent b05e52521f
commit bcd8b36a9b
24 changed files with 1653 additions and 232 deletions
+39 -42
View File
@@ -123,16 +123,10 @@
"$%@" : {
"comment" : "A label displaying the cost of a task. The argument is the cost of the task.",
"isCommentAutoGenerated" : true
},
"0" : {
},
"000000" : {
"comment" : "A placeholder text for a 6-digit code field.",
"isCommentAutoGenerated" : true
},
"0.0" : {
},
"0.00" : {
@@ -142,6 +136,9 @@
},
"7-day free trial, then %@" : {
},
"ABC123" : {
},
"Actions" : {
"comment" : "A label for the actions menu in the task card.",
@@ -164,10 +161,6 @@
"comment" : "A description below the image in the \"No properties yet\" view, encouraging the user to add their first property.",
"isCommentAutoGenerated" : true
},
"Add your first property to start\nmanaging your home with ease" : {
"comment" : "A description below an animated house illustration, encouraging users to add their first property.",
"isCommentAutoGenerated" : true
},
"Already have an account?" : {
},
@@ -327,9 +320,6 @@
},
"Are you sure you want to remove %@ from this residence?" : {
},
"At least 8 characters" : {
},
"auth_account_info" : {
"extractionState" : "manual",
@@ -395,6 +385,13 @@
}
}
}
},
"auth_already_have_account" : {
"comment" : "Text on the \"Already have an account?\" link in the auth register screen. Navigates to the auth login screen.",
"isCommentAutoGenerated" : true
},
"auth_creating_account" : {
},
"auth_dont_have_account" : {
"extractionState" : "manual",
@@ -3061,6 +3058,10 @@
}
}
},
"auth_sign_in" : {
"comment" : "Button text that allows a user to sign in.",
"isCommentAutoGenerated" : true
},
"auth_sign_in_subtitle" : {
"extractionState" : "manual",
"localizations" : {
@@ -5243,13 +5244,7 @@
"comment" : "The title for the view that shows a user's photo submissions.",
"isCommentAutoGenerated" : true
},
"Confirm Password" : {
},
"Contains letters" : {
},
"Contains numbers" : {
"CONFIRM PASSWORD" : {
},
"Continue with Free" : {
@@ -5257,10 +5252,6 @@
},
"Contractor Imported" : {
},
"Contractors" : {
"comment" : "A tab label for the contractors section.",
"isCommentAutoGenerated" : true
},
"contractors_add_button" : {
"extractionState" : "manual",
@@ -8926,8 +8917,8 @@
"comment" : "A question displayed below a button in the \"Verify Code\" view, instructing the user to request a new code if they haven't received one.",
"isCommentAutoGenerated" : true
},
"Documents" : {
"comment" : "A label displayed above the list of documents and warranties.",
"Docs" : {
"comment" : "A label displayed above the documents tab in the main tab view.",
"isCommentAutoGenerated" : true
},
"documents_active" : {
@@ -16947,9 +16938,8 @@
"comment" : "A label for an \"Edit Task\" button.",
"isCommentAutoGenerated" : true
},
"Email" : {
"comment" : "A label displayed above the email text field in the \"Forgot Password?\" view.",
"isCommentAutoGenerated" : true
"EMAIL" : {
},
"Email Address" : {
"comment" : "A label for the user to input their email address.",
@@ -17400,6 +17390,9 @@
"Joining residence..." : {
"comment" : "A message displayed while waiting for the app to join a residence.",
"isCommentAutoGenerated" : true
},
"Joining..." : {
},
"Let's get you started with some tasks.\nThe more you pick, the more we'll help you remember!" : {
@@ -17428,7 +17421,7 @@
"Need inspiration?" : {
},
"New Password" : {
"NEW PASSWORD" : {
},
"No active code" : {
@@ -17480,10 +17473,7 @@
"comment" : "A label indicating that a user is an owner of a residence.",
"isCommentAutoGenerated" : true
},
"Password Requirements" : {
},
"Passwords match" : {
"PASSWORD REQUIREMENTS" : {
},
"Photo" : {
@@ -21545,6 +21535,10 @@
"comment" : "A fallback text that appears when the associated residence ID is not found in the user's residences. The placeholder number is replaced with the actual residence ID.",
"isCommentAutoGenerated" : true
},
"Pros" : {
"comment" : "A tab label for the \"Pros\" section in the main tab view.",
"isCommentAutoGenerated" : true
},
"Quick Start" : {
},
@@ -21569,7 +21563,7 @@
},
"Residences" : {
"comment" : "A tab label for the \"Residences\" section in the main tab view.",
"comment" : "A label for the \"Residences\" tab in the main tab view.",
"isCommentAutoGenerated" : true
},
"residences_add_contractors_prompt" : {
@@ -24744,6 +24738,9 @@
"Send Reset Code" : {
"comment" : "A button label that says \"Send Reset Code\".",
"isCommentAutoGenerated" : true
},
"Sending..." : {
},
"Set Custom Time" : {
"comment" : "A button that allows a user to set a custom notification time.",
@@ -24889,9 +24886,6 @@
"Share this 6-character code. They can enter it in the app to join." : {
"comment" : "A description of how to share the invitation code with others.",
"isCommentAutoGenerated" : true
},
"Shared Users (%lld)" : {
},
"Signing in with Apple..." : {
@@ -24928,6 +24922,10 @@
},
"Take your home management\nto the next level" : {
},
"Tap the + icon in the top right\nto add your first property" : {
"comment" : "A description of an action a user can take to add a property.",
"isCommentAutoGenerated" : true
},
"Task Templates" : {
"comment" : "The title of the view that lists all predefined task templates.",
@@ -29995,16 +29993,15 @@
"comment" : "A description of the benefit of upgrading to the Pro plan.",
"isCommentAutoGenerated" : true
},
"Users with access to this residence. Use the share button to invite others." : {
"Use the share button to invite others" : {
},
"Using system default time" : {
"comment" : "A description of how a user can set a custom notification time.",
"isCommentAutoGenerated" : true
},
"Verification Code" : {
"comment" : "A label displayed above the text field for entering a verification code.",
"isCommentAutoGenerated" : true
"VERIFICATION CODE" : {
},
"Verify" : {
"comment" : "A button label that says \"Verify\".",