Add onboarding UI tests and improve app data management

- Add Suite0_OnboardingTests with fresh install and login test flows
- Add accessibility identifiers to onboarding views for UI testing
- Remove deprecated DataCache in favor of unified DataManager
- Update API layer to support public upgrade-triggers endpoint
- Improve onboarding first task view with better date handling
- Update various views with accessibility identifiers for testing
- Fix subscription feature comparison view layout
- Update document detail view improvements

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Trey t
2025-12-04 15:55:34 -06:00
parent 43f5b9514f
commit fff1032c29
43 changed files with 1055 additions and 923 deletions

View File

@@ -6,10 +6,11 @@ struct ResidenceFormView: View {
@Binding var isPresented: Bool
var onSuccess: (() -> Void)?
@StateObject private var viewModel = ResidenceViewModel()
@ObservedObject private var dataManager = DataManagerObservable.shared
@FocusState private var focusedField: Field?
// Lookups from DataCache
@State private var residenceTypes: [ResidenceType] = []
// Lookups from DataManagerObservable
private var residenceTypes: [ResidenceType] { dataManager.residenceTypes }
// Form fields
@State private var name: String = ""
@@ -196,21 +197,10 @@ struct ResidenceFormView: View {
private func loadResidenceTypes() {
Task {
// Get residence types from DataCache via APILayer
let result = try? await APILayer.shared.getResidenceTypes(forceRefresh: false)
if let success = result as? ApiResultSuccess<NSArray>,
let types = success.data as? [ResidenceType] {
await MainActor.run {
self.residenceTypes = types
}
} else {
// Fallback to DataCache directly
await MainActor.run {
if let cached = DataCache.shared.residenceTypes.value as? [ResidenceType] {
self.residenceTypes = cached
}
}
}
// Trigger residence types refresh if needed
// Residence types are now loaded from DataManagerObservable
// Just trigger a refresh if needed
_ = try? await APILayer.shared.getResidenceTypes(forceRefresh: false)
}
}