Files
IKAR/test/scroll_down_button_test.dart
T

83 lines
2.6 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:material_symbols_icons/symbols.dart';
import 'package:ikar/frontend/screens/chats/chat/view/scroll_down_button.dart';
void main() {
Future<void> pumpButton(
WidgetTester tester,
ValueNotifier<int> unread, {
VoidCallback? onTap,
bool material = false,
double visibility = 1,
}) async {
final height = ValueNotifier<double>(64);
addTearDown(height.dispose);
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: Stack(
children: [
ScrollDownButton(
composerHeight: height,
materialComposer: material,
composerUnderlap: true,
frosted: false,
liquidChrome: false,
pillBackdrop: null,
scrollDownCurved: AlwaysStoppedAnimation(visibility),
unreadCount: unread,
onTap: onTap ?? () {},
),
],
),
),
),
);
}
for (final material in [false, true]) {
testWidgets('existing unread count updates while the arrow is visible '
'(material=$material)', (tester) async {
final unread = ValueNotifier(12);
addTearDown(unread.dispose);
await pumpButton(tester, unread, material: material);
expect(find.text('12'), findsOneWidget);
unread.value = 5;
await tester.pumpAndSettle();
expect(find.text('5'), findsOneWidget);
expect(find.text('12'), findsNothing);
unread.value = 0;
await tester.pumpAndSettle();
expect(find.text('5'), findsNothing);
expect(find.byIcon(Symbols.keyboard_arrow_down), findsOneWidget);
expect(tester.takeException(), isNull);
});
}
testWidgets('large counts are capped and tapping waits for actual reading', (
tester,
) async {
final unread = ValueNotifier(150);
addTearDown(unread.dispose);
var taps = 0;
await pumpButton(tester, unread, onTap: () => taps++);
expect(find.text('99+'), findsOneWidget);
await tester.tap(find.byIcon(Symbols.keyboard_arrow_down));
await tester.pumpAndSettle();
expect(taps, 1);
expect(find.text('99+'), findsOneWidget);
unread.value = 0;
await tester.pumpAndSettle();
expect(find.text('99+'), findsNothing);
});
testWidgets('hidden arrow also hides its badge', (tester) async {
final unread = ValueNotifier(8);
addTearDown(unread.dispose);
await pumpButton(tester, unread, visibility: 0);
expect(find.text('8'), findsNothing);
expect(find.byIcon(Symbols.keyboard_arrow_down), findsNothing);
});
}