Files
legado-ios/Tests/LegadoCoreTests/ReplaceRuleRepositoryTests.swift

44 lines
1.6 KiB
Swift

import Foundation
import Testing
@testable import LegadoCore
struct ReplaceRuleRepositoryTests {
@Test func decodesOrderFieldAndDefaults() throws {
let data = Data(#"{"id":9,"name":"广告","pattern":"ad","replacement":"","order":12}"#.utf8)
let rule = try #require(ReplaceRuleImporter().decode(data).first)
#expect(rule.id == 9)
#expect(rule.sortOrder == 12)
#expect(rule.scopeContent)
#expect(rule.isEnabled)
#expect(rule.isRegex)
#expect(rule.timeoutMillisecond == 3_000)
}
@Test func mergesByIdentifierAndSorts() {
var old = ReplaceRule(id: 1, name: "旧", pattern: "old")
old.sortOrder = 10
var replacement = ReplaceRule(id: 1, name: "新", pattern: "new")
replacement.sortOrder = 3
var first = ReplaceRule(id: 2, name: "先", pattern: "first")
first.sortOrder = 1
let merged = ReplaceRuleImporter().merge([replacement, first], into: [old])
#expect(merged.map(\.id) == [2, 1])
#expect(merged.last?.name == "新")
}
@Test func persistsRulesAtomically() async throws {
let directory = FileManager.default.temporaryDirectory.appending(path: UUID().uuidString, directoryHint: .isDirectory)
defer { try? FileManager.default.removeItem(at: directory) }
let repository = FileReplaceRuleRepository(fileURL: directory.appending(path: "rules.json"))
let rule = ReplaceRule(id: 3, name: "空行", pattern: "\\n{3,}", replacement: "\n\n")
try await repository.save([rule])
let restored = try await repository.load()
#expect(restored == [rule])
}
}