Initial commit
This commit is contained in:
80
suixinkanTests/HomeCommonMenuStoreTests.swift
Normal file
80
suixinkanTests/HomeCommonMenuStoreTests.swift
Normal file
@ -0,0 +1,80 @@
|
||||
//
|
||||
// HomeCommonMenuStoreTests.swift
|
||||
// suixinkanTests
|
||||
//
|
||||
// Created by Codex on 2026/6/22.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
@testable import suixinkan
|
||||
|
||||
/// 首页常用应用存储测试,覆盖默认值、过滤和别名去重。
|
||||
final class HomeCommonMenuStoreTests: XCTestCase {
|
||||
/// 测试首次无配置时会生成默认常用应用。
|
||||
func testLoadCreatesDefaultCommonMenusWhenBaselineIsMissing() {
|
||||
let defaults = makeIsolatedDefaults()
|
||||
let store = HomeCommonMenuStore(defaults: defaults)
|
||||
let menus = [
|
||||
menu("registration_invitation"),
|
||||
menu("location_report"),
|
||||
menu("pm_manager")
|
||||
]
|
||||
|
||||
let uris = store.load(menuItems: menus)
|
||||
|
||||
XCTAssertEqual(uris, ["registration_invitation", "location_report", "pm_manager"])
|
||||
XCTAssertTrue(defaults.bool(forKey: HomeCommonMenuStore.defaultBaselineKey))
|
||||
}
|
||||
|
||||
/// 测试已保存 URI 会按当前权限过滤并解析同义 URI。
|
||||
func testLoadFiltersSavedUrisByCurrentPermissions() {
|
||||
let defaults = makeIsolatedDefaults()
|
||||
defaults.set(true, forKey: HomeCommonMenuStore.defaultBaselineKey)
|
||||
defaults.set(["task_management", "unknown", "pm"], forKey: HomeCommonMenuStore.defaultStorageKey)
|
||||
let store = HomeCommonMenuStore(defaults: defaults)
|
||||
let menus = [
|
||||
menu("task_management_editor"),
|
||||
menu("pm_manager")
|
||||
]
|
||||
|
||||
let uris = store.load(menuItems: menus)
|
||||
|
||||
XCTAssertEqual(uris, ["task_management_editor", "pm_manager"])
|
||||
}
|
||||
|
||||
/// 测试添加常用应用时会按同义 URI 去重。
|
||||
func testAddDeduplicatesAliases() {
|
||||
let defaults = makeIsolatedDefaults()
|
||||
let store = HomeCommonMenuStore(defaults: defaults)
|
||||
let menus = [
|
||||
menu("task_management_editor")
|
||||
]
|
||||
|
||||
let uris = store.add("task_management", current: ["task_management_editor"], menuItems: menus)
|
||||
|
||||
XCTAssertEqual(uris, ["task_management_editor"])
|
||||
}
|
||||
|
||||
/// 测试移除常用应用时会移除同义 URI。
|
||||
func testRemoveDeletesAliases() {
|
||||
let defaults = makeIsolatedDefaults()
|
||||
let store = HomeCommonMenuStore(defaults: defaults)
|
||||
|
||||
let uris = store.remove("pm", current: ["pm_manager", "location_report"])
|
||||
|
||||
XCTAssertEqual(uris, ["location_report"])
|
||||
}
|
||||
|
||||
/// 创建测试菜单实体。
|
||||
private func menu(_ uri: String) -> HomeMenuItem {
|
||||
HomeMenuItem(title: HomeMenuRouter.title(for: uri), uri: uri, iconSrc: nil)
|
||||
}
|
||||
|
||||
/// 创建独立 UserDefaults,避免测试污染真实 App 偏好。
|
||||
private func makeIsolatedDefaults() -> UserDefaults {
|
||||
let suiteName = "suixinkan.home.tests.\(UUID().uuidString)"
|
||||
let defaults = UserDefaults(suiteName: suiteName)!
|
||||
defaults.removePersistentDomain(forName: suiteName)
|
||||
return defaults
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user