Files
CleanMM/Packages/AtlasApplication/Tests/AtlasApplicationTests/AtlasApplicationTests.swift

178 lines
7.6 KiB
Swift
Raw Normal View History

2026-03-10 17:09:35 +08:00
import XCTest
@testable import AtlasApplication
import AtlasDomain
import AtlasProtocol
final class AtlasApplicationTests: XCTestCase {
func testStartScanUsesWorkerEventsToBuildProgressAndSummary() async throws {
let taskID = UUID(uuidString: "20000000-0000-0000-0000-000000000001") ?? UUID()
let request = AtlasRequestEnvelope(command: .startScan(taskID: taskID))
let finishedRun = TaskRun(
id: taskID,
kind: .scan,
status: .completed,
summary: "Scanned 4 finding groups and prepared a Smart Clean preview.",
startedAt: request.issuedAt,
finishedAt: Date()
)
let result = AtlasWorkerCommandResult(
request: request,
response: AtlasResponseEnvelope(
requestID: request.id,
response: .accepted(task: AtlasTaskDescriptor(taskID: taskID, kind: .scan))
),
events: [
AtlasEventEnvelope(event: .taskProgress(taskID: taskID, completed: 1, total: 4)),
AtlasEventEnvelope(event: .taskProgress(taskID: taskID, completed: 4, total: 4)),
AtlasEventEnvelope(event: .taskFinished(finishedRun)),
],
snapshot: AtlasScaffoldWorkspace.snapshot(),
previewPlan: AtlasScaffoldWorkspace.state().currentPlan
)
let controller = AtlasWorkspaceController(worker: FakeWorker(result: result))
let output = try await controller.startScan(taskID: taskID)
XCTAssertEqual(output.progressFraction, 1)
XCTAssertEqual(output.summary, finishedRun.summary)
XCTAssertEqual(output.actionPlan?.items.count, AtlasScaffoldWorkspace.state().currentPlan.items.count)
XCTAssertEqual(output.snapshot.findings.count, AtlasScaffoldWorkspace.snapshot().findings.count)
}
func testPreviewPlanReturnsStructuredPlanFromWorkerResponse() async throws {
let plan = AtlasScaffoldWorkspace.state().currentPlan
let request = AtlasRequestEnvelope(command: .previewPlan(taskID: UUID(), findingIDs: AtlasScaffoldFixtures.findings.map(\.id)))
let result = AtlasWorkerCommandResult(
request: request,
response: AtlasResponseEnvelope(requestID: request.id, response: .preview(plan)),
events: [],
snapshot: AtlasScaffoldWorkspace.snapshot(),
previewPlan: plan
)
let controller = AtlasWorkspaceController(worker: FakeWorker(result: result))
let output = try await controller.previewPlan(findingIDs: AtlasScaffoldFixtures.findings.map(\.id))
XCTAssertEqual(output.actionPlan.title, plan.title)
XCTAssertEqual(output.actionPlan.estimatedBytes, plan.estimatedBytes)
}
func testExecutePlanUsesWorkerEventsToBuildSummary() async throws {
let plan = AtlasScaffoldWorkspace.state().currentPlan
let taskID = UUID(uuidString: "20000000-0000-0000-0000-000000000002") ?? UUID()
let request = AtlasRequestEnvelope(command: .executePlan(planID: plan.id))
let finishedRun = TaskRun(
id: taskID,
kind: .executePlan,
status: .completed,
summary: "Moved 2 Smart Clean items into recovery.",
startedAt: request.issuedAt,
finishedAt: Date()
)
let result = AtlasWorkerCommandResult(
request: request,
response: AtlasResponseEnvelope(
requestID: request.id,
response: .accepted(task: AtlasTaskDescriptor(taskID: taskID, kind: .executePlan))
),
events: [
AtlasEventEnvelope(event: .taskProgress(taskID: taskID, completed: 1, total: 3)),
AtlasEventEnvelope(event: .taskProgress(taskID: taskID, completed: 3, total: 3)),
AtlasEventEnvelope(event: .taskFinished(finishedRun)),
],
snapshot: AtlasScaffoldWorkspace.snapshot(),
previewPlan: nil
)
let controller = AtlasWorkspaceController(worker: FakeWorker(result: result))
let output = try await controller.executePlan(planID: plan.id)
XCTAssertEqual(output.progressFraction, 1)
XCTAssertEqual(output.summary, finishedRun.summary)
}
func testListAppsReturnsStructuredAppFootprints() async throws {
let apps = AtlasScaffoldFixtures.apps
let request = AtlasRequestEnvelope(command: .appsList)
let result = AtlasWorkerCommandResult(
request: request,
response: AtlasResponseEnvelope(requestID: request.id, response: .apps(apps)),
events: [],
snapshot: AtlasScaffoldWorkspace.snapshot(),
previewPlan: nil
)
let controller = AtlasWorkspaceController(worker: FakeWorker(result: result))
let output = try await controller.listApps()
XCTAssertEqual(output.apps.count, apps.count)
XCTAssertEqual(output.snapshot.apps.count, apps.count)
}
func testSettingsUpdateReturnsStructuredSettings() async throws {
var updated = AtlasScaffoldFixtures.settings
updated.recoveryRetentionDays = 14
let request = AtlasRequestEnvelope(command: .settingsSet(updated))
let result = AtlasWorkerCommandResult(
request: request,
response: AtlasResponseEnvelope(requestID: request.id, response: .settings(updated)),
events: [],
snapshot: AtlasScaffoldWorkspace.snapshot(),
previewPlan: nil
)
let controller = AtlasWorkspaceController(worker: FakeWorker(result: result))
let output = try await controller.updateSettings(updated)
XCTAssertEqual(output.settings.recoveryRetentionDays, 14)
}
func testHealthSnapshotReturnsStructuredOverviewData() async throws {
let healthSnapshot = AtlasScaffoldFixtures.healthSnapshot
let request = AtlasRequestEnvelope(command: .healthSnapshot)
let result = AtlasWorkerCommandResult(
request: request,
response: AtlasResponseEnvelope(requestID: request.id, response: .health(healthSnapshot)),
events: [],
snapshot: AtlasScaffoldWorkspace.snapshot(),
previewPlan: nil
)
let controller = AtlasWorkspaceController(worker: FakeWorker(result: result))
let output = try await controller.healthSnapshot()
XCTAssertEqual(output.healthSnapshot.optimizations.count, healthSnapshot.optimizations.count)
XCTAssertEqual(output.healthSnapshot.diskUsedPercent, healthSnapshot.diskUsedPercent)
}
func testInspectPermissionsPropagatesUpdatedSnapshot() async throws {
let permissions = AtlasScaffoldFixtures.permissions
let request = AtlasRequestEnvelope(command: .inspectPermissions)
let result = AtlasWorkerCommandResult(
request: request,
response: AtlasResponseEnvelope(requestID: request.id, response: .permissions(permissions)),
events: permissions.map { AtlasEventEnvelope(event: .permissionUpdated($0)) },
snapshot: AtlasScaffoldWorkspace.snapshot(),
previewPlan: nil
)
let controller = AtlasWorkspaceController(worker: FakeWorker(result: result))
let output = try await controller.inspectPermissions()
XCTAssertEqual(output.snapshot.permissions.count, permissions.count)
XCTAssertEqual(output.events.count, permissions.count)
}
}
private actor FakeWorker: AtlasWorkerServing {
let result: AtlasWorkerCommandResult
init(result: AtlasWorkerCommandResult) {
self.result = result
}
func submit(_ request: AtlasRequestEnvelope) async throws -> AtlasWorkerCommandResult {
result
}
}