Browse installed packages, upgrade outdated ones, search formulae and casks, and explore taps, all by driving the brew CLI. Includes a Taskfile for running, testing and building. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
82 lines
2.5 KiB
Dart
82 lines
2.5 KiB
Dart
import 'dart:convert';
|
|
import 'dart:io';
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:taproom/brew/brew_client.dart';
|
|
import 'package:taproom/main.dart';
|
|
import 'package:taproom/state/app_state.dart';
|
|
|
|
void main() {
|
|
testWidgets('shows installed packages and outdated badge', (tester) async {
|
|
final client = BrewClient(
|
|
brewPath: '/fake/brew',
|
|
runner: (exe, args, env) async {
|
|
final out = switch (args.first) {
|
|
'info' => {
|
|
'formulae': [
|
|
{
|
|
'name': 'jq',
|
|
'desc': 'Lightweight and flexible command-line JSON processor',
|
|
'installed': [
|
|
{'version': '1.8.1', 'installed_on_request': true},
|
|
],
|
|
'outdated': true,
|
|
},
|
|
{
|
|
'name': 'oniguruma',
|
|
'installed': [
|
|
{'version': '6.9.10', 'installed_on_request': false},
|
|
],
|
|
},
|
|
],
|
|
'casks': [
|
|
{
|
|
'token': 'firefox',
|
|
'name': ['Mozilla Firefox'],
|
|
'installed': '141.0',
|
|
},
|
|
],
|
|
},
|
|
'outdated' => {
|
|
'formulae': [
|
|
{
|
|
'name': 'jq',
|
|
'installed_versions': ['1.8.1'],
|
|
'current_version': '1.8.2',
|
|
},
|
|
],
|
|
'casks': [],
|
|
},
|
|
'tap-info' => [
|
|
{
|
|
'name': 'homebrew/core',
|
|
'official': true,
|
|
'formula_names': ['jq'],
|
|
},
|
|
],
|
|
_ => throw UnimplementedError('$args'),
|
|
};
|
|
return ProcessResult(0, 0, jsonEncode(out), '');
|
|
},
|
|
);
|
|
final state = AppState(client);
|
|
await tester.binding.setSurfaceSize(const Size(1200, 800));
|
|
await tester.pumpWidget(TaproomApp(state: state));
|
|
await tester.runAsync(state.refresh);
|
|
await tester.pump();
|
|
|
|
expect(find.text('jq'), findsOneWidget);
|
|
expect(find.text('oniguruma'), findsOneWidget);
|
|
expect(find.text('Mozilla Firefox'), findsOneWidget);
|
|
expect(find.text('dependency'), findsOneWidget);
|
|
expect(find.text('3 of 3'), findsOneWidget);
|
|
// Badge on the Outdated rail item.
|
|
expect(find.text('1'), findsOneWidget);
|
|
|
|
await tester.tap(find.text('Requested only'));
|
|
await tester.pump();
|
|
expect(find.text('oniguruma'), findsNothing);
|
|
expect(find.text('2 of 3'), findsOneWidget);
|
|
});
|
|
}
|