SyncCredentialsStoreTest.swift 81 lignes · 2443 octets
import XCTest
@testable import Card2vcf

final class SyncCredentialsStoreTest: XCTestCase {
    private var store: SyncCredentialsStore!

    override func setUp() {
        super.setUp()
        // Keychain is not reliably available in the test environment: back the
        // store with the injected in-memory storage (same public semantics).
        store = SyncCredentialsStore(storage: InMemoryCredentialsStorage())
    }

    override func tearDown() {
        store.clear()
        super.tearDown()
    }

    func testInitiallyNotConfigured() {
        XCTAssertFalse(store.isConfigured())
        XCTAssertNil(store.baseUrl)
        XCTAssertNil(store.apiKey)
        XCTAssertNil(store.userName)
    }

    func testSaveRoundTrip() {
        store.save(
            baseUrl: "https://api.example.com",
            apiKey: "secret-bearer-token",
            userName: "alice"
        )

        XCTAssertTrue(store.isConfigured())
        XCTAssertEqual("https://api.example.com", store.baseUrl)
        XCTAssertEqual("secret-bearer-token", store.apiKey)
        XCTAssertEqual("alice", store.userName)
    }

    func testPropertySettersRoundTrip() {
        store.baseUrl = "https://sync.test"
        store.apiKey = "key-123"
        store.userName = "bob"

        XCTAssertTrue(store.isConfigured())
        XCTAssertEqual("https://sync.test", store.baseUrl)
        XCTAssertEqual("key-123", store.apiKey)
        XCTAssertEqual("bob", store.userName)
    }

    func testClearRemovesAllCredentials() {
        store.save(
            baseUrl: "https://api.example.com",
            apiKey: "secret-bearer-token",
            userName: "alice"
        )
        store.allowCleartextHttp = true

        store.clear()

        XCTAssertFalse(store.isConfigured())
        XCTAssertNil(store.baseUrl)
        XCTAssertNil(store.apiKey)
        XCTAssertNil(store.userName)
        XCTAssertTrue(store.allowCleartextHttp)
    }

    func testAllowCleartextHttp_defaultsFalse_andRoundTrips() {
        XCTAssertFalse(store.allowCleartextHttp)
        store.allowCleartextHttp = true
        XCTAssertTrue(store.allowCleartextHttp)
        store.allowCleartextHttp = false
        XCTAssertFalse(store.allowCleartextHttp)
    }

    func testBlankValuesAreNotConfigured() {
        store.save(baseUrl: " ", apiKey: "key", userName: "alice")

        XCTAssertFalse(store.isConfigured())
        XCTAssertNil(store.baseUrl)
    }
}