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("")) 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")) } }