新增 CooperationOrder 模块(双 Tab 列表、获客员绑定、主 Tab 扫码)、订单来源/带客单绑定及配套 API 测试;同步引入 roleCode 权限匹配与相关单元测试。 Co-authored-by: Cursor <cursoragent@cursor.com>
94 lines
3.2 KiB
Swift
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)
|
|
}
|
|
}
|