模块化 AppStore 并完善素材管理与个人空间设置。
将会话、权限、位置、收款与排队存储拆分为独立模块,同步更新各 ViewModel 与单元测试,并补充素材管理 UI 与个人空间设置交互。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@ -18,12 +18,12 @@ final class HomeViewModelTests: XCTestCase {
|
||||
defaults = UserDefaults(suiteName: "HomeViewModelTests")!
|
||||
defaults.removePersistentDomain(forName: "HomeViewModelTests")
|
||||
appStore = AppStore(defaults: defaults)
|
||||
appStore.userId = "2001"
|
||||
appStore.accountType = "scenic_user"
|
||||
appStore.roleCode = AppRoleCode.photographer.rawValue
|
||||
appStore.roleName = "摄影师"
|
||||
appStore.currentScenicId = 10
|
||||
appStore.currentScenicName = "测试景区"
|
||||
appStore.session.userId = "2001"
|
||||
appStore.session.accountType = .scenicUser
|
||||
appStore.session.roleCode = AppRoleCode.photographer.rawValue
|
||||
appStore.session.roleName = "摄影师"
|
||||
appStore.session.currentScenicId = 10
|
||||
appStore.session.currentScenicName = "测试景区"
|
||||
}
|
||||
|
||||
override func tearDown() {
|
||||
@ -32,12 +32,12 @@ final class HomeViewModelTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testMinimalTopRoleFlag() {
|
||||
appStore.roleCode = AppRoleCode.storeAdmin.rawValue
|
||||
appStore.session.roleCode = AppRoleCode.storeAdmin.rawValue
|
||||
let viewModel = HomeViewModel(appStore: appStore)
|
||||
viewModel.refreshLocalDisplayState()
|
||||
XCTAssertTrue(viewModel.isMinimalTopRole)
|
||||
|
||||
appStore.roleCode = AppRoleCode.photographer.rawValue
|
||||
appStore.session.roleCode = AppRoleCode.photographer.rawValue
|
||||
viewModel.refreshLocalDisplayState()
|
||||
XCTAssertFalse(viewModel.isMinimalTopRole)
|
||||
}
|
||||
@ -77,7 +77,7 @@ final class HomeViewModelTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testRebuildCommonMenusFiltersUnknownURIs() {
|
||||
appStore.savePermissionItems([
|
||||
appStore.permissions.savePermissionItems([
|
||||
HomePermissionItem(id: "1", name: "钱包", uri: "wallet"),
|
||||
HomePermissionItem(id: "2", name: "未知", uri: "unknown_uri"),
|
||||
])
|
||||
@ -88,7 +88,7 @@ final class HomeViewModelTests: XCTestCase {
|
||||
|
||||
func testRebuildCommonMenusPersistsDefaultURIsOnFirstLoad() {
|
||||
let menuStore = HomeCommonMenuStore(defaults: defaults)
|
||||
appStore.savePermissionItems([
|
||||
appStore.permissions.savePermissionItems([
|
||||
HomePermissionItem(id: "1", name: "钱包", uri: "wallet"),
|
||||
HomePermissionItem(id: "2", name: "云盘", uri: "cloud_management"),
|
||||
HomePermissionItem(id: "3", name: "任务", uri: "task_management"),
|
||||
@ -104,8 +104,8 @@ final class HomeViewModelTests: XCTestCase {
|
||||
])
|
||||
XCTAssertEqual(
|
||||
menuStore.savedCommonURIs(
|
||||
accountScope: appStore.accountCachePrefix,
|
||||
roleCode: appStore.roleCode
|
||||
accountScope: appStore.session.accountCachePrefix,
|
||||
roleCode: appStore.session.roleCode
|
||||
),
|
||||
["wallet", "cloud_management", "task_management", "system_settings"]
|
||||
)
|
||||
@ -124,7 +124,7 @@ final class HomeViewModelTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testRolePermissionBuildsCommonMenusAndStoreCardRole() async throws {
|
||||
appStore.roleCode = AppRoleCode.storeAdmin.rawValue
|
||||
appStore.session.roleCode = AppRoleCode.storeAdmin.rawValue
|
||||
let permissionResponse = RolePermissionResponse(
|
||||
role: RoleInfo(
|
||||
id: 46,
|
||||
@ -170,7 +170,7 @@ final class HomeViewModelTests: XCTestCase {
|
||||
),
|
||||
scenic: []
|
||||
)
|
||||
appStore.savePermissionItems([HomePermissionItem(id: "1", name: "钱包", uri: "wallet")])
|
||||
appStore.permissions.savePermissionItems([HomePermissionItem(id: "1", name: "钱包", uri: "wallet")])
|
||||
|
||||
let permissionJSON = try TestJSON.envelope(data: [permissionResponse])
|
||||
let session = MockURLSession(responses: [permissionJSON])
|
||||
@ -185,26 +185,26 @@ final class HomeViewModelTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testRefreshLocalDisplayStateClearsWhenNameMissing() {
|
||||
appStore.currentScenicId = 10
|
||||
appStore.currentScenicName = ""
|
||||
appStore.session.currentScenicId = 10
|
||||
appStore.session.currentScenicName = ""
|
||||
let viewModel = HomeViewModel(appStore: appStore)
|
||||
|
||||
viewModel.refreshLocalDisplayState()
|
||||
|
||||
XCTAssertEqual(viewModel.currentScenicName, "")
|
||||
XCTAssertEqual(appStore.currentScenicId, 0)
|
||||
XCTAssertEqual(appStore.currentScenicName, "")
|
||||
XCTAssertEqual(appStore.session.currentScenicId, 0)
|
||||
XCTAssertEqual(appStore.session.currentScenicName, "")
|
||||
}
|
||||
|
||||
func testRefreshLocalDisplayStateClearsWhenIdMissing() {
|
||||
appStore.currentScenicId = 0
|
||||
appStore.currentScenicName = "残留名称"
|
||||
appStore.session.currentScenicId = 0
|
||||
appStore.session.currentScenicName = "残留名称"
|
||||
let viewModel = HomeViewModel(appStore: appStore)
|
||||
|
||||
viewModel.refreshLocalDisplayState()
|
||||
|
||||
XCTAssertEqual(viewModel.currentScenicName, "")
|
||||
XCTAssertEqual(appStore.currentScenicName, "")
|
||||
XCTAssertEqual(appStore.session.currentScenicName, "")
|
||||
}
|
||||
|
||||
private func statusActionContainer(in view: HomeQuickActionsView) throws -> UIView {
|
||||
|
||||
Reference in New Issue
Block a user