import XCTest @testable import PortfolioJournal final class ReviewPromptServiceTests: XCTestCase { private var defaults: UserDefaults! private var suiteName: String! override func setUp() { super.setUp() suiteName = UUID().uuidString defaults = UserDefaults(suiteName: suiteName) } override func tearDown() { if let suiteName { defaults.removePersistentDomain(forName: suiteName) } super.tearDown() } func testTriggersAfterMinimumCheckIns() { var didRequest = false let service = ReviewPromptService( userDefaults: defaults, dateProvider: { Date(timeIntervalSince1970: 1_000) }, reviewRequestHandler: { didRequest = true } ) service.recordMonthlyCheckInCompleted() service.recordMonthlyCheckInCompleted() XCTAssertFalse(didRequest) service.recordMonthlyCheckInCompleted() XCTAssertTrue(didRequest) } func testDoesNotTriggerIfPromptedRecently() { var didRequest = false let now = Date(timeIntervalSince1970: 10_000) defaults.set(now, forKey: "reviewPromptLastDate") let service = ReviewPromptService( userDefaults: defaults, dateProvider: { now.addingTimeInterval(60 * 60 * 24 * 10) }, reviewRequestHandler: { didRequest = true } ) service.recordMonthlyCheckInCompleted() service.recordMonthlyCheckInCompleted() service.recordMonthlyCheckInCompleted() XCTAssertFalse(didRequest) } }