优化冷启动流程:Launch Screen 对齐 Splash,仅阻塞 rolePermissions。
移除 SplashCoordinator,bootstrap 期间用 SplashView 覆盖避免空白闪屏,其余账号数据改为后台补充刷新。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@ -65,6 +65,64 @@ final class AccountContextLoaderTests: XCTestCase {
|
||||
XCTAssertEqual(accountContext.scenicScopes.map(\.id), [88])
|
||||
}
|
||||
|
||||
/// 测试仅恢复角色权限时会写入 PermissionContext,并在无快照景区时补齐作用域。
|
||||
func testRestorePermissionsLoadsRolePermissionsOnly() async throws {
|
||||
let accountContext = AccountContext()
|
||||
let permissionContext = PermissionContext()
|
||||
let api = MockAccountContextAPI()
|
||||
api.roles = [
|
||||
RolePermissionResponse(
|
||||
role: RoleInfo(id: 7, name: "运营", permission: [PermissionItem(id: 1, name: "首页", uri: "/home")]),
|
||||
scenic: [ScenicInfo(id: 88, name: "东湖景区")]
|
||||
)
|
||||
]
|
||||
|
||||
try await AccountContextLoader().restorePermissions(
|
||||
permissionContext: permissionContext,
|
||||
accountContext: accountContext,
|
||||
accountContextAPI: api
|
||||
)
|
||||
|
||||
XCTAssertEqual(permissionContext.currentRole?.id, 7)
|
||||
XCTAssertTrue(permissionContext.canAccess("/home"))
|
||||
XCTAssertEqual(accountContext.scenicScopes.map(\.id), [88])
|
||||
XCTAssertNil(accountContext.profile)
|
||||
}
|
||||
|
||||
/// 测试补充刷新会更新用户资料、景区和门店。
|
||||
func testRefreshSupplementalContextUpdatesProfileAndScopes() async throws {
|
||||
let accountContext = AccountContext()
|
||||
let permissionContext = PermissionContext()
|
||||
let api = MockAccountContextAPI()
|
||||
api.roles = [
|
||||
RolePermissionResponse(
|
||||
role: RoleInfo(id: 7, name: "运营"),
|
||||
scenic: [ScenicInfo(id: 88, name: "东湖景区")]
|
||||
)
|
||||
]
|
||||
api.scenicResponse = ScenicListAllResponse(total: 1, list: [ScenicListItem(id: 88, name: "东湖景区")])
|
||||
api.storeResponse = ListPayload(total: 1, list: [StoreItem(id: 66, scenicId: 88, name: "东湖门店")])
|
||||
|
||||
try await AccountContextLoader().restorePermissions(
|
||||
permissionContext: permissionContext,
|
||||
accountContext: accountContext,
|
||||
accountContextAPI: api
|
||||
)
|
||||
|
||||
try await AccountContextLoader().refreshSupplementalContext(
|
||||
accountContext: accountContext,
|
||||
permissionContext: permissionContext,
|
||||
profileAPI: MockUserProfileAPI(),
|
||||
accountContextAPI: api,
|
||||
cachedCurrentScenicId: 88,
|
||||
cachedCurrentStoreId: 66
|
||||
)
|
||||
|
||||
XCTAssertEqual(accountContext.profile?.displayName, "测试用户")
|
||||
XCTAssertEqual(accountContext.currentScenic?.id, 88)
|
||||
XCTAssertEqual(accountContext.currentStore?.id, 66)
|
||||
}
|
||||
|
||||
/// 测试门店接口失败时不阻断上下文加载。
|
||||
func testRefreshAllowsStoreFailure() async throws {
|
||||
let accountContext = AccountContext()
|
||||
|
||||
Reference in New Issue
Block a user