//
//  swiftGopherServerTests.swift
//
//
//  Created by Navan Chauhan on 7/28/24.
//

import ArgumentParser
import NIO
import XCTest

@testable import swift_gopher

final class SwiftGopherTests: XCTestCase {

    func testDefaultValues() throws {
        let gopher = try swiftGopher.parse([])

        XCTAssertEqual(gopher.gopherHostName, "localhost")
        XCTAssertEqual(gopher.host, "0.0.0.0")
        XCTAssertEqual(gopher.port, 8080)
        XCTAssertEqual(gopher.gopherDataDir, "./example-gopherdata")
        XCTAssertFalse(gopher.disableSearch)
        XCTAssertFalse(gopher.disableGophermap)
    }

    func testCustomValues() throws {
        let args = [
            "--gopher-host-name", "example.com",
            "--host", "127.0.0.1",
            "--port", "9090",
            "--gopher-data-dir", "/custom/path",
            "--disable-search",
            "--disable-gophermap",
        ]

        let gopher = try swiftGopher.parse(args)

        XCTAssertEqual(gopher.gopherHostName, "example.com")
        XCTAssertEqual(gopher.host, "127.0.0.1")
        XCTAssertEqual(gopher.port, 9090)
        XCTAssertEqual(gopher.gopherDataDir, "/custom/path")
        XCTAssertTrue(gopher.disableSearch)
        XCTAssertTrue(gopher.disableGophermap)
    }

    func testShortOptions() throws {
        let args = [
            "-g", "short.com",
            "-h", "192.168.1.1",
            "-p", "7070",
            "-d", "/short/path",
        ]

        let gopher = try swiftGopher.parse(args)

        XCTAssertEqual(gopher.gopherHostName, "short.com")
        XCTAssertEqual(gopher.host, "192.168.1.1")
        XCTAssertEqual(gopher.port, 7070)
        XCTAssertEqual(gopher.gopherDataDir, "/short/path")
    }

}