rainbow-dragon/Tests/ForgeOffloadTests/ReportTests.swift

40 lines
1.6 KiB
Swift

import XCTest
import Foundation
@testable import ForgeOffload
final class ReportTests: XCTestCase {
func makeReport() -> OffloadReport {
OffloadReport(
source: "/Volumes/CARD_A001",
destinations: ["/RAID/A001", "/SHUTTLE/A001"],
files: [
FileRecord(relativePath: "CLIPS/C001.mov", size: 1_000_000, xxh64: "abc123def4567890", verified: true, skipped: false),
FileRecord(relativePath: "CLIPS/C002.mov", size: 2_500_000, xxh64: "1111222233334444", verified: true, skipped: true),
],
totalBytes: 3_500_000,
duration: 12.5,
startedAt: Date(timeIntervalSince1970: 1_780_000_000))
}
// CSV report golden shape.
func testCSVReport() {
let csv = OffloadReportWriter.csv(makeReport())
let lines = csv.split(separator: "\n").map(String.init)
XCTAssertEqual(lines[0], "relative_path,size,xxh64,verified,skipped")
XCTAssertEqual(lines[1], "CLIPS/C001.mov,1000000,abc123def4567890,true,false")
XCTAssertEqual(lines[2], "CLIPS/C002.mov,2500000,1111222233334444,true,true")
}
// HTML report contains summary + rows.
func testHTMLReport() {
let html = OffloadReportWriter.html(makeReport())
XCTAssertTrue(html.contains("<html>"))
XCTAssertTrue(html.contains("/Volumes/CARD_A001"))
XCTAssertTrue(html.contains("/RAID/A001"))
XCTAssertTrue(html.contains("CLIPS/C001.mov"))
XCTAssertTrue(html.contains("2 files"))
XCTAssertTrue(html.contains("3.5 MB") || html.contains("3,5 MB"))
XCTAssertTrue(html.contains("VERIFIED"))
}
}