mirror of
https://github.com/rzuasti/oott.git
synced 2026-07-08 19:21:54 +02:00
Tapping a notification's body already toggled expand/collapse, but the action area below it wasn't tappable. Wrap the whole card in an InkWell so tapping anywhere (body or action row) toggles, while the buttons still handle their own taps. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
71 lines
2.2 KiB
Dart
71 lines
2.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:frontend/home/notification_card.dart';
|
|
import 'package:frontend/model/notification.dart' as oott_model;
|
|
import 'package:frontend/model/notification_type.dart';
|
|
import 'package:frontend/utils/friendly_date_formatter.dart';
|
|
|
|
oott_model.Notification _sampleNotification() => oott_model.Notification(
|
|
id: 1,
|
|
title: 'New device found',
|
|
body: 'A long body that wraps across multiple lines when expanded.',
|
|
notificationType: NotificationType.newDeviceFound,
|
|
createdOn: DateTime(2026, 6, 4, 12),
|
|
isNew: true,
|
|
macAddress: 'AA:BB:CC:DD:EE:FF',
|
|
);
|
|
|
|
Future<void> _pumpCard(WidgetTester tester) async {
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
home: Scaffold(
|
|
body: NotificationCard(
|
|
item: _sampleNotification(),
|
|
formatter: FriendlyDateFormatter(),
|
|
onSetRead: (_) async => true,
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
void main() {
|
|
testWidgets('tapping the body expands and then collapses the card', (
|
|
tester,
|
|
) async {
|
|
await _pumpCard(tester);
|
|
|
|
// Initially collapsed: no action buttons.
|
|
expect(find.text('Mark as read'), findsNothing);
|
|
|
|
// Tap the body to expand.
|
|
await tester.tap(find.byType(ListTile));
|
|
await tester.pumpAndSettle();
|
|
expect(find.text('Mark as read'), findsOneWidget);
|
|
|
|
// Tap directly on the body text to collapse.
|
|
await tester.tap(
|
|
find.text('A long body that wraps across multiple lines when expanded.'),
|
|
);
|
|
await tester.pumpAndSettle();
|
|
expect(find.text('Mark as read'), findsNothing);
|
|
});
|
|
|
|
testWidgets('tapping the action area (not a button) collapses the card', (
|
|
tester,
|
|
) async {
|
|
await _pumpCard(tester);
|
|
|
|
await tester.tap(find.byType(ListTile));
|
|
await tester.pumpAndSettle();
|
|
expect(find.text('Mark as read'), findsOneWidget);
|
|
|
|
// Tap the action row outside any button: its left edge is empty space
|
|
// because the buttons are aligned to the end.
|
|
final actions = tester.getRect(find.byType(OverflowBar));
|
|
await tester.tapAt(Offset(actions.left + 1, actions.center.dy));
|
|
await tester.pumpAndSettle();
|
|
expect(find.text('Mark as read'), findsNothing);
|
|
});
|
|
}
|