Files
ggbond268--mactools/Plugins/Calendar/Tests/CalendarPluginIntegrationTests.swift
wehub-resource-sync 1d1286fadb
Build / Build and test (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:18:38 +08:00

78 lines
2.8 KiB
Swift

import SwiftUI
import XCTest
@testable import MacTools
@testable import CalendarPlugin
@MainActor
final class CalendarPluginIntegrationTests: XCTestCase {
private let suiteName = "CalendarPluginIntegrationTests"
override func tearDown() {
UserDefaults(suiteName: suiteName)?.removePersistentDomain(forName: suiteName)
super.tearDown()
}
func testCalendarPluginAppearsOnlyInComponentPanelAtFullWidth() {
let defaults = UserDefaults(suiteName: suiteName)!
defaults.removePersistentDomain(forName: suiteName)
let host = PluginHost(
plugins: [CalendarPlugin()],
shortcutStore: ShortcutStore(userDefaults: defaults),
pluginDisplayPreferencesStore: PluginDisplayPreferencesStore(userDefaults: defaults),
globalShortcutManager: GlobalShortcutManager()
)
XCTAssertTrue(host.panelItems.isEmpty)
XCTAssertEqual(host.componentItems.map(\.id), ["calendar"])
XCTAssertEqual(host.componentItems.first?.span.width, 4)
XCTAssertEqual(host.componentItems.first?.span.height, 37)
XCTAssertEqual(host.permissionCards.map(\.permissionID), ["calendar-events", "calendar-automation"])
XCTAssertEqual(host.pluginConfigurationItems.map(\.id), ["calendar"])
XCTAssertEqual(host.pluginConfigurationItems.first?.permissionCards.map(\.permissionID), [
"calendar-events",
"calendar-automation"
])
}
func testCalendarPermissionActionRequestsEventAccess() async {
let service = MockCalendarPermissionService(
authorization: .notDetermined,
requestResult: .fullAccess
)
let plugin = CalendarPlugin(eventService: service)
let stateChanged = expectation(description: "calendar permission state changed")
plugin.onStateChange = {
stateChanged.fulfill()
}
plugin.handlePermissionAction(id: "calendar-events")
await fulfillment(of: [stateChanged], timeout: 1)
XCTAssertEqual(service.requestAccessCallCount, 1)
}
}
@MainActor
private final class MockCalendarPermissionService: CalendarEventServicing {
var authorization: CalendarEventAuthorization
private let requestResult: CalendarEventAuthorization
private(set) var requestAccessCallCount = 0
init(authorization: CalendarEventAuthorization, requestResult: CalendarEventAuthorization) {
self.authorization = authorization
self.requestResult = requestResult
}
func requestAccess() async -> CalendarEventAuthorization {
requestAccessCallCount += 1
authorization = requestResult
return requestResult
}
func events(from startDate: Date, to endDate: Date) async throws -> [CalendarEventInput] {
[]
}
func openSystemCalendar(at date: Date) {}
}