fix: 优化相册素材状态与删除保护

This commit is contained in:
2026-08-17 16:04:03 +08:00
parent b127495e52
commit c34c4e1923
6 changed files with 254 additions and 81 deletions
@@ -1149,9 +1149,8 @@ final class TravelAlbumDetailViewControllerTests: XCTestCase {
XCTAssertFalse(controller.view.allLabels().contains { $0.text == "刷新失败" })
}
func testMaterialCellShowsSemanticStatusBadgeWithoutOverlappingSelectionCheck() throws {
func testMaterialCellShowsIndependentPurchaseAndAIRetouchBadgesWithoutOverlappingSelectionCheck() throws {
let cases: [(TravelAlbumMaterial, String, UInt)] = [
(TravelAlbumMaterial(isPurchased: true), "已购", 0x475569),
(TravelAlbumMaterial(aiRetouchStatus: 1), "待处理", 0xB45309),
(TravelAlbumMaterial(aiRetouchStatus: 2), "修图中", 0x1D4ED8),
(TravelAlbumMaterial(aiRetouchStatus: 3), "AI已修", 0x047857),
@@ -1170,12 +1169,12 @@ final class TravelAlbumDetailViewControllerTests: XCTestCase {
let badgeView = try XCTUnwrap(
cell.findSubview {
$0.accessibilityIdentifier == "travelAlbum.materialStatusBadge"
$0.accessibilityIdentifier == "travelAlbum.materialAIRetouchBadge"
}
)
let badgeLabel = try XCTUnwrap(
cell.findSubview {
$0.accessibilityIdentifier == "travelAlbum.materialStatusBadgeLabel"
$0.accessibilityIdentifier == "travelAlbum.materialAIRetouchBadgeLabel"
} as? UILabel
)
let selectionCheck = try XCTUnwrap(
@@ -1188,22 +1187,61 @@ final class TravelAlbumDetailViewControllerTests: XCTestCase {
XCTAssertEqual(badgeLabel.text, expectedText)
XCTAssertEqual(badgeView.backgroundColor?.travelAlbumTestHexRGB, expectedColor)
XCTAssertLessThan(badgeView.frame.maxX, selectionCheck.frame.minX)
XCTAssertTrue(cell.accessibilityLabel?.contains("状态:\(expectedText)") == true)
XCTAssertTrue(cell.accessibilityLabel?.contains("修图状态:\(expectedText)") == true)
}
let combinedCell = TravelAlbumMaterialCell(frame: CGRect(x: 0, y: 0, width: 176, height: 220))
combinedCell.apply(
material: TravelAlbumMaterial(isPurchased: true, aiRetouchStatus: 2),
selectionMode: true,
selected: false
)
combinedCell.layoutIfNeeded()
let purchaseBadge = try XCTUnwrap(
combinedCell.findSubview {
$0.accessibilityIdentifier == "travelAlbum.materialPurchaseBadge"
}
)
let purchaseLabel = try XCTUnwrap(
combinedCell.findSubview {
$0.accessibilityIdentifier == "travelAlbum.materialPurchaseBadgeLabel"
} as? UILabel
)
let aiRetouchBadge = try XCTUnwrap(
combinedCell.findSubview {
$0.accessibilityIdentifier == "travelAlbum.materialAIRetouchBadge"
}
)
XCTAssertFalse(purchaseBadge.isHidden)
XCTAssertFalse(aiRetouchBadge.isHidden)
XCTAssertEqual(purchaseLabel.text, "已购")
XCTAssertEqual(purchaseBadge.backgroundColor?.travelAlbumTestHexRGB, 0x475569)
XCTAssertGreaterThan(purchaseBadge.frame.minY, aiRetouchBadge.frame.maxY)
XCTAssertEqual(purchaseBadge.frame.minX, 6, accuracy: 0.5)
XCTAssertEqual(purchaseBadge.frame.maxY, 170, accuracy: 0.5)
XCTAssertTrue(combinedCell.accessibilityLabel?.contains("购买状态:已购") == true)
XCTAssertTrue(combinedCell.accessibilityLabel?.contains("修图状态:修图中") == true)
let hiddenCell = TravelAlbumMaterialCell(frame: CGRect(x: 0, y: 0, width: 176, height: 220))
hiddenCell.apply(
material: TravelAlbumMaterial(aiRetouchStatus: 0, aiRetouchStatusName: "已上传"),
selectionMode: false,
selected: false
)
let hiddenBadge = try XCTUnwrap(
let hiddenPurchaseBadge = try XCTUnwrap(
hiddenCell.findSubview {
$0.accessibilityIdentifier == "travelAlbum.materialStatusBadge"
$0.accessibilityIdentifier == "travelAlbum.materialPurchaseBadge"
}
)
XCTAssertTrue(hiddenBadge.isHidden)
XCTAssertFalse(hiddenCell.accessibilityLabel?.contains("状态:") == true)
let hiddenAIRetouchBadge = try XCTUnwrap(
hiddenCell.findSubview {
$0.accessibilityIdentifier == "travelAlbum.materialAIRetouchBadge"
}
)
XCTAssertTrue(hiddenPurchaseBadge.isHidden)
XCTAssertTrue(hiddenAIRetouchBadge.isHidden)
XCTAssertFalse(hiddenCell.accessibilityLabel?.contains("购买状态:") == true)
XCTAssertFalse(hiddenCell.accessibilityLabel?.contains("修图状态:") == true)
}
private func waitUntil(_ condition: @escaping () -> Bool) async {