mana-swift-ui/Tests/ManaOnboardingUITests/ManaOnboardingPageTests.swift
Till JS efe424aa37 ManaOnboardingUI: Apple-„Neue Funktionen"-Sheet-Optik, keine Permission-Abfrage
Redesign nach Feedback. Statt Schritt-Karussell jetzt Apples
What's-New-Sheet-Stil: pro Seite Titel + Zeilen-Liste (Icon+Titel+Text)
+ EIN Button unten, Indikator oben (nicht beim Button).

- ManaOnboardingStep → ManaOnboardingPage (Titel/Vorspann/Row-Liste/
  Fußnote). Voll Sendable, keine Action-Closures mehr.
- Doktrin: fragt NIE Berechtigungen ab — die bleiben just-in-time.
  Onboarding informiert nur (kein Extrahieren auf Vorrat).
- Präsentation als .sheet (.presentationDetents([.large]) + Griff) statt
  fullScreenCover → nicht mehr eingezwängt; per Wischen = gesehen.
- Cross-Fade statt Swipe, reduced-motion-aware. 7 Tests (Seiten-Modell).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 19:19:07 +02:00

56 lines
1.8 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)
}
}