Extracted the in-app notifications from the Sample app target into its own Notifying package target.

This commit is contained in:
2026-07-05 13:33:07 +02:00
parent 6bcb88c944
commit 59b0237638
8 changed files with 278 additions and 106 deletions
@@ -0,0 +1,110 @@
import Foundation
import Testing
@testable import Notifying
@Suite("Notifier view model")
struct NotifierTests {
// MARK: Posting
@MainActor
@Suite("Posting")
struct Posting {
@Test func `posting appends a notification with the given values`() {
let notifier = Notifier()
notifier.post(
.info,
message: "This is a notification.",
symbol: "info.circle"
)
#expect(notifier.notifications.count == 1)
#expect(notifier.notifications.first?.kind == .info)
#expect(notifier.notifications.first?.message == "This is a notification.")
#expect(notifier.notifications.first?.symbol == "info.circle")
}
@Test func `posted notifications stack in post order`() {
let notifier = Notifier()
notifier.post(
.info,
message: "First",
symbol: "1.circle"
)
notifier.post(
.warning,
message: "Second",
symbol: "2.circle"
)
notifier.post(
.error,
message: "Third",
symbol: "3.circle"
)
#expect(notifier.notifications.map(\.message) == ["First", "Second", "Third"])
}
}
// MARK: Dismissal
@MainActor
@Suite("Dismissal")
struct Dismissal {
@Test func `a notification dismisses itself after the delay`() async throws {
let notifier = Notifier(
delayDismissal: .seconds(0.2)
)
notifier.post(
.info,
message: "This is a notification.",
symbol: "info.circle"
)
try await Task.sleep(for: .seconds(0.1))
#expect(notifier.notifications.count == 1)
try await Task.sleep(for: .seconds(0.2))
#expect(notifier.notifications.isEmpty)
}
@Test func `notifications dismiss independently`() async throws {
let notifier = Notifier(
delayDismissal: .seconds(0.3)
)
notifier.post(
.info,
message: "First",
symbol: "1.circle"
)
try await Task.sleep(for: .seconds(0.2))
notifier.post(
.warning,
message: "Second",
symbol: "2.circle"
)
try await Task.sleep(for: .seconds(0.2))
#expect(notifier.notifications.map(\.message) == ["Second"])
try await Task.sleep(for: .seconds(0.2))
#expect(notifier.notifications.isEmpty)
}
}
}