Unit tests und nudging screen

This commit is contained in:
2026-04-20 11:10:53 +02:00
parent e1aebdb916
commit 3858500a45
8 changed files with 1223 additions and 0 deletions
@@ -0,0 +1,84 @@
import Testing
import Foundation
@testable import Mobile_Music_Assistant
// MARK: - MAStoreManager Nudge Logic
@Suite("MAStoreManager Nudge Logic")
struct MAStoreManagerNudgeTests {
// Use isolated UserDefaults to avoid polluting real app state
private func makeStore(firstLaunch: Date, lastKeyDate: Date?) -> MAStoreManager {
let store = MAStoreManager()
let defaults = UserDefaults.standard
defaults.set(firstLaunch, forKey: "ma_firstLaunchDate")
if let last = lastKeyDate {
defaults.set(last, forKey: "ma_lastNudgeOrPurchaseDate")
} else {
defaults.removeObject(forKey: "ma_lastNudgeOrPurchaseDate")
}
return store
}
// MARK: - Initial trigger
@Test("Does not nudge before 3 days have passed")
func noNudgeBeforeThreeDays() {
let store = makeStore(firstLaunch: Date(), lastKeyDate: nil)
#expect(store.shouldShowNudge == false)
}
@Test("Does not nudge at exactly 2 days 23 hours")
func noNudgeJustBeforeThreshold() {
let almostThreeDays = Date().addingTimeInterval(-(3 * 24 * 3600 - 60))
let store = makeStore(firstLaunch: almostThreeDays, lastKeyDate: nil)
#expect(store.shouldShowNudge == false)
}
@Test("Nudges after 3 days with no prior interaction")
func nudgeAfterThreeDays() {
let threeDaysAgo = Date().addingTimeInterval(-(3 * 24 * 3600 + 1))
let store = makeStore(firstLaunch: threeDaysAgo, lastKeyDate: nil)
#expect(store.shouldShowNudge == true)
}
// MARK: - 6-month repeat
@Test("Does not nudge again within 6 months of last interaction")
func noNudgeWithinSixMonths() {
let fourMonthsAgo = Date().addingTimeInterval(-(4 * 30 * 24 * 3600))
let fiveMonthsAgo = Date().addingTimeInterval(-(5 * 30 * 24 * 3600))
let store = makeStore(firstLaunch: fiveMonthsAgo, lastKeyDate: fourMonthsAgo)
#expect(store.shouldShowNudge == false)
}
@Test("Nudges again after 6 months since last interaction")
func nudgeAfterSixMonths() {
let sevenMonthsAgo = Date().addingTimeInterval(-(7 * 30 * 24 * 3600))
let sixMonthsAgo = Date().addingTimeInterval(-(6 * 30 * 24 * 3600 + 60))
let store = makeStore(firstLaunch: sevenMonthsAgo, lastKeyDate: sixMonthsAgo)
#expect(store.shouldShowNudge == true)
}
// MARK: - recordNudgeShown
@Test("recordNudgeShown suppresses future nudge within 6 months")
func recordNudgeShownSuppressesNudge() {
let fourDaysAgo = Date().addingTimeInterval(-(4 * 24 * 3600))
let store = makeStore(firstLaunch: fourDaysAgo, lastKeyDate: nil)
#expect(store.shouldShowNudge == true)
store.recordNudgeShown()
#expect(store.shouldShowNudge == false)
}
// MARK: - firstLaunchDate persistence
@Test("firstLaunchDate is written once and not overwritten")
func firstLaunchDateNotOverwritten() {
let expectedDate = Date().addingTimeInterval(-100)
UserDefaults.standard.set(expectedDate, forKey: "ma_firstLaunchDate")
let store = MAStoreManager()
let delta = abs(store.firstLaunchDate.timeIntervalSince(expectedDate))
#expect(delta < 1.0)
}
}