2026-06-04 18:45:08 -04:00
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
import 'package:flutter_test/flutter_test.dart';
|
2026-06-05 21:09:25 -04:00
|
|
|
import 'package:frontend/theme/dimens.dart';
|
2026-06-04 18:45:08 -04:00
|
|
|
import 'package:frontend/theme/gruvbox_theme.dart';
|
|
|
|
|
import 'package:frontend/widgets/pagination_bar.dart';
|
|
|
|
|
|
|
|
|
|
void main() {
|
2026-06-05 21:09:25 -04:00
|
|
|
Widget wrap(Widget child, {Size? size}) => MediaQuery(
|
|
|
|
|
data: MediaQueryData(size: size ?? const Size(1200, 800)),
|
|
|
|
|
child: MaterialApp(
|
|
|
|
|
theme: gruvboxDarkTheme,
|
|
|
|
|
home: Scaffold(body: child),
|
|
|
|
|
),
|
2026-06-04 18:45:08 -04:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
testWidgets('disables every navigation button while loading', (tester) async {
|
|
|
|
|
var changedTo = -1;
|
|
|
|
|
await tester.pumpWidget(
|
|
|
|
|
wrap(
|
|
|
|
|
PaginationBar(
|
|
|
|
|
currentPage: 1,
|
2026-06-05 21:09:25 -04:00
|
|
|
totalPages: 3,
|
2026-06-04 18:45:08 -04:00
|
|
|
isLoading: true,
|
|
|
|
|
onPageChanged: (page) => changedTo = page,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
await tester.tap(find.byTooltip('Next page'));
|
|
|
|
|
await tester.tap(find.byTooltip('Previous page'));
|
|
|
|
|
await tester.tap(find.byTooltip('First page'));
|
2026-06-05 21:09:25 -04:00
|
|
|
await tester.tap(find.byTooltip('Last page'));
|
2026-06-04 18:45:08 -04:00
|
|
|
expect(changedTo, -1);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
testWidgets('enables navigation when idle', (tester) async {
|
|
|
|
|
var changedTo = -1;
|
|
|
|
|
await tester.pumpWidget(
|
|
|
|
|
wrap(
|
|
|
|
|
PaginationBar(
|
|
|
|
|
currentPage: 1,
|
2026-06-05 21:09:25 -04:00
|
|
|
totalPages: 3,
|
2026-06-04 18:45:08 -04:00
|
|
|
isLoading: false,
|
|
|
|
|
onPageChanged: (page) => changedTo = page,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
await tester.tap(find.byTooltip('Next page'));
|
|
|
|
|
expect(changedTo, 2);
|
|
|
|
|
|
|
|
|
|
await tester.tap(find.byTooltip('Previous page'));
|
|
|
|
|
expect(changedTo, 0);
|
|
|
|
|
});
|
2026-06-05 21:09:25 -04:00
|
|
|
|
|
|
|
|
testWidgets('last-page button jumps to the final page', (tester) async {
|
|
|
|
|
var changedTo = -1;
|
|
|
|
|
await tester.pumpWidget(
|
|
|
|
|
wrap(
|
|
|
|
|
PaginationBar(
|
|
|
|
|
currentPage: 0,
|
|
|
|
|
totalPages: 5,
|
|
|
|
|
isLoading: false,
|
|
|
|
|
onPageChanged: (page) => changedTo = page,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
await tester.tap(find.byTooltip('Last page'));
|
|
|
|
|
expect(changedTo, 4);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
testWidgets('forward buttons disable on the last page', (tester) async {
|
|
|
|
|
var changedTo = -1;
|
|
|
|
|
await tester.pumpWidget(
|
|
|
|
|
wrap(
|
|
|
|
|
PaginationBar(
|
|
|
|
|
currentPage: 4,
|
|
|
|
|
totalPages: 5,
|
|
|
|
|
isLoading: false,
|
|
|
|
|
onPageChanged: (page) => changedTo = page,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
await tester.tap(find.byTooltip('Next page'));
|
|
|
|
|
await tester.tap(find.byTooltip('Last page'));
|
|
|
|
|
expect(changedTo, -1);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
testWidgets('spells out the page label on wide layouts', (tester) async {
|
|
|
|
|
await tester.pumpWidget(
|
|
|
|
|
wrap(
|
|
|
|
|
const PaginationBar(
|
|
|
|
|
currentPage: 1,
|
|
|
|
|
totalPages: 5,
|
|
|
|
|
isLoading: false,
|
|
|
|
|
onPageChanged: _noop,
|
|
|
|
|
),
|
|
|
|
|
size: const Size(1200, 800),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
expect(find.text('Page 2 of 5'), findsOneWidget);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
testWidgets('uses the compact page label on narrow layouts', (tester) async {
|
|
|
|
|
await tester.pumpWidget(
|
|
|
|
|
wrap(
|
|
|
|
|
const PaginationBar(
|
|
|
|
|
currentPage: 1,
|
|
|
|
|
totalPages: 5,
|
|
|
|
|
isLoading: false,
|
|
|
|
|
onPageChanged: _noop,
|
|
|
|
|
),
|
|
|
|
|
size: Size(Breakpoints.medium - 1, 800),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
expect(find.text('2 / 5'), findsOneWidget);
|
|
|
|
|
});
|
2026-06-04 18:45:08 -04:00
|
|
|
}
|
2026-06-05 21:09:25 -04:00
|
|
|
|
|
|
|
|
void _noop(int _) {}
|