4c929d8b8b
Retain the external target app for menu-bar paste and polish context, retry failed middle ASR chunks once, and stop false-positive path/number violations.
60 lines
2.1 KiB
Swift
60 lines
2.1 KiB
Swift
// SpeechHistoryDayDeletionTests.swift
|
|
// OSGKeyboardTests
|
|
//
|
|
// Day-boundary and tombstone coverage for History's delete-day action.
|
|
|
|
import XCTest
|
|
@testable import OSGKeyboardShared
|
|
|
|
@MainActor
|
|
final class SpeechHistoryDayDeletionTests: XCTestCase {
|
|
|
|
func testDeleteEntriesRemovesOnlySelectedLocalDayAndRecordsTombstones() {
|
|
let suiteName = "group.com.osgkeyboard.shared.tests.delete-day.\(UUID().uuidString)"
|
|
let defaults = UserDefaults(suiteName: suiteName)!
|
|
defaults.removePersistentDomain(forName: suiteName)
|
|
defer { defaults.removePersistentDomain(forName: suiteName) }
|
|
|
|
let calendar = Calendar.current
|
|
let selectedDay = Date(timeIntervalSince1970: 1_752_163_200)
|
|
let start = calendar.startOfDay(for: selectedDay)
|
|
let end = calendar.date(byAdding: .day, value: 1, to: start)!
|
|
|
|
let previous = SpeechHistoryEntry(
|
|
text: "previous",
|
|
createdAt: start.addingTimeInterval(-1)
|
|
)
|
|
let firstSelected = SpeechHistoryEntry(
|
|
text: "first selected",
|
|
createdAt: start.addingTimeInterval(1)
|
|
)
|
|
let lastSelected = SpeechHistoryEntry(
|
|
text: "last selected",
|
|
createdAt: end.addingTimeInterval(-1)
|
|
)
|
|
let next = SpeechHistoryEntry(
|
|
text: "next",
|
|
createdAt: end
|
|
)
|
|
SpeechHistoryStorage.save(
|
|
SyncedSpeechHistory(
|
|
entries: [next, lastSelected, firstSelected, previous]
|
|
),
|
|
to: defaults
|
|
)
|
|
let store = SpeechHistoryStore(defaults: defaults)
|
|
|
|
store.deleteEntries(on: selectedDay)
|
|
|
|
let persisted = SpeechHistoryStorage.load(from: defaults)
|
|
XCTAssertEqual(
|
|
Set(persisted.entries.map(\.id)),
|
|
Set([previous.id, next.id])
|
|
)
|
|
XCTAssertNotNil(persisted.deletedEntryIDs[firstSelected.id])
|
|
XCTAssertNotNil(persisted.deletedEntryIDs[lastSelected.id])
|
|
XCTAssertNil(persisted.deletedEntryIDs[previous.id])
|
|
XCTAssertNil(persisted.deletedEntryIDs[next.id])
|
|
}
|
|
}
|