40 lines
1.6 KiB
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"))
|
|
}
|
|
}
|