feat: 优化 AI 修图模板与全屏预览

This commit is contained in:
2026-08-13 13:48:11 +08:00
parent 60502784db
commit f2a005e008
22 changed files with 410 additions and 116 deletions
@@ -25,7 +25,7 @@ final class TravelAlbumAIRetouchTemplateViewModelTests: XCTestCase {
XCTAssertTrue(viewModel.shouldShowInitialTips)
XCTAssertEqual(
viewModel.initialTipsText,
"Tips:本次显示 3 类风格。每张照片生成「精修后 + 氛围感」2 个结果,第一张照片另生成所选封面结果。"
"每张照片生成精修结果,氛围感可选;本次可免费生成 1 张封面"
)
XCTAssertEqual(viewModel.visibleCategories, [.refined, .atmosphere, .cover])
XCTAssertEqual(viewModel.selectedRefinedTemplateId, 11)
@@ -206,7 +206,7 @@ final class TravelAlbumDetailViewControllerTests: XCTestCase {
XCTAssertFalse(imageView.constraintsAffectingLayout(for: .vertical).isEmpty)
}
func testPreviewUsesScreenshotChromeAndConstrainedImageViewport() throws {
func testPreviewUsesScreenshotChromeOverFullScreenImageViewport() throws {
UIView.setAnimationsEnabled(false)
defer { UIView.setAnimationsEnabled(true) }
@@ -287,8 +287,10 @@ final class TravelAlbumDetailViewControllerTests: XCTestCase {
XCTAssertEqual(segmentedControl.selectedSegmentIndex, 0)
XCTAssertEqual(backButton.bounds.size, CGSize(width: 44, height: 44))
XCTAssertNil(backButton.configuration?.baseBackgroundColor)
XCTAssertEqual(collectionView.frame.minY, topChrome.frame.maxY, accuracy: 0.5)
XCTAssertEqual(collectionView.frame.maxY, bottomChrome.frame.minY, accuracy: 0.5)
XCTAssertEqual(collectionView.frame, controller.view.bounds)
XCTAssertLessThan(collectionView.frame.minY, topChrome.frame.maxY)
XCTAssertGreaterThan(collectionView.frame.maxY, bottomChrome.frame.minY)
XCTAssertEqual(collectionView.contentInsetAdjustmentBehavior, .never)
XCTAssertTrue(controller.view.allLabels().contains { $0.text == "IMG_0002.jpeg" })
XCTAssertTrue(controller.view.allLabels().contains { $0.text == "2.4MB" })
XCTAssertTrue(controller.view.allLabels().contains { $0.text == "1/10" })
@@ -345,7 +347,8 @@ final class TravelAlbumDetailViewControllerTests: XCTestCase {
XCTAssertTrue(segmentedControl.isHidden)
XCTAssertTrue(highResolutionButton.isHidden)
XCTAssertEqual(bottomChrome.frame.minY - collectionView.frame.maxY, 56, accuracy: 0.5)
XCTAssertEqual(collectionView.frame, controller.view.bounds)
XCTAssertGreaterThan(collectionView.frame.maxY, bottomChrome.frame.minY)
}
func testSelectionModeShowsAIRetouchOnLeftAndDeleteOnRight() async throws {
@@ -459,17 +462,17 @@ final class TravelAlbumDetailViewControllerTests: XCTestCase {
XCTAssertEqual(selectionCountLabel.text, "已选择 4 张照片")
XCTAssertEqual(
tipsLabel.text,
"Tips:本次显示 3 类风格。每张照片生成「精修后 + 氛围感」2 个结果,第一张照片另生成所选封面结果。"
"每张照片生成精修结果,氛围感可选;本次可免费生成 1 张封面"
)
XCTAssertFalse(tipsContainer.isHidden)
XCTAssertEqual(tipsContainer.backgroundColor?.travelAlbumTestHexRGB, 0xEAF3FF)
XCTAssertEqual(tipsContainer.backgroundColor?.travelAlbumTestHexRGB, 0xF4F8FF)
XCTAssertEqual(tipsLabel.textColor.travelAlbumTestHexRGB, 0x385778)
XCTAssertEqual(tipsContainer.layer.cornerRadius, 10)
XCTAssertEqual(tipsContainer.layer.cornerRadius, 12)
XCTAssertTrue(tipsContainer.isDescendant(of: collectionView))
XCTAssertFalse(bottomBar.isDescendant(of: collectionView))
XCTAssertEqual(cancelButton.configuration?.title, "取消")
XCTAssertEqual(confirmButton.configuration?.title, "确定")
XCTAssertEqual(cancelButton.bounds.width, confirmButton.bounds.width, accuracy: 0.5)
XCTAssertEqual(cancelButton.currentTitle, "取消")
XCTAssertEqual(confirmButton.currentTitle, "确定")
XCTAssertLessThan(cancelButton.bounds.width, confirmButton.bounds.width)
XCTAssertTrue(confirmButton.isEnabled)
}
@@ -502,9 +505,9 @@ final class TravelAlbumDetailViewControllerTests: XCTestCase {
} as? UICollectionView
)
let accessibleLabels = controller.view.allAccessibilityLabels()
XCTAssertTrue(accessibleLabels.contains("原图精修"))
XCTAssertTrue(accessibleLabels.contains("原图精修,必选"))
XCTAssertTrue(accessibleLabels.contains("氛围感修图,选填"))
XCTAssertTrue(accessibleLabels.contains("封面风格模板,赠送 · 不占精修张数"))
XCTAssertTrue(accessibleLabels.contains("封面风格,赠送 · 不占额度"))
collectionView.scrollToItem(
at: IndexPath(item: 0, section: 4),
@@ -517,6 +520,13 @@ final class TravelAlbumDetailViewControllerTests: XCTestCase {
$0.accessibilityIdentifier == "travelAlbum.aiRetouchRemainingQuotaLabel"
} as? UILabel
)
let requiredQuotaLabel = try XCTUnwrap(
controller.view.findSubview {
$0.accessibilityIdentifier == "travelAlbum.aiRetouchRequiredQuotaLabel"
} as? UILabel
)
XCTAssertEqual(requiredQuotaLabel.text, "预计消耗 4 张")
XCTAssertEqual(requiredQuotaLabel.accessibilityLabel, "预计消耗4张修图额度")
XCTAssertEqual(quotaLabel.text, "剩余 8 张")
XCTAssertEqual(quotaLabel.accessibilityLabel, "剩余8张修图额度")
}