61 lines
2.1 KiB
Swift
61 lines
2.1 KiB
Swift
//
|
||
// StorageTests.swift
|
||
// suixinkanTests
|
||
//
|
||
// Created by Codex on 2026/6/20.
|
||
//
|
||
|
||
import XCTest
|
||
@testable import suixinkan_ios
|
||
|
||
/// 本地缓存 Store 测试,覆盖 UserDefaults 中的偏好和账号快照。
|
||
final class StorageTests: XCTestCase {
|
||
/// 测试 AppPreferencesStore 能保存并读取上次登录手机号和协议状态。
|
||
func testAppPreferencesStorePersistsLoginPreferences() {
|
||
let defaults = makeIsolatedDefaults()
|
||
let store = AppPreferencesStore(defaults: defaults)
|
||
|
||
store.saveLastLoginUsername(" 18651857230 ")
|
||
store.savePrivacyAgreementAccepted(true)
|
||
|
||
XCTAssertEqual(store.loadLastLoginUsername(), "18651857230")
|
||
XCTAssertTrue(store.loadPrivacyAgreementAccepted())
|
||
}
|
||
|
||
/// 测试账号快照能保存并恢复账号资料、业务作用域和当前选择。
|
||
func testAccountSnapshotStorePersistsAccountContextSnapshot() {
|
||
let defaults = makeIsolatedDefaults()
|
||
let store = AccountSnapshotStore(defaults: defaults)
|
||
let snapshot = AccountSnapshot(
|
||
profile: AccountProfile(
|
||
userId: "101",
|
||
displayName: "测试账号",
|
||
phone: "18651857230",
|
||
avatarURL: "https://cdn.example.com/avatar.jpg"
|
||
),
|
||
accountType: "store_user",
|
||
businessUserId: 101,
|
||
scenicScopes: [
|
||
BusinessScope(id: 88, name: "东门景区", kind: .scenic)
|
||
],
|
||
storeScopes: [
|
||
BusinessScope(id: 66, name: "东门门店", kind: .store)
|
||
],
|
||
currentScenicId: 88,
|
||
currentStoreId: 66
|
||
)
|
||
|
||
store.save(snapshot)
|
||
|
||
XCTAssertEqual(store.load(), snapshot)
|
||
}
|
||
|
||
/// 创建独立 UserDefaults,避免测试污染真实 App 偏好。
|
||
private func makeIsolatedDefaults() -> UserDefaults {
|
||
let suiteName = "suixinkan.tests.\(UUID().uuidString)"
|
||
let defaults = UserDefaults(suiteName: suiteName)!
|
||
defaults.removePersistentDomain(forName: suiteName)
|
||
return defaults
|
||
}
|
||
}
|