Extracted the in-app notifications from the Sample app target into its own Notifying package target.
This commit is contained in:
@@ -18,6 +18,13 @@
|
||||
"identifier" : "RecordingTests",
|
||||
"name" : "RecordingTests"
|
||||
}
|
||||
},
|
||||
{
|
||||
"target" : {
|
||||
"containerPath" : "container:",
|
||||
"identifier" : "NotifyingTests",
|
||||
"name" : "NotifyingTests"
|
||||
}
|
||||
}
|
||||
],
|
||||
"version" : 1
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user