完善样片管理列表、详情与上传页 UI 交互。
对齐 Android 样片模块布局与加载状态,补充共享 UI 组件与图片资源,并增强列表解析容错与单元测试覆盖。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@ -60,6 +60,16 @@ final class SampleManagementAPITests: XCTestCase {
|
||||
XCTAssertEqual(operationQuery?.first { $0.name == "type" }?.value, "2")
|
||||
}
|
||||
|
||||
func testDetailMediaTypeZeroFallsBackToAlbumType() async throws {
|
||||
let detail = envelopeJSON(#"{"id":8,"type":2,"status":1,"listing_status":1,"media_list":[{"id":1,"type":0,"oss_url":"https://cdn/video.mp4"}]}"#)
|
||||
let session = MockURLSession(responses: [detail])
|
||||
let api = SampleManagementAPI(client: APIClient(environment: .testing, session: session))
|
||||
|
||||
let response = try await api.detail(id: 8)
|
||||
|
||||
XCTAssertEqual(response.mediaList?.first?.resolvedType(fallback: response.type ?? 1), 2)
|
||||
}
|
||||
|
||||
func testUploadEncodesAndroidBodyKeys() async throws {
|
||||
let session = MockURLSession(responses: [envelopeJSON("{}")])
|
||||
let api = SampleManagementAPI(client: APIClient(environment: .testing, session: session))
|
||||
@ -97,11 +107,45 @@ final class SampleManagementAPITests: XCTestCase {
|
||||
let media = (body?["media_list"] as? [[String: Any]])?.first
|
||||
XCTAssertEqual(media?["original_name"] as? String, "a.jpg")
|
||||
XCTAssertEqual(media?["oss_url"] as? String, "https://cdn/a.jpg")
|
||||
XCTAssertEqual(media?["size"] as? Int, 1024)
|
||||
let fileSize = media?["file_width_size"] as? [String: Any]
|
||||
XCTAssertEqual(fileSize?["width"] as? Int, 1920)
|
||||
XCTAssertEqual(fileSize?["height"] as? Int, 1080)
|
||||
}
|
||||
|
||||
func testUploadEncodesVideoMetadata() async throws {
|
||||
let session = MockURLSession(responses: [envelopeJSON("{}")])
|
||||
let api = SampleManagementAPI(client: APIClient(environment: .testing, session: session))
|
||||
let request = SampleUploadMaterialRequest(
|
||||
name: "视频样片",
|
||||
mediaType: .video,
|
||||
mediaList: [
|
||||
SampleUploadMediaItem(
|
||||
originalName: "rotated.mp4",
|
||||
ossUrl: "https://cdn/rotated.mp4",
|
||||
size: 4_096,
|
||||
fileWidthSize: SampleUploadFileSize(width: 1080, height: 1920)
|
||||
),
|
||||
],
|
||||
coverUrl: "https://cdn/cover.jpg",
|
||||
coverSize: "512",
|
||||
scenicSpotId: 9,
|
||||
projectId: 7
|
||||
)
|
||||
|
||||
try await api.upload(request)
|
||||
|
||||
let body = try JSONSerialization.jsonObject(with: try XCTUnwrap(session.requests.first?.httpBody)) as? [String: Any]
|
||||
XCTAssertEqual(body?["type"] as? String, "2")
|
||||
XCTAssertEqual(body?["media_type"] as? String, "2")
|
||||
let media = (body?["media_list"] as? [[String: Any]])?.first
|
||||
XCTAssertEqual(media?["original_name"] as? String, "rotated.mp4")
|
||||
XCTAssertEqual(media?["size"] as? Int, 4_096)
|
||||
let fileSize = media?["file_width_size"] as? [String: Any]
|
||||
XCTAssertEqual(fileSize?["width"] as? Int, 1080)
|
||||
XCTAssertEqual(fileSize?["height"] as? Int, 1920)
|
||||
}
|
||||
|
||||
func testProjectAndScenicSpotPaths() async throws {
|
||||
let spots = envelopeJSON(#"{"total":1,"list":[]}"#)
|
||||
let projects = envelopeJSON(#"{"total":1,"list":[]}"#)
|
||||
|
||||
Reference in New Issue
Block a user