// SPDX-FileCopyrightText: 2026 Kaede Akino // SPDX-License-Identifier: GPL-3.0-only import Foundation import SwiftData import TermindDomain import TermindPersistence import Testing @Suite @MainActor struct SSHAgentForwardingPersistenceTests { @Test func version43HostMigratesDisabledAndNewSettingSurvivesReopen() throws { let root = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString) try FileManager.default.createDirectory(at: root, withIntermediateDirectories: true) defer { try? FileManager.default.removeItem(at: root) } let url = root.appendingPathComponent("Migration.store") let host = TermindDomain.Host(name: "Existing", host: "localhost", startupSnippetID: UUID()) do { let schema = Schema(versionedSchema: TermindSchemaV43.self) let container = try ModelContainer( for: schema, configurations: [ ModelConfiguration("Termind", schema: schema, url: url, cloudKitDatabase: .none) ]) container.mainContext.insert(TermindSchemaV32HostModels.PersistentHost(host)) try container.mainContext.save() } do { let container = try TermindPersistence.makeContainer(url: url) let record = try #require(container.mainContext.fetch(FetchDescriptor()).first) #expect(!record.agentForwardingEnabled) #expect(record.value.startupSnippetID == host.startupSnippetID) record.agentForwardingEnabled = true try container.mainContext.save() } let reopened = try TermindPersistence.makeContainer(url: url) #expect( try reopened.mainContext.fetch(FetchDescriptor()).first?.value.agentForwardingEnabled == true) } @Test func hostVersionTwoRoundTripsAndCannotBeWrittenAsVersionOne() throws { let host = TermindDomain.Host( name: "Forwarded", host: "localhost", agentForwardingEnabled: true, sessionPersistence: .init(enabled: false)) let payload = VaultRecordPayload.host(host) var envelope = VaultEnvelope(key: payload.key, version: .baseline(writerID: UUID()), payload: payload) envelope.formatVersion = 2 #expect(try VaultSyncCodec.decode(VaultSyncCodec.encode(envelope)) == envelope) envelope.formatVersion = 1 #expect(throws: (any Error).self) { try VaultSyncCodec.encode(envelope) } #expect(SyncRecordFormats.vault.writingVersion(for: "sshKey") == 3) #expect(SyncRecordFormats.vault.supports(kind: "host", version: 1)) } }