Files
Termind/TFMTests/TerminalUploadModelTests.swift
T
Kaede Akino 82d871c4fe refactor: separate feature policies and UI workflows
Move connection policy out of ProAccess, keep terminal uploads with their
session, and share question interaction and highlight editing operations.
Consolidate CPU usage and settings snapshot handling, and remove obsolete
terminal selection, theme helpers, and hard-coded latest-schema assertions.

Fix draining connection-pool recovery and stale pane upload bindings. Keep
screenshot matrices opt-in and retain behavioral migration coverage.

Validation: 2468 macOS tests passed serially, 31 iOS tests passed, and both
SSH forwarding regressions passed against the local OpenSSH fixture.
Both app builds, Swift formatting, AppStrings, and Chinese localization
checks passed. Parallel test runs still exhibit intermittent timeouts.
2026-10-02 16:40:27 +08:00

55 lines
2.3 KiB
Swift

import Foundation
import TermindApplication
import TermindRemoteInfrastructure
import Testing
@testable import Termind
@Suite @MainActor
struct TerminalUploadModelTests {
@Test func remountingKeepsUploadStateWithTheSessionAndDisconnectClearsIt() {
let session = SSHSessionModel(hostID: UUID(), title: "Upload")
let uploads = session.terminalUpload
let connections = RemoteConnectionCoordinator()
let transfers = SFTPTransferCoordinator(store: HostLibraryModel()) {
Issue.record("Rejected upload must not open a transfer client")
return connections.makeSFTPClient()
}
#expect(
!uploads.receiveRemoteDrop(
Data("invalid".utf8), connections: connections, transfers: transfers))
#expect(uploads.notice != nil)
let oldBinding = session.terminalViewOwner.bindUpload(action: {}, isAvailable: { false })
let newBinding = session.terminalViewOwner.bindUpload(action: {}, isAvailable: { false })
#expect(!session.terminalViewOwner.unbindUpload(oldBinding))
#expect(session.terminalUpload === uploads)
#expect(uploads.notice != nil)
#expect(session.terminalViewOwner.unbindUpload(newBinding))
#expect(uploads.notice != nil)
session.disconnect()
#expect(uploads.notice == nil)
#expect(!uploads.hasConflict)
#expect(transfers.sftpTransfers.isEmpty)
}
@Test func retiredPickerTargetCannotStartAnotherSessionUpload() {
let session = SSHSessionModel(hostID: UUID(), title: "Upload")
let uploads = session.terminalUpload
let connections = RemoteConnectionCoordinator()
let transfers = SFTPTransferCoordinator(store: HostLibraryModel()) {
Issue.record("Retired picker must not open a transfer client")
return connections.makeSFTPClient()
}
let target = TerminalUploadModel.Target(generation: UUID(), destination: "/old-session")
let accepted = uploads.receiveFiles(
[URL(filePath: "/tmp/retired-upload")], selectedTarget: target,
connections: connections, transfers: transfers)
#expect(!accepted)
#expect(uploads.notice == nil)
#expect(!uploads.hasConflict)
#expect(transfers.sftpTransfers.isEmpty)
}
}