🏡 index : quine-global/taproom.git

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);
  });
}