import XCTest @testable import MultiSimAdmin final class InstanceSessionServiceTests: XCTestCase { func testLoginStoresAndClearsSessionCookie() async throws { let store = InstanceSessionStore() let client = MockSessionClient(status: 204) let service = InstanceSessionService(store: store, client: client) let instance = Self.instance() let result = try await service.login(instance, password: "secret") XCTAssertTrue(result.authenticated) let cookie = await store.cookie(for: instance.id, origin: instance.endpoint.directOrigin!) XCTAssertEqual(cookie, "simadmin_session=token") let rejected = try await service.login(instance, password: "bad") XCTAssertFalse(rejected.authenticated) let removed = await store.cookie(for: instance.id, origin: instance.endpoint.directOrigin!) XCTAssertEqual(removed, nil) } private static func instance() -> Instance { Instance( id: UUID(), name: "Session", origin: URL(string: "http://192.168.1.20:3000")!, configRevision: 1, createdAt: Date(), updatedAt: Date() ) } private struct MockSessionClient: SimAdminClientProtocol { let status: Int func send( _ route: UpstreamRoute, baseURL: URL, cookie: String? ) async throws -> UpstreamResponse { guard case let .authLogin(submitted) = route else { return UpstreamResponse(status: 200, data: Data("{}.utf8".utf8), setCookie: nil) } let authorized = submitted == "secret" let setCookie = authorized ? "simadmin_session=token; Path=/" : nil return UpstreamResponse(status: authorized ? status : 200, data: Data("{}".utf8), setCookie: setCookie) } } }