Files
suixinkan_ios_new/suixinkanTests/AppRoleCodeTests.swift
汉秋 1970572edd 迁移合作订单完整能力,并统一 AppRoleCode 角色权限与首页菜单展示。
新增 CooperationOrder 模块(双 Tab 列表、获客员绑定、主 Tab 扫码)、订单来源/带客单绑定及配套 API 测试;同步引入 roleCode 权限匹配与相关单元测试。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 13:33:00 +08:00

94 lines
3.2 KiB
Swift

//
// AppRoleCodeTests.swift
// suixinkanTests
//
// Created by Codex on 2026/6/29.
//
import XCTest
@testable import suixinkan
final class AppRoleCodeTests: XCTestCase {
func testFromCodeParsesKnownRoles() {
XCTAssertEqual(AppRoleCode.fromCode("store_admin"), .storeAdmin)
XCTAssertEqual(AppRoleCode.fromCode("scenic_admin"), .scenicAdmin)
XCTAssertEqual(AppRoleCode.fromCode("photographer"), .photographer)
}
func testFromLegacyRoleIdMapsKnownIds() {
XCTAssertEqual(AppRoleCode.fromLegacyRoleId(46), .storeAdmin)
XCTAssertEqual(AppRoleCode.fromLegacyRoleId(53), .scenicAdmin)
XCTAssertEqual(AppRoleCode.fromLegacyRoleId(41), .photographer)
}
func testFromRoleNameAvoidsAssistantMisclassification() {
XCTAssertEqual(AppRoleCode.fromRoleName("摄影师助理"), .photographerAssistant)
XCTAssertEqual(AppRoleCode.fromRoleName("资深摄影师"), .photographer)
}
func testHomeMinimalTopRolesContainsManagementRoles() {
XCTAssertTrue(AppRoleCode.homeMinimalTopRoles.contains(.storeAdmin))
XCTAssertTrue(AppRoleCode.homeMinimalTopRoles.contains(.scenicAdmin))
XCTAssertFalse(AppRoleCode.homeMinimalTopRoles.contains(.photographer))
}
}
final class RolePermissionMatchingTests: XCTestCase {
func testMatchPrefersRoleCodeOverLegacyId() {
let permissions = [
RolePermissionResponse(
role: RoleInfo(id: 10, name: "摄影师", roleCode: "photographer", notes: nil, permission: []),
scenic: []
),
RolePermissionResponse(
role: RoleInfo(id: 53, name: "景区管理员", roleCode: "scenic_admin", notes: nil, permission: []),
scenic: []
)
]
let matched = RolePermissionMatching.match(
in: permissions,
roleCode: "scenic_admin",
roleId: 10,
roleName: "摄影师"
)
XCTAssertEqual(matched?.role.id, 53)
}
func testResolveRoleCodeMigratesLegacySession() {
let resolved = RolePermissionMatching.resolveRoleCode(
roleCode: nil,
roleId: 46,
roleName: nil,
permissions: []
)
XCTAssertEqual(resolved, .storeAdmin)
}
}
final class AccountSnapshotMigrationTests: XCTestCase {
func testMigrateLegacyRoleIdToRoleCode() {
var snapshot = AccountSnapshot(currentRoleId: 53)
snapshot.migrateLegacyRoleIfNeeded()
XCTAssertEqual(snapshot.currentRoleCode, "scenic_admin")
XCTAssertNil(snapshot.currentRoleId)
}
func testLoadMigratesAndPersistsLegacySnapshot() {
let defaults = UserDefaults(suiteName: "AccountSnapshotMigrationTests")!
defaults.removePersistentDomain(forName: "AccountSnapshotMigrationTests")
let store = AccountSnapshotStore(defaults: defaults, key: "test.snapshot")
store.save(AccountSnapshot(currentRoleId: 46))
let loaded = store.load()
XCTAssertEqual(loaded?.currentRoleCode, "store_admin")
XCTAssertNil(loaded?.currentRoleId)
let persisted = store.load()
XCTAssertEqual(persisted?.currentRoleCode, "store_admin")
XCTAssertNil(persisted?.currentRoleId)
}
}