171023a411
- ReviewPromptServiceTests: la regla vigente pide 2 check-ins, no 3. - MonthlyCheckInViewTests: el día 1 cae en el periodo de gracia (20 días); usar el día 25 para etiquetar febrero. - SettingsViewModelTests: isPremium llega por receive(on: main); dar una vuelta de run loop antes de actuar. - DuoLayoutUITests: recorre tabs, split views e inspector con capturas (ejecutar en iPhone 17 Pro y iPad mini). ScreenshotMode oculta los tips de TipKit; identificador de accesibilidad en el botón de Quick Update. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F1u4K16xy7eQVtgsYNZ9Vn
47 lines
1.5 KiB
Swift
47 lines
1.5 KiB
Swift
import XCTest
|
|
@testable import PortfolioJournal
|
|
|
|
@MainActor
|
|
final class SettingsViewModelTests: XCTestCase {
|
|
override func tearDown() {
|
|
UserDefaults.standard.removeObject(forKey: "backupsEnabled")
|
|
UserDefaults.standard.removeObject(forKey: "backupRetentionCount")
|
|
UserDefaults.standard.removeObject(forKey: "debugPremiumOverride")
|
|
super.tearDown()
|
|
}
|
|
|
|
func testSetBackupsEnabledNonPremiumShowsPaywall() {
|
|
let iap = IAPService()
|
|
#if DEBUG
|
|
iap.setPremiumForTesting(false)
|
|
#endif
|
|
let viewModel = SettingsViewModel(iapService: iap)
|
|
|
|
viewModel.setBackupsEnabled(true)
|
|
|
|
XCTAssertFalse(viewModel.backupsEnabled)
|
|
XCTAssertTrue(viewModel.showingPaywall)
|
|
}
|
|
|
|
func testSetBackupsEnabledPremiumPersistsFlag() {
|
|
#if DEBUG
|
|
UserDefaults.standard.set(true, forKey: "debugPremiumOverride")
|
|
#endif
|
|
let iap = IAPService()
|
|
#if DEBUG
|
|
iap.setDebugPremiumOverride(true)
|
|
#endif
|
|
let viewModel = SettingsViewModel(iapService: iap)
|
|
// isPremium is mirrored via `receive(on: DispatchQueue.main)`; give the
|
|
// publisher a run-loop turn before acting on it.
|
|
RunLoop.main.run(until: Date().addingTimeInterval(0.2))
|
|
XCTAssertTrue(viewModel.isPremium)
|
|
|
|
viewModel.setBackupsEnabled(true)
|
|
|
|
XCTAssertTrue(viewModel.backupsEnabled)
|
|
XCTAssertFalse(viewModel.showingPaywall)
|
|
XCTAssertTrue(UserDefaults.standard.bool(forKey: "backupsEnabled"))
|
|
}
|
|
}
|