import Foundation import Testing @testable import Clawdbot @testable import ClawdbotIPC private final class FakeWebSocketTask: WebSocketTasking, @unchecked Sendable { var state: URLSessionTask.State = .running func resume() {} func cancel(with _: URLSessionWebSocketTask.CloseCode, reason _: Data?) { self.state = .canceling } func send(_: URLSessionWebSocketTask.Message) async throws {} func receive() async throws -> URLSessionWebSocketTask.Message { throw URLError(.cannotConnectToHost) } func receive(completionHandler: @escaping @Sendable (Result) -> Void) { completionHandler(.failure(URLError(.cannotConnectToHost))) } } private final class FakeWebSocketSession: WebSocketSessioning, @unchecked Sendable { func makeWebSocketTask(url _: URL) -> WebSocketTaskBox { WebSocketTaskBox(task: FakeWebSocketTask()) } } private func makeTestGatewayConnection() -> GatewayConnection { GatewayConnection( configProvider: { (url: URL(string: "ws://127.0.0.1:1")!, token: nil, password: nil) }, sessionBox: WebSocketSessionBox(session: FakeWebSocketSession())) } @Suite(.serialized) struct GatewayConnectionControlTests { @Test func statusFailsWhenProcessMissing() async { let connection = makeTestGatewayConnection() let result = await connection.status() #expect(result.ok == false) #expect(result.error != nil) } @Test func rejectEmptyMessage() async { let connection = makeTestGatewayConnection() let result = await connection.sendAgent( message: "", thinking: nil, sessionKey: "main", deliver: false, to: nil) #expect(result.ok == false) } }