import 'dart:convert'; import 'dart:io'; import 'package:flutter_test/flutter_test.dart'; import 'package:taproom/brew/models.dart'; Map fixture(String name) => jsonDecode(File('test/fixtures/$name').readAsStringSync()) as Map; void main() { test('parses a formula from real brew info output', () { final p = Package.listFromInfoJson(fixture('info_jq.json')).single; expect(p.name, 'jq'); expect(p.kind, PackageKind.formula); expect(p.tap, 'homebrew/core'); expect(p.latestVersion, '1.8.2'); expect(p.dependencies, ['oniguruma']); expect(p.isInstalled, isFalse); }); test('parses a cask from real brew info output', () { final p = Package.listFromInfoJson(fixture('info_firefox.json')).single; expect(p.name, 'firefox'); expect(p.kind, PackageKind.cask); expect(p.displayName, 'Mozilla Firefox'); expect(p.tap, 'homebrew/cask'); expect(p.latestVersion, isNotNull); }); test('installed formula uses the newest install and on-request flag', () { final p = Package.fromFormulaJson({ 'name': 'git', 'versions': {'stable': '2.50.0'}, 'installed': [ {'version': '2.49.0', 'installed_on_request': false}, {'version': '2.50.0', 'installed_on_request': true}, ], 'outdated': false, 'pinned': true, }); expect(p.installedVersion, '2.50.0'); expect(p.installedOnRequest, isTrue); expect(p.pinned, isTrue); expect(p.fullName, 'git'); }); test('dependency-only formula is not installed on request', () { final p = Package.fromFormulaJson({ 'name': 'oniguruma', 'installed': [ {'version': '6.9.10', 'installed_on_request': false}, ], }); expect(p.isInstalled, isTrue); expect(p.installedOnRequest, isFalse); }); test('parses outdated formulae and casks', () { final list = OutdatedEntry.listFromJson({ 'formulae': [ { 'name': 'node', 'installed_versions': ['22.1.0'], 'current_version': '22.2.0', 'pinned': true, }, ], 'casks': [ { 'name': 'firefox', 'installed_versions': ['140.0'], 'current_version': '141.0', }, ], }); expect(list.map((e) => (e.name, e.kind, e.pinned)), [ ('node', PackageKind.formula, true), ('firefox', PackageKind.cask, false), ]); expect(list.last.installedVersions, ['140.0']); }); test('parses an API-backed tap', () { final t = Tap.fromJson({ 'name': 'homebrew/core', 'path': '/opt/homebrew/Library/Taps/homebrew/homebrew-core', 'installed': false, 'official': true, 'formula_names': ['a', 'b'], 'cask_tokens': [], }); expect(t.cloned, isFalse); expect(t.official, isTrue); expect(t.formulaNames, hasLength(2)); expect(t.remote, isNull); }); test('parses a cloned third-party tap', () { // Shape from `brew tap-info --json hashicorp/tap`: custom_remote is a // bool, not the URL. final t = Tap.fromJson({ 'name': 'hashicorp/tap', 'path': '/opt/homebrew/Library/Taps/hashicorp/homebrew-tap', 'installed': true, 'official': false, 'remote': 'https://github.com/hashicorp/homebrew-tap', 'custom_remote': false, 'last_commit': '2 days ago', 'branch': 'main', 'formula_names': ['hashicorp/tap/terraform'], 'cask_tokens': [], }); expect(t.cloned, isTrue); expect(t.remote, 'https://github.com/hashicorp/homebrew-tap'); expect(t.branch, 'main'); expect(t.lastCommit, '2 days ago'); }); }