Implement permission-driven home tab aligned with Android.

Load role-permission on first visit to drive menus, role-based layout, store card, and location reporting with account-scoped persistence and unit tests.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-06 17:27:54 +08:00
parent 75d0cb1f9a
commit 3b17b7f7f0
27 changed files with 2573 additions and 10 deletions

View File

@ -0,0 +1,50 @@
//
// 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: "u1_scenic_user", roleCode: "photographer")
let common = store.commonMenus(
from: allMenus,
permissions: permissions,
accountScope: "u1_scenic_user",
roleCode: "photographer"
)
XCTAssertEqual(common.map(\.uri), ["cloud_management"])
}
}