Files
Moltbot/apps/ios/Tests/NodeAppModelNotifyTests.swift
2026-01-31 02:28:48 +01:00

67 lines
2.1 KiB
Swift

import OpenClawKit
import Foundation
import Testing
import UserNotifications
@testable import OpenClaw
actor TestNotificationCenter: NotificationCentering {
private var status: NotificationAuthorizationStatus
private let requestResult: Bool
private var requestedAuthorization: Bool = false
private var storedRequests: [UNNotificationRequest] = []
init(status: NotificationAuthorizationStatus, requestResult: Bool) {
self.status = status
self.requestResult = requestResult
}
func authorizationStatus() async -> NotificationAuthorizationStatus {
status
}
func requestAuthorization(options _: UNAuthorizationOptions) async throws -> Bool {
self.requestedAuthorization = true
if self.requestResult {
self.status = .authorized
}
return self.requestResult
}
func add(_ request: UNNotificationRequest) async throws {
self.storedRequests.append(request)
}
func didRequestAuthorization() async -> Bool {
requestedAuthorization
}
func requests() async -> [UNNotificationRequest] {
storedRequests
}
}
@Suite(.serialized) struct NodeAppModelNotifyTests {
@Test @MainActor func handleSystemNotifyRequestsPermissionAndAddsNotification() async throws {
let center = TestNotificationCenter(status: .notDetermined, requestResult: true)
let appModel = NodeAppModel(notificationCenter: center)
let params = OpenClawSystemNotifyParams(title: "Hello", body: "World")
let data = try JSONEncoder().encode(params)
let json = String(decoding: data, as: UTF8.self)
let req = BridgeInvokeRequest(
id: "notify",
command: OpenClawSystemCommand.notify.rawValue,
paramsJSON: json)
let res = await appModel._test_handleInvoke(req)
#expect(res.ok == true)
#expect(await center.didRequestAuthorization() == true)
let requests = await center.requests()
#expect(requests.count == 1)
#expect(requests.first?.content.title == "Hello")
#expect(requests.first?.content.body == "World")
}
}