Neues Library-Product — Pendant zur Android-/Web-Fläche (siehe mana/docs/TRANSPARENZ.md). Pure SwiftUI, app-agnostisch, keine Deps. - ManaCredit (Codable/Sendable) + ManaTransparencyData.load() für die vom Generator erzeugte JSON. - ManaTransparencyView(intro:entries:) gruppiert nach Sektion, Einträge mit Lizenz + tippbarem Link. swift build + 2 Tests grün. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
32 lines
1.2 KiB
Swift
32 lines
1.2 KiB
Swift
import XCTest
|
|
@testable import ManaTransparencyUI
|
|
|
|
final class ManaTransparencyUITests: XCTestCase {
|
|
/// Die generierte JSON muss in ``ManaTransparencyData`` dekodieren.
|
|
func testDecodesGeneratedJson() throws {
|
|
let json = """
|
|
{
|
|
"version": "1",
|
|
"intro": "Hallo",
|
|
"entries": [
|
|
{ "category": "upstream", "name": "Neo Store", "license": "GPL-3.0", "url": "https://example.org" },
|
|
{ "category": "library", "name": "Coil", "license": "Apache-2.0" },
|
|
{ "category": "saas-exception", "name": "Stripe", "why": "Spenden" }
|
|
]
|
|
}
|
|
""".data(using: .utf8)!
|
|
let data = try JSONDecoder().decode(ManaTransparencyData.self, from: json)
|
|
XCTAssertEqual(data.intro, "Hallo")
|
|
XCTAssertEqual(data.entries.count, 3)
|
|
XCTAssertEqual(data.entries.first?.category, "upstream")
|
|
XCTAssertEqual(data.entries.first?.id, "upstream/Neo Store")
|
|
XCTAssertEqual(data.entries.last?.why, "Spenden")
|
|
}
|
|
|
|
/// Optionale Felder dürfen fehlen.
|
|
func testOptionalFields() throws {
|
|
let c = ManaCredit(category: "framework", name: "Kotlin")
|
|
XCTAssertNil(c.license)
|
|
XCTAssertEqual(c.id, "framework/Kotlin")
|
|
}
|
|
}
|