优化有线传图页设备展示,并缓存传输模式选项。

未连接状态改为「未连接相机」;设备型号映射为可读名称而非 iPhone12,1 等内部代号;边拍边传/拍后传输按账号持久化并在下次进入时恢复。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-30 14:07:34 +08:00
parent 28db8b3182
commit ceac8ba67e
8 changed files with 234 additions and 14 deletions

View File

@ -0,0 +1,24 @@
//
// DeviceModelNameResolverTests.swift
// suixinkanTests
//
import XCTest
@testable import suixinkan
///
final class DeviceModelNameResolverTests: XCTestCase {
///
func testKnownIdentifiersMapToMarketingNames() {
XCTAssertEqual(DeviceModelNameResolver.marketingName(forHardwareIdentifier: "iPhone10,3"), "iPhone X")
XCTAssertEqual(DeviceModelNameResolver.marketingName(forHardwareIdentifier: "iPhone10,6"), "iPhone X")
XCTAssertEqual(DeviceModelNameResolver.marketingName(forHardwareIdentifier: "iPhone12,1"), "iPhone 11")
XCTAssertEqual(DeviceModelNameResolver.marketingName(forHardwareIdentifier: "iPhone16,2"), "iPhone 15 Pro Max")
}
/// 退
func testUnknownIdentifierUsesGenericFallback() {
XCTAssertEqual(DeviceModelNameResolver.marketingName(forHardwareIdentifier: "iPhone99,9"), "iPhone")
XCTAssertEqual(DeviceModelNameResolver.marketingName(forHardwareIdentifier: "iPad99,9"), "iPad")
}
}

View File

@ -296,6 +296,45 @@ final class WiredCameraTransferViewModelTests: XCTestCase {
XCTAssertEqual(viewModel.photos.first?.status, .uploaded)
}
///
func testSelectTransferModePersistsOption() async {
let account = makeTransferModeTestAccount()
let context = WiredTransferContext(albumId: 7701, albumName: "模式缓存", phone: "", orderNumber: "")
let viewModel = WiredCameraTransferViewModel(context: context, cameraService: MockWiredCameraService())
let api = MockTravelAlbumAPIForWiredTransfer()
let oss = WiredTransferMockOSSUploadService()
await viewModel.start(api: api, ossService: oss, scenicID: 1, accountContext: account)
viewModel.selectTransferMode(
WiredCameraTransferViewModel.modePostShootTransfer,
api: api,
ossService: oss,
scenicID: 1
)
let store = makeTransferModeTestStore(account: account)
XCTAssertEqual(store.loadTransferModeOption(), WiredCameraTransferViewModel.modePostShootTransfer)
}
/// 线
func testStartRestoresCachedTransferModeOption() async {
let account = makeTransferModeTestAccount()
let store = makeTransferModeTestStore(account: account)
store.saveTransferModeOption(WiredCameraTransferViewModel.modePostShootTransfer)
let context = WiredTransferContext(albumId: 7702, albumName: "模式恢复", phone: "", orderNumber: "")
let viewModel = WiredCameraTransferViewModel(context: context, cameraService: MockWiredCameraService())
await viewModel.start(
api: MockTravelAlbumAPIForWiredTransfer(),
ossService: WiredTransferMockOSSUploadService(),
scenicID: 1,
accountContext: account
)
XCTAssertEqual(viewModel.transferModeOption, WiredCameraTransferViewModel.modePostShootTransfer)
}
///
func testDownloadedPhotoGeneratesThumbnailForList() async throws {
let camera = MockWiredCameraService()
@ -490,3 +529,18 @@ private final class WiredTransferMockOSSUploadService: OSSUploadServing {
func uploadScenicApplicationImage(data: Data, fileName: String, scenicId: Int, onProgress: @escaping (Int) -> Void) async throws -> String { "" }
func uploadBankCardImage(data: Data, fileName: String, scenicId: Int, onProgress: @escaping (Int) -> Void) async throws -> String { "" }
}
@MainActor
private func makeTransferModeTestAccount() -> AccountContext {
let account = AccountContext()
account.applyLogin(profile: AccountProfile(userId: "transfer-mode-user", displayName: "测试"))
return account
}
@MainActor
private func makeTransferModeTestStore(account: AccountContext) -> WiredTransferPhotoStore {
WiredTransferPhotoStore(
accountPrefixProvider: { account.accountCachePrefix ?? "guest_" },
userIDProvider: { account.profile?.userId ?? "" }
)
}