import Foundation import XCTest import VelodyDomain @testable import VelodyPersistence final class LocalTrackArtworkUploadPayloadBuilderTests: XCTestCase { func testBuilderIncludesArtworkPayloadWhenArtworkExists() async throws { let store = InMemoryLocalArtworkStore() let data = sampleArtworkData() let localFilePath = try await store.saveArtwork( data, sha256: "artwork-sha", mimeType: "image/png" ) let builder = LocalTrackArtworkUploadPayloadBuilder(artworkStore: store) let payload = try await builder.makePayload( for: LocalTrackArtwork( localFilePath: localFilePath, sha256: "artwork-sha", mimeType: "image/png", width: 1, height: 1 ) ) XCTAssertEqual(payload?.dataBase64, data.base64EncodedString()) XCTAssertEqual(payload?.sha256, "artwork-sha") XCTAssertEqual(payload?.mimeType, "image/png") XCTAssertEqual(payload?.width, 1) XCTAssertEqual(payload?.height, 1) } func testBuilderReturnsNilWhenArtworkIsMissing() async throws { let builder = LocalTrackArtworkUploadPayloadBuilder( artworkStore: InMemoryLocalArtworkStore() ) let payload = try await builder.makePayload(for: nil) XCTAssertNil(payload) } } private func sampleArtworkData() -> Data { Data( base64Encoded: "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2P8z8DwHwAFgwJ/lBi4NwAAAABJRU5ErkJggg==" )! }