完善账号切换展示、首页菜单图标与有线传输设置 chip。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-15 14:59:31 +08:00
co-authored by Cursor
parent 5eef31b8da
commit ce6de76055
18 changed files with 321 additions and 130 deletions
@@ -53,8 +53,9 @@ final class AccountSwitchViewModelTests: XCTestCase {
accountType: V9ScenicUser.accountTypeValue,
businessUserId: 0,
title: "景区A",
subtitle: "张三",
subtitle: "角色A",
phone: "13800138000",
realName: "张三",
avatar: "",
scenicName: "景区A",
storeId: nil,
+9 -3
View File
@@ -29,6 +29,7 @@ final class AuthModelsTests: XCTestCase {
"phone": "13800138000",
"scenic_id": 10,
"scenic_name": "示例景区",
"role_name": "摄影师",
"is_current": false
}
],
@@ -47,6 +48,7 @@ final class AuthModelsTests: XCTestCase {
"scenic_name": "示例景区",
"store_id": 20,
"store_name": "示例门店",
"role_name": "店长",
"is_current": false
}
]
@@ -59,7 +61,7 @@ final class AuthModelsTests: XCTestCase {
XCTAssertEqual(response.token, "person-temp-token")
XCTAssertEqual(response.accounts.map(\.businessUserId), [101, 201])
XCTAssertEqual(response.accounts.map(\.subtitle), ["scenic_operator", "store_admin"])
XCTAssertEqual(response.accounts.map(\.subtitle), ["示例景区 · 摄影师", "示例景区 · 店长"])
}
func testV9AuthResponseDecodesMissingAccountListsAsEmpty() throws {
@@ -96,13 +98,15 @@ final class AuthModelsTests: XCTestCase {
"phone": "13800138000",
"scenic_id": 10,
"scenic_name": "示例景区",
"role_name": "摄影师",
"is_current": false
}
""".data(using: .utf8)!
let user = try JSONDecoder().decode(V9ScenicUser.self, from: json)
XCTAssertEqual(user.businessUserId, 101)
XCTAssertEqual(user.toAccountSwitchAccount().subtitle, "scenic_operator")
XCTAssertEqual(user.toAccountSwitchAccount().subtitle, "示例景区 · 摄影师")
XCTAssertEqual(user.toAccountSwitchAccount().realName, "张三")
XCTAssertEqual(user.toAccountSwitchAccount().toSetUserRequest(), SetUserRequest(ssUserId: 101))
}
@@ -122,13 +126,15 @@ final class AuthModelsTests: XCTestCase {
"scenic_name": "示例景区",
"store_id": 20,
"store_name": "示例门店",
"role_name": "店长",
"is_current": false
}
""".data(using: .utf8)!
let user = try JSONDecoder().decode(V9StoreUser.self, from: json)
XCTAssertEqual(user.businessUserId, 201)
XCTAssertEqual(user.toAccountSwitchAccount().subtitle, "store_admin")
XCTAssertEqual(user.toAccountSwitchAccount().subtitle, "示例景区 · 店长")
XCTAssertEqual(user.toAccountSwitchAccount().realName, "张三")
XCTAssertEqual(user.toAccountSwitchAccount().toSetUserRequest(), SetUserRequest(storeUserId: 201))
}
}
@@ -0,0 +1,44 @@
//
// HomeMenuIconFactoryTests.swift
// suixinkanTests
//
import UIKit
import XCTest
@testable import suixinkan
/// 首页菜单图标加载测试。
final class HomeMenuIconFactoryTests: XCTestCase {
func testAssetIconTakesPrecedence() {
let image = HomeMenuIconFactory.image(named: "home_menu_space")
XCTAssertNotNil(image)
XCTAssertNil(UIImage(systemName: "home_menu_space"))
}
func testSystemSymbolMatchesSharedConfiguration() {
let expected = UIImage(
systemName: "ellipsis",
withConfiguration: HomeMenuIconFactory.symbolConfiguration
)
let actual = HomeMenuIconFactory.image(named: "ellipsis")
XCTAssertNotNil(actual)
XCTAssertEqual(actual?.size, expected?.size)
}
func testSystemSymbolDiffersFromUnconfiguredDefault() {
let configured = HomeMenuIconFactory.image(named: "ellipsis")
let plain = UIImage(systemName: "ellipsis")
XCTAssertNotNil(configured)
XCTAssertNotNil(plain)
XCTAssertNotEqual(configured?.size, plain?.size)
}
func testComplexSystemSymbolResolves() {
XCTAssertNotNil(HomeMenuIconFactory.image(named: "dot.radiowaves.left.and.right"))
XCTAssertNotNil(HomeMenuIconFactory.image(named: "rectangle.stack.badge.plus"))
}
}
@@ -0,0 +1,29 @@
//
// WiredTransferSettingChipButtonTests.swift
// suixinkanTests
//
import XCTest
@testable import suixinkan
final class WiredTransferSettingChipButtonTests: XCTestCase {
@MainActor
func testApplyTitleUpdatesAccessibilityLabel() {
let button = WiredTransferSettingChipButton()
button.apply(title: "AI修图")
XCTAssertEqual(button.titleText, "AI修图")
XCTAssertEqual(button.accessibilityLabel, "AI修图")
}
@MainActor
func testShowsChevronDefaultsToFalse() {
let button = WiredTransferSettingChipButton()
XCTAssertFalse(button.showsChevron)
}
@MainActor
func testInitWithShowsChevronTrue() {
let button = WiredTransferSettingChipButton(showsChevron: true)
XCTAssertTrue(button.showsChevron)
}
}