ServerUrlPolicyTest.swift 59 lignes · 2401 octets
import XCTest
@testable import Card2vcf

/// TDD (Android) : HTTPS required unless the « autoriser HTTP clair » option is on.
final class ServerUrlPolicyTest: XCTestCase {
    func testHttpsUrlIsAllowedByDefault() {
        XCTAssertNil(ServerUrlPolicy.validate("https://api.example.com", allowCleartext: false))
        XCTAssertNil(ServerUrlPolicy.validate("HTTPS://API.EXAMPLE.COM/v1", allowCleartext: false))
    }

    func testHttpUrlRejectedWhenCleartextDisallowed() {
        let err = ServerUrlPolicy.validate("http://192.168.1.10:3000", allowCleartext: false)
        XCTAssertEqual(ServerUrlPolicy.ERROR_HTTPS_REQUIRED, err)
    }

    func testHttpUrlAllowedWhenCleartextEnabled() {
        XCTAssertNil(ServerUrlPolicy.validate("http://192.168.1.10:3000", allowCleartext: true))
        XCTAssertNil(ServerUrlPolicy.validate("http://localhost:3000", allowCleartext: true))
    }

    func testBlankOrMissingSchemeRejected() {
        XCTAssertEqual(ServerUrlPolicy.ERROR_INVALID_URL, ServerUrlPolicy.validate(" ", allowCleartext: true))
        XCTAssertEqual(
            ServerUrlPolicy.ERROR_INVALID_URL,
            ServerUrlPolicy.validate("api.example.com", allowCleartext: false)
        )
        XCTAssertEqual(
            ServerUrlPolicy.ERROR_INVALID_URL,
            ServerUrlPolicy.validate("ftp://api.example.com", allowCleartext: true)
        )
    }

    func testIsHttpsHelper() {
        XCTAssertTrue(ServerUrlPolicy.isHttps("https://x"))
        XCTAssertFalse(ServerUrlPolicy.isHttps("http://x"))
        XCTAssertFalse(ServerUrlPolicy.isHttps("x"))
    }

    func testLanHttpsWithoutPortRejected() {
        let err = ServerUrlPolicy.validate("https://192.168.1.35", allowCleartext: false)
        XCTAssertEqual(ServerUrlPolicy.ERROR_LAN_HTTPS_NO_PORT, err)
    }

    func testLanHttpWithoutPortRejectedEvenWhenCleartext() {
        let err = ServerUrlPolicy.validate("http://192.168.1.35", allowCleartext: true)
        XCTAssertEqual(ServerUrlPolicy.ERROR_LAN_HTTP_NO_PORT, err)
    }

    func testNormalizeBaseUrlStripsVersionPath() {
        XCTAssertEqual(
            "http://192.168.1.35:3000",
            ServerUrlPolicy.normalizeBaseUrl("http://192.168.1.35:3000/version/")
        )
    }

    func testPublicHttpsWithoutPortStillAllowed() {
        XCTAssertNil(ServerUrlPolicy.validate("https://api.example.com", allowCleartext: false))
    }
}