90 lines
2.6 KiB
Dart
90 lines
2.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:nearle_pos/core/widgets/primary_button.dart';
|
|
import 'package:nearle_pos/core/widgets/status_pill.dart';
|
|
import 'package:nearle_pos/domain/entities/customer.dart';
|
|
|
|
Widget _host(Widget child) => MaterialApp(
|
|
home: Scaffold(body: Center(child: child)),
|
|
);
|
|
|
|
void main() {
|
|
group('PrimaryButton', () {
|
|
testWidgets('renders its label', (tester) async {
|
|
await tester.pumpWidget(
|
|
_host(PrimaryButton(label: 'Charge', onPressed: () {})),
|
|
);
|
|
|
|
expect(find.text('Charge'), findsOneWidget);
|
|
});
|
|
|
|
testWidgets('fires onPressed when tapped', (tester) async {
|
|
var taps = 0;
|
|
await tester.pumpWidget(
|
|
_host(PrimaryButton(label: 'Charge', onPressed: () => taps++)),
|
|
);
|
|
|
|
await tester.tap(find.text('Charge'));
|
|
await tester.pump();
|
|
|
|
expect(taps, 1);
|
|
});
|
|
|
|
testWidgets('does nothing when onPressed is null', (tester) async {
|
|
await tester.pumpWidget(
|
|
_host(const PrimaryButton(label: 'Charge')),
|
|
);
|
|
|
|
await tester.tap(find.text('Charge'), warnIfMissed: false);
|
|
await tester.pump();
|
|
|
|
expect(find.text('Charge'), findsOneWidget);
|
|
});
|
|
|
|
testWidgets('shows a spinner instead of the label while busy',
|
|
(tester) async {
|
|
await tester.pumpWidget(
|
|
_host(PrimaryButton(label: 'Charge', busy: true, onPressed: () {})),
|
|
);
|
|
|
|
expect(find.byType(CircularProgressIndicator), findsOneWidget);
|
|
expect(find.text('Charge'), findsNothing);
|
|
});
|
|
|
|
testWidgets('renders a trailing total alongside the label',
|
|
(tester) async {
|
|
await tester.pumpWidget(
|
|
_host(PrimaryButton(
|
|
label: 'CHARGE',
|
|
onPressed: () {},
|
|
trailing: const Text('\u20B9384.00'),
|
|
)),
|
|
);
|
|
|
|
expect(find.text('CHARGE'), findsOneWidget);
|
|
expect(find.text('\u20B9384.00'), findsOneWidget);
|
|
});
|
|
});
|
|
|
|
group('StatusPill', () {
|
|
testWidgets('labels a membership tier', (tester) async {
|
|
await tester.pumpWidget(_host(StatusPill.tier(MembershipTier.silver)));
|
|
expect(find.text('SILVER'), findsOneWidget);
|
|
});
|
|
|
|
testWidgets('reports an out-of-stock product', (tester) async {
|
|
await tester.pumpWidget(
|
|
_host(StatusPill.stock(0, lowThreshold: 10)),
|
|
);
|
|
expect(find.text('Out of stock'), findsOneWidget);
|
|
});
|
|
|
|
testWidgets('warns when stock is low', (tester) async {
|
|
await tester.pumpWidget(
|
|
_host(StatusPill.stock(4, lowThreshold: 10)),
|
|
);
|
|
expect(find.text('4 left'), findsOneWidget);
|
|
});
|
|
});
|
|
}
|