import XCTest
@testable import PoseReview

final class SessionAnalysisWorkerTests: XCTestCase {
    func testFailureAndTimeoutStayOutsideApp() throws {
        let folder = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString)
        try FileManager.default.createDirectory(at: folder, withIntermediateDirectories: true)
        defer { try? FileManager.default.removeItem(at: folder) }
        let helper = folder.appendingPathComponent("helper")
        try "#!/bin/sh\nexit 7\n".write(to: helper, atomically: true, encoding: .utf8)
        try FileManager.default.setAttributes([.posixPermissions: 0o700], ofItemAtPath: helper.path)
        XCTAssertThrowsError(try SessionAnalysisWorker.run(manifest: folder.appendingPathComponent("session.json"), output: folder.appendingPathComponent("failed"), helper: helper))
        try "#!/bin/sh\nexec /bin/sleep 20\n".write(to: helper, atomically: true, encoding: .utf8)
        let start = Date()
        XCTAssertThrowsError(try SessionAnalysisWorker.run(manifest: folder.appendingPathComponent("session.json"), output: folder.appendingPathComponent("timeout"), helper: helper, timeout: 0.1))
        XCTAssertLessThan(Date().timeIntervalSince(start), 5)
    }
}
