Add tests for 1.1.0 features

This commit is contained in:
alexandrev-tibco
2026-02-01 14:40:10 +01:00
parent d55b999bef
commit 2437dd647f
11 changed files with 297 additions and 29 deletions
@@ -8,38 +8,59 @@ final class ReviewPromptService {
private let checkInCountKey = "reviewPromptCheckinCount"
private let minCheckInsBetweenPrompts = 3
private let minDaysBetweenPrompts = 90
private let userDefaults: UserDefaults
private let dateProvider: () -> Date
private let reviewRequestHandler: () -> Void
private init() {}
private init() {
userDefaults = .standard
dateProvider = Date.init
reviewRequestHandler = ReviewPromptService.defaultReviewRequestHandler
}
init(
userDefaults: UserDefaults,
dateProvider: @escaping () -> Date,
reviewRequestHandler: @escaping () -> Void
) {
self.userDefaults = userDefaults
self.dateProvider = dateProvider
self.reviewRequestHandler = reviewRequestHandler
}
func recordMonthlyCheckInCompleted() {
let currentCount = UserDefaults.standard.integer(forKey: checkInCountKey)
UserDefaults.standard.set(currentCount + 1, forKey: checkInCountKey)
let currentCount = userDefaults.integer(forKey: checkInCountKey)
userDefaults.set(currentCount + 1, forKey: checkInCountKey)
requestReviewIfEligible()
}
private func requestReviewIfEligible() {
let now = Date()
if let lastPrompt = UserDefaults.standard.object(forKey: lastPromptKey) as? Date {
let now = dateProvider()
if let lastPrompt = userDefaults.object(forKey: lastPromptKey) as? Date {
let daysSince = now.timeIntervalSince(lastPrompt) / 86_400
if daysSince < Double(minDaysBetweenPrompts) {
return
}
}
let count = UserDefaults.standard.integer(forKey: checkInCountKey)
let count = userDefaults.integer(forKey: checkInCountKey)
guard count >= minCheckInsBetweenPrompts else { return }
requestReview()
}
private func requestReview() {
reviewRequestHandler()
userDefaults.set(dateProvider(), forKey: lastPromptKey)
userDefaults.set(0, forKey: checkInCountKey)
}
private static func defaultReviewRequestHandler() {
guard let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene else { return }
if #available(iOS 18.0, *) {
AppStore.requestReview(in: scene)
} else {
SKStoreReviewController.requestReview(in: scene)
}
UserDefaults.standard.set(Date(), forKey: lastPromptKey)
UserDefaults.standard.set(0, forKey: checkInCountKey)
}
}