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

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-15 14:59:31 +08:00
parent 5eef31b8da
commit ce6de76055
18 changed files with 321 additions and 130 deletions

View File

@ -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,

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))
}
}

View File

@ -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"))
}
}

View File

@ -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)
}
}