ManaPill(_:image:variant:size:action:) und Row(katalogSymbol:) für Apps mit eigenem Zeichensatz (seepuls). Rein additiv: bestehende Aufrufe mit systemImage/symbol laufen unverändert, kein Init wird mehrdeutig. Sitzung: 79964fc4 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0111BCGu1WXLkJzY5CGKXdC6
68 lines
2.3 KiB
Swift
68 lines
2.3 KiB
Swift
import XCTest
|
|
@testable import ManaOnboardingUI
|
|
|
|
final class ManaOnboardingPageTests: XCTestCase {
|
|
func testDefaultIdFallsBackToTitle() {
|
|
let page = ManaOnboardingPage(title: "Werte", rows: [])
|
|
XCTAssertEqual(page.id, "Werte")
|
|
}
|
|
|
|
func testExplicitIdWins() {
|
|
let page = ManaOnboardingPage(id: "p1", title: "Werte", rows: [])
|
|
XCTAssertEqual(page.id, "p1")
|
|
}
|
|
|
|
func testIntroAndFootnoteDefaultNil() {
|
|
let page = ManaOnboardingPage(title: "Werte", rows: [])
|
|
XCTAssertNil(page.intro)
|
|
XCTAssertNil(page.footnote)
|
|
}
|
|
|
|
func testRowsArePreserved() {
|
|
let page = ManaOnboardingPage(
|
|
title: "Features",
|
|
rows: [
|
|
.init(symbol: "calendar", title: "Frequenz", text: "egal wann"),
|
|
.init(symbol: "bell", title: "Erinnerung", text: "lokal"),
|
|
]
|
|
)
|
|
XCTAssertEqual(page.rows.count, 2)
|
|
XCTAssertEqual(page.rows.first?.symbol, "calendar")
|
|
XCTAssertEqual(page.rows.last?.title, "Erinnerung")
|
|
}
|
|
|
|
func testRowDefaultIdFallsBackToTitle() {
|
|
let row = ManaOnboardingPage.Row(symbol: "star", title: "Mein Titel", text: "x")
|
|
XCTAssertEqual(row.id, "Mein Titel")
|
|
}
|
|
|
|
func testFootnoteAndIntroStored() {
|
|
let page = ManaOnboardingPage(
|
|
title: "Features",
|
|
intro: "Vorspann",
|
|
rows: [.init(symbol: "star", title: "a", text: "b")],
|
|
footnote: "Konto optional"
|
|
)
|
|
XCTAssertEqual(page.intro, "Vorspann")
|
|
XCTAssertEqual(page.footnote, "Konto optional")
|
|
}
|
|
|
|
func testPageIsSendable() {
|
|
// Compile-time-Beleg: ohne Action-Closures ist die API voll Sendable.
|
|
func requireSendable<T: Sendable>(_: T.Type) {}
|
|
requireSendable(ManaOnboardingPage.self)
|
|
requireSendable(ManaOnboardingPage.Row.self)
|
|
}
|
|
|
|
func testRowQuelleIstSystemOhneAngabe() {
|
|
let row = ManaOnboardingPage.Row(symbol: "calendar", title: "Frequenz", text: "egal wann")
|
|
XCTAssertEqual(row.quelle, .system)
|
|
}
|
|
|
|
func testRowAusDemKatalog() {
|
|
let row = ManaOnboardingPage.Row(katalogSymbol: "zeichen.bodensee", title: "Region", text: "eine")
|
|
XCTAssertEqual(row.quelle, .katalog)
|
|
XCTAssertEqual(row.symbol, "zeichen.bodensee")
|
|
XCTAssertEqual(row.id, "Region")
|
|
}
|
|
}
|