diff --git a/Sources/Recap/Public/ReleaseNotesDisplayPolicyTrigger.swift b/Sources/Recap/Public/RecapDisplayPolicy.Trigger.swift similarity index 90% rename from Sources/Recap/Public/ReleaseNotesDisplayPolicyTrigger.swift rename to Sources/Recap/Public/RecapDisplayPolicy.Trigger.swift index 6b50033..b16db25 100644 --- a/Sources/Recap/Public/ReleaseNotesDisplayPolicyTrigger.swift +++ b/Sources/Recap/Public/RecapDisplayPolicy.Trigger.swift @@ -1,4 +1,4 @@ -public extension ReleaseNotesDisplayPolicy { +public extension RecapDisplayPolicy { /// A fluent, composable description of when to surface release notes /// given the current and previous app versions and the available /// release-note versions. @@ -11,7 +11,7 @@ public extension ReleaseNotesDisplayPolicy { /// 3) A notes requirement (require release notes to be present in the /// selected window, or ignore notes entirely). /// - /// Evaluate with `ReleaseNotesDisplayPolicy.shouldTrigger(using:)`. + /// Evaluate with `RecapDisplayPolicy.shouldTrigger(using:)`. /// /// Examples: /// - Only if current version has notes (default behavior requires notes): @@ -51,9 +51,9 @@ public extension ReleaseNotesDisplayPolicy { } } -// MARK: ReleaseNotesDisplayPolicy.UpdateWindow, ReleaseNotesDisplayPolicy.UpdateNotability, ReleaseNotesDisplayPolicy.NotesRequirement +// MARK: RecapDisplayPolicy.UpdateWindow, RecapDisplayPolicy.UpdateNotability, RecapDisplayPolicy.NotesRequirement -public extension ReleaseNotesDisplayPolicy { +public extension RecapDisplayPolicy { /// Defines the version range in which to evaluate release notes. /// /// - current: Only the current app version must have release notes. @@ -81,3 +81,4 @@ public extension ReleaseNotesDisplayPolicy { case ignore } } + diff --git a/Sources/Recap/Public/ReleaseNotesDisplayPolicy.swift b/Sources/Recap/Public/RecapDisplayPolicy.swift similarity index 97% rename from Sources/Recap/Public/ReleaseNotesDisplayPolicy.swift rename to Sources/Recap/Public/RecapDisplayPolicy.swift index 7896334..b65bc6f 100644 --- a/Sources/Recap/Public/ReleaseNotesDisplayPolicy.swift +++ b/Sources/Recap/Public/RecapDisplayPolicy.swift @@ -2,7 +2,7 @@ import Foundation /// Determines whether to display a "What's New" banner based on /// current/previous app versions and available release-note versions. -public struct ReleaseNotesDisplayPolicy { +public struct RecapDisplayPolicy { private let currentVersion: SemanticVersion private let previousVersion: SemanticVersion? private let releaseVersions: [SemanticVersion] @@ -63,7 +63,7 @@ public struct ReleaseNotesDisplayPolicy { // MARK: Private -private extension ReleaseNotesDisplayPolicy { +private extension RecapDisplayPolicy { func hasReleaseNotes(from previous: SemanticVersion?, to current: SemanticVersion) -> Bool { let versions = self.releaseVersions @@ -76,3 +76,4 @@ private extension ReleaseNotesDisplayPolicy { } } } + diff --git a/Tests/ReleaseNotesDisplayPolicy.Trigger.Tests.swift b/Tests/RecapDisplayPolicy.Trigger.Tests.swift similarity index 76% rename from Tests/ReleaseNotesDisplayPolicy.Trigger.Tests.swift rename to Tests/RecapDisplayPolicy.Trigger.Tests.swift index 41c612b..23923e9 100644 --- a/Tests/ReleaseNotesDisplayPolicy.Trigger.Tests.swift +++ b/Tests/RecapDisplayPolicy.Trigger.Tests.swift @@ -1,16 +1,16 @@ import Recap import Testing -@Suite("ReleaseNotesDisplayPolicy.Trigger") -struct ReleaseNotesDisplayPolicyTriggerTests { +@Suite("RecapDisplayPolicy.Trigger") +struct RecapDisplayPolicyTriggerTests { @Test func testCurrentVersionNotesTriggers() { - let policy = ReleaseNotesDisplayPolicy( + let policy = RecapDisplayPolicy( currentVersion: SemanticVersion(version: "5.0"), previousVersion: SemanticVersion(version: "4.9"), releases: [SemanticVersion(version: "5.0")] ) - let trigger = ReleaseNotesDisplayPolicy.Trigger + let trigger = RecapDisplayPolicy.Trigger .updateWindow(.current) #expect(policy.shouldTrigger(using: trigger)) @@ -18,13 +18,13 @@ struct ReleaseNotesDisplayPolicyTriggerTests { @Test func testCurrentVersionWithoutNotesDoesNotTrigger() { - let policy = ReleaseNotesDisplayPolicy( + let policy = RecapDisplayPolicy( currentVersion: "5.1", previousVersion: "5.0", releaseVersions: ["5.0"] ) - let trigger = ReleaseNotesDisplayPolicy.Trigger + let trigger = RecapDisplayPolicy.Trigger .updateWindow(.current) #expect(!policy.shouldTrigger(using: trigger)) @@ -32,13 +32,13 @@ struct ReleaseNotesDisplayPolicyTriggerTests { @Test func testSincePreviousWithSkippedMinorNotesExistTriggers() { - let policy = ReleaseNotesDisplayPolicy( + let policy = RecapDisplayPolicy( currentVersion: SemanticVersion(version: "6.1"), previousVersion: SemanticVersion(version: "5.9"), releases: [SemanticVersion(version: "6.0")] ) - let trigger = ReleaseNotesDisplayPolicy.Trigger + let trigger = RecapDisplayPolicy.Trigger .updateWindow(.sincePrevious) #expect(policy.shouldTrigger(using: trigger)) @@ -46,13 +46,13 @@ struct ReleaseNotesDisplayPolicyTriggerTests { @Test func testSincePreviousAlreadySeenDoesNotTrigger() { - let policy = ReleaseNotesDisplayPolicy( + let policy = RecapDisplayPolicy( currentVersion: "6.1", previousVersion: "6.0", releaseVersions: ["6.0"] ) - let trigger = ReleaseNotesDisplayPolicy.Trigger + let trigger = RecapDisplayPolicy.Trigger .updateWindow(.sincePrevious) #expect(!policy.shouldTrigger(using: trigger)) @@ -60,13 +60,13 @@ struct ReleaseNotesDisplayPolicyTriggerTests { @Test func testCurrentNotableOnlyWithNotesTriggers() { - let policy = ReleaseNotesDisplayPolicy( + let policy = RecapDisplayPolicy( currentVersion: SemanticVersion(version: "6.0"), previousVersion: SemanticVersion(version: "5.9"), releases: [SemanticVersion(version: "6.0")] ) - let trigger = ReleaseNotesDisplayPolicy.Trigger + let trigger = RecapDisplayPolicy.Trigger .updateWindow(.current) .notability(.notableOnly) @@ -75,13 +75,13 @@ struct ReleaseNotesDisplayPolicyTriggerTests { @Test func testSincePreviousNotableOnlyWithNotesTriggers() { - let policy = ReleaseNotesDisplayPolicy( + let policy = RecapDisplayPolicy( currentVersion: "7.1", previousVersion: "6.9", releaseVersions: ["7.0"] ) - let trigger = ReleaseNotesDisplayPolicy.Trigger + let trigger = RecapDisplayPolicy.Trigger .updateWindow(.sincePrevious) .notability(.notableOnly) @@ -90,13 +90,13 @@ struct ReleaseNotesDisplayPolicyTriggerTests { @Test func testPatchOnlyNotableOnlyDoesNotTrigger() { - let policy = ReleaseNotesDisplayPolicy( + let policy = RecapDisplayPolicy( currentVersion: "5.0.1", previousVersion: "5.0", releaseVersions: ["5.0.1"] ) - let trigger = ReleaseNotesDisplayPolicy.Trigger + let trigger = RecapDisplayPolicy.Trigger .updateWindow(.current) .notability(.notableOnly) @@ -105,13 +105,13 @@ struct ReleaseNotesDisplayPolicyTriggerTests { @Test func testEmptyReleasesNeverTrigger() { - let policy = ReleaseNotesDisplayPolicy( + let policy = RecapDisplayPolicy( currentVersion: "5.0", previousVersion: "4.9", releaseVersions: [] ) - let trigger = ReleaseNotesDisplayPolicy.Trigger + let trigger = RecapDisplayPolicy.Trigger .updateWindow(.sincePrevious) #expect(!policy.shouldTrigger(using: trigger)) @@ -119,13 +119,13 @@ struct ReleaseNotesDisplayPolicyTriggerTests { @Test func testIgnoringNotesRequirementAllowsTriggerOnNotableWithoutNotes() { - let policy = ReleaseNotesDisplayPolicy( + let policy = RecapDisplayPolicy( currentVersion: SemanticVersion(version: "6.0"), previousVersion: SemanticVersion(version: "5.9"), releases: [] ) - let trigger = ReleaseNotesDisplayPolicy.Trigger + let trigger = RecapDisplayPolicy.Trigger .updateWindow(.current) .notability(.notableOnly) .ignoringReleaseNotesRequirement() @@ -138,12 +138,12 @@ struct ReleaseNotesDisplayPolicyTriggerTests { @Test func testSincePreviousWithManyReleasesTriggersWhenIntermediateHasNotes() { // User jumped from 4.0 to 4.1.1; 4.1 has notes in the list. - let policy = ReleaseNotesDisplayPolicy( + let policy = RecapDisplayPolicy( currentVersion: "4.1.1", previousVersion: "4.0", releaseVersions: ["5.0", "4.1", "4.0", "3.0", "2.0", "1.0"] ) - let trigger = ReleaseNotesDisplayPolicy.Trigger + let trigger = RecapDisplayPolicy.Trigger .updateWindow(.sincePrevious) .notability(.notableOnly) #expect(policy.shouldTrigger(using: trigger)) @@ -152,12 +152,12 @@ struct ReleaseNotesDisplayPolicyTriggerTests { @Test func testSincePreviousAlreadySeenMinorDoesNotTriggerWithManyReleases() { // User already launched 4.1; now on 4.1.2 (patch). No notable bump; should not trigger. - let policy = ReleaseNotesDisplayPolicy( + let policy = RecapDisplayPolicy( currentVersion: "4.1.2", previousVersion: "4.1", releaseVersions: ["5.0", "4.1", "4.0", "3.0", "2.0", "1.0"] ) - let trigger = ReleaseNotesDisplayPolicy.Trigger + let trigger = RecapDisplayPolicy.Trigger .updateWindow(.sincePrevious) .notability(.notableOnly) #expect(!policy.shouldTrigger(using: trigger)) @@ -166,12 +166,12 @@ struct ReleaseNotesDisplayPolicyTriggerTests { @Test func testLargeSkipAcrossManyReleasesTriggers() { // User jumped from 3.0 to 5.0.1; multiple prior versions have notes. - let policy = ReleaseNotesDisplayPolicy( + let policy = RecapDisplayPolicy( currentVersion: "5.0.1", previousVersion: "3.0", releaseVersions: ["5.0", "4.1", "4.0", "3.0", "2.0", "1.0"] ) - let trigger = ReleaseNotesDisplayPolicy.Trigger + let trigger = RecapDisplayPolicy.Trigger .updateWindow(.sincePrevious) .notability(.notableOnly) #expect(policy.shouldTrigger(using: trigger)) @@ -180,17 +180,17 @@ struct ReleaseNotesDisplayPolicyTriggerTests { @Test func testCurrentWindowRequiresExactCurrentEvenWithManyReleases() { // Current is 5.0.1; list has 5.0 but not 5.0.1 -> .current should not trigger. - let policy = ReleaseNotesDisplayPolicy( + let policy = RecapDisplayPolicy( currentVersion: "5.0.1", previousVersion: "5.0", releaseVersions: ["5.0", "4.1", "4.0", "3.0", "2.0", "1.0"] ) - let trigger = ReleaseNotesDisplayPolicy.Trigger + let trigger = RecapDisplayPolicy.Trigger .updateWindow(.current) #expect(!policy.shouldTrigger(using: trigger)) // Now include exact current in releases -> should trigger. - let policyWithExact = ReleaseNotesDisplayPolicy( + let policyWithExact = RecapDisplayPolicy( currentVersion: "5.0.1", previousVersion: "5.0", releaseVersions: ["5.0.1", "5.0", "4.1", "4.0", "3.0", "2.0", "1.0"]