ManaCore + ManaTokens als Swift-Package für alle nativen mana-e.V.-Apps. Phase α aus mana/docs/MANA_SWIFT.md durch. ManaCore: - AuthClient gegen mana-auth (Login, Refresh, Status-Maschine) - AuthenticatedTransport (URLSession + 401-Retry) - ManaAppConfig-Protocol für App-injizierbare Konfig - KeychainStore mit optionaler Shared-Access-Group - JWT-Parser für lokale Expiry-Prüfung - AuthError, CoreLog (interne OSLog-Logger) ManaTokens: - 12 Vereins-Tokens als dynamic Light/Dark Colors - 5 Brand-Literale (mana-yellow, spectrum-orange, ...) - Spacing, Radius, Typography aus mana/docs/THEMING.md Tests: 12 Unit-Tests grün via swift test. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
27 lines
926 B
Swift
27 lines
926 B
Swift
import Foundation
|
|
import Testing
|
|
@testable import ManaCore
|
|
|
|
@Suite("ManaAppConfig")
|
|
struct ManaAppConfigTests {
|
|
@Test("DefaultManaAppConfig setzt Felder")
|
|
func defaultSetsFields() throws {
|
|
let config = DefaultManaAppConfig(
|
|
authBaseURL: URL(string: "https://auth.mana.how")!,
|
|
keychainService: "ev.mana.memoro",
|
|
keychainAccessGroup: "TEAMID.ev.mana.shared"
|
|
)
|
|
#expect(config.authBaseURL.absoluteString == "https://auth.mana.how")
|
|
#expect(config.keychainService == "ev.mana.memoro")
|
|
#expect(config.keychainAccessGroup == "TEAMID.ev.mana.shared")
|
|
}
|
|
|
|
@Test("AccessGroup ist optional")
|
|
func accessGroupOptional() {
|
|
let config = DefaultManaAppConfig(
|
|
authBaseURL: URL(string: "https://auth.mana.how")!,
|
|
keychainService: "ev.mana.cards"
|
|
)
|
|
#expect(config.keychainAccessGroup == nil)
|
|
}
|
|
}
|