mana-swift-core/Tests/ManaCoreTests/ManaAppLogTests.swift
Till JS 4ce22ac74e feat(core): ManaAppLog + appGroup/logSubsystem in ManaAppConfig (v1.7.0)
Audit 2026-05-17 V4. Ersetzt das hand-getippte Log.swift-Boilerplate
in jeder App durch einen Config-getriebenen Wrapper.

Neu:
- `ManaAppLog` — Factory fuer OSLog-Logger gegen ein ManaAppConfig.
  Standard-Kategorien app/auth/api/db/web, plus `category("…")` fuer
  app-spezifische Kategorien.
- `ManaAppConfig.appGroup: String?` (default nil) — Single-Source fuer
  den App-Group-String, der heute in jeder App 3-4× hardcoded steht.
- `ManaAppConfig.logSubsystem: String` (default = keychainService) —
  Subsystem fuer ManaAppLog.

Nichts breaking — beide neuen Felder haben Default-Implementations,
DefaultManaAppConfig.init hat zwei zusaetzliche optionale Parameter.

Tests: 4 neue ManaAppConfig-Tests + 5 neue ManaAppLog-Tests.
85/85 gruen (vorher 76/76).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 22:23:03 +02:00

53 lines
1.7 KiB
Swift

import Foundation
import Testing
@testable import ManaCore
@Suite("ManaAppLog")
struct ManaAppLogTests {
@Test("Init aus Config nimmt logSubsystem")
func initFromConfig() {
let config = DefaultManaAppConfig(
authBaseURL: URL(string: "https://auth.mana.how")!,
keychainService: "ev.mana.cards"
)
let log = ManaAppLog(config)
#expect(log.subsystem == "ev.mana.cards")
}
@Test("Explizit gesetztes logSubsystem überschreibt keychainService")
func initFromConfigWithCustomSubsystem() {
let config = DefaultManaAppConfig(
authBaseURL: URL(string: "https://auth.mana.how")!,
keychainService: "ev.mana.cards",
logSubsystem: "ev.mana.cards.test"
)
let log = ManaAppLog(config)
#expect(log.subsystem == "ev.mana.cards.test")
}
@Test("Direkter String-Constructor")
func initFromString() {
let log = ManaAppLog(subsystem: "ev.mana.test")
#expect(log.subsystem == "ev.mana.test")
}
@Test("Standard-Kategorien sind erreichbar")
func standardCategoriesExist() {
let log = ManaAppLog(subsystem: "ev.mana.test")
// Logger ist nicht Equatable, aber wir können Existenz prüfen
// indem wir den Wert binden Compile genügt.
let _ = log.app
let _ = log.auth
let _ = log.api
let _ = log.db
let _ = log.web
}
@Test("category() liefert beliebige Custom-Kategorie")
func customCategory() {
let log = ManaAppLog(subsystem: "ev.mana.test")
let _ = log.category("study")
let _ = log.category("tracking")
let _ = log.category("llm")
}
}