@testable import BrewBar import XCTest final class BrewParserTests: XCTestCase { // MARK: - parseOutdatedJSON func testParseOutdatedJSON_formulaeAndCasks() { let output = """ { "formulae": [ { "name": "wget", "installed_versions": ["1.21.3"], "current_version": "1.21.4", "pinned": false, "pinned_version": null } ], "casks": [ { "name": "tailscale-app", "installed_versions": ["1.98.5"], "current_version": "1.98.8", "pinned": false, "pinned_version": null } ] } """ let result = BrewParser.parseOutdatedJSON(output) XCTAssertEqual(result.formulae.map(\.name), ["wget"]) XCTAssertEqual(result.casks.map(\.name), ["tailscale-app"]) XCTAssertEqual(result.count, 2) XCTAssertFalse(result.isEmpty) XCTAssertEqual(result.all.map(\.name), ["wget", "tailscale-app"]) } func testParseOutdatedJSON_nothingOutdated() { let result = BrewParser.parseOutdatedJSON("{\"formulae\": [], \"casks\": []}") XCTAssertTrue(result.isEmpty) XCTAssertEqual(result.count, 0) } func testParseOutdatedJSON_invalidInputReturnsNone() { XCTAssertEqual(BrewParser.parseOutdatedJSON(""), .none) XCTAssertEqual(BrewParser.parseOutdatedJSON("Error: some brew failure"), .none) } func testParseOutdatedJSON_packageLabel() { let package = OutdatedPackage(name: "wget", installedVersions: ["1.21.3"], currentVersion: "1.21.4") XCTAssertEqual(package.label, "wget 1.21.3 → 1.21.4") } // MARK: - parseVersion func testParseVersion_picksFirstLine() { let output = "Homebrew 4.3.0\nHomebrew/homebrew-core (git revision abc123)\n" XCTAssertEqual(BrewParser.parseVersion(output), "Homebrew 4.3.0") } func testParseVersion_emptyOutput() { XCTAssertEqual(BrewParser.parseVersion(""), "Unknown") } func testParseVersion_singleLine() { XCTAssertEqual(BrewParser.parseVersion("Homebrew 4.3.0"), "Homebrew 4.3.0") } }