// // HomeCommonMenuStoreTests.swift // suixinkanTests // import XCTest @testable import suixinkan /// 常用应用持久化测试。 final class HomeCommonMenuStoreTests: XCTestCase { private var defaults: UserDefaults! private var store: HomeCommonMenuStore! override func setUp() { defaults = UserDefaults(suiteName: "HomeCommonMenuStoreTests")! defaults.removePersistentDomain(forName: "HomeCommonMenuStoreTests") store = HomeCommonMenuStore(defaults: defaults) } override func tearDown() { defaults.removePersistentDomain(forName: "HomeCommonMenuStoreTests") super.tearDown() } func testDefaultCommonURIsTakeFirstFour() { let permissions = (1...6).map { HomePermissionItem(id: "\($0)", name: "菜单\($0)", uri: "uri_\($0)") } let uris = HomeCommonMenuStore.defaultCommonURIs(from: permissions) XCTAssertEqual(uris, ["uri_1", "uri_2", "uri_3", "uri_4"]) } func testSavedCommonURIsOverrideDefault() { let permissions = [ HomePermissionItem(id: "1", name: "钱包", uri: "wallet"), HomePermissionItem(id: "2", name: "云盘", uri: "cloud_management"), HomePermissionItem(id: "3", name: "任务", uri: "task_management"), ] let allMenus = HomeMenuCatalog.visibleMenus(from: permissions) store.saveCommonURIs(["cloud_management"], accountScope: "scenic_user_u1", roleCode: "photographer") let common = store.commonMenus( from: allMenus, permissions: permissions, accountScope: "scenic_user_u1", roleCode: "photographer" ) XCTAssertEqual(common.map(\.uri), ["cloud_management"]) XCTAssertEqual( defaults.stringArray(forKey: "scenic_user_u1_role_photographer_common_uris"), ["cloud_management"] ) } func testIncompleteScopeDoesNotPersistCommonURIs() { store.saveCommonURIs(["wallet"], accountScope: "", roleCode: "photographer") store.saveCommonURIs(["wallet"], accountScope: "scenic_user_u1", roleCode: "") XCTAssertNil(defaults.object(forKey: "_role_photographer_common_uris")) XCTAssertNil(defaults.object(forKey: "scenic_user_u1_role__common_uris")) } func testSplitMenusSeparatesCommonAndMore() { let menus = [ HomeMenuItem(uri: "wallet", title: "钱包", iconName: "wallet.pass"), HomeMenuItem(uri: "cloud_management", title: "云盘", iconName: "icloud"), HomeMenuItem(uri: "task_management", title: "任务", iconName: "checklist"), ] let split = HomeCommonMenuStore.splitMenus(from: menus, commonURIs: ["wallet", "task_management"]) XCTAssertEqual(split.common.map(\.uri), ["wallet", "task_management"]) XCTAssertEqual(split.more.map(\.uri), ["cloud_management"]) } func testPhotographerReportCatalogItemExists() { let item = HomeMenuCatalog.item(for: "report_photographer") XCTAssertEqual(item?.title, "举报摄影师") XCTAssertEqual(item?.iconName, "shield.fill") } func testHomeMenuCatalogUsesSyncedSymbols() { XCTAssertEqual(HomeMenuCatalog.item(for: "space_settings")?.iconName, "person.crop.square.fill") XCTAssertEqual(HomeMenuCatalog.item(for: "wallet")?.iconName, "creditcard.fill") XCTAssertEqual(HomeMenuCatalog.item(for: "sample_management")?.iconName, "sample_ic_home_menu_route") XCTAssertEqual(HomeMenuCatalog.item(for: "/scenic-queue")?.iconName, "person.3.fill") XCTAssertEqual(HomeMenuItem.moreFunctions.iconName, "ellipsis") } }