Files
OSGKeyboard/OSGKeyboardTests/EditTransactionStoreTests.swift
Rocky 498f407585 feat(account): add managed credits and cloud gateway
Introduce optional Apple account-backed credits with scoped gateway access while preserving local and BYOK paths. Refresh assistant behavior, tests, privacy disclosures, docs, and the website for the 2.0 experience.
2026-08-20 11:43:21 +08:00

83 lines
2.9 KiB
Swift

@testable import OSGKeyboardShared
import XCTest
final class EditTransactionStoreTests: XCTestCase {
func testHistoryMutationOutboxIsOrderedAndIdempotent() throws {
let suite = "EditTransactionStoreTests.\(UUID().uuidString)"
let defaults = try XCTUnwrap(UserDefaults(suiteName: suite))
defer { defaults.removePersistentDomain(forName: suite) }
let entryID = UUID()
let later = HistoryMutation(
sequence: 2,
action: .update,
entryID: entryID,
text: "later"
)
let earlier = HistoryMutation(
sequence: 1,
action: .update,
entryID: entryID,
text: "earlier"
)
HistoryMutationOutbox.enqueue(later, defaults: defaults)
HistoryMutationOutbox.enqueue(earlier, defaults: defaults)
HistoryMutationOutbox.enqueue(earlier, defaults: defaults)
XCTAssertEqual(
HistoryMutationOutbox.pending(defaults: defaults).map(\.id),
[earlier.id, later.id]
)
HistoryMutationOutbox.acknowledge(earlier.id, defaults: defaults)
XCTAssertEqual(
HistoryMutationOutbox.pending(defaults: defaults).map(\.id),
[later.id]
)
}
func testPendingTransactionRoundTrip() throws {
let suite = "PendingTextEditTransactionTests.\(UUID().uuidString)"
let defaults = try XCTUnwrap(UserDefaults(suiteName: suite))
defer { defaults.removePersistentDomain(forName: suite) }
let mutation = HistoryMutation(
action: .update,
entryID: UUID(),
expectedRevision: 3,
text: "after"
)
let transaction = PendingTextEditTransaction(
deliveryMode: .replace,
beforeText: "before",
afterText: "after",
expectedFieldFingerprint: "field",
historyMutation: mutation
)
PendingTextEditTransactionStore.save(transaction, defaults: defaults)
XCTAssertEqual(
PendingTextEditTransactionStore.load(defaults: defaults),
transaction
)
PendingTextEditTransactionStore.clear(defaults: defaults)
XCTAssertNil(PendingTextEditTransactionStore.load(defaults: defaults))
}
func testHistoryMutationReceiptRoundTrip() throws {
let suite = "HistoryMutationReceiptTests.\(UUID().uuidString)"
let defaults = try XCTUnwrap(UserDefaults(suiteName: suite))
defer { defaults.removePersistentDomain(forName: suite) }
let receipt = HistoryMutationReceipt(
mutationID: UUID(),
entryID: UUID(),
revision: 4
)
HistoryMutationReceiptStore.save(receipt, defaults: defaults)
XCTAssertEqual(
HistoryMutationReceiptStore.receipt(
for: receipt.mutationID,
defaults: defaults
),
receipt
)
}
}