Files
bowlingManager/mobile/test/widgets/participant_form_bottomsheet_test.dart
T

63 lines
2.2 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:provider/provider.dart';
import 'package:lanebow/screens/club/participant_form_screen.dart';
import 'package:lanebow/services/event_service.dart';
void main() {
group('ParticipantFormScreen - Guest Prefill BottomSheet', () {
Widget _buildApp() => MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => EventService()),
],
child: const MaterialApp(
home: Scaffold(
body: ParticipantFormScreen(eventId: 'test_event'),
),
),
);
testWidgets('opens bottom sheet and applies filled values', (tester) async {
await tester.pumpWidget(_buildApp());
await tester.pumpAndSettle();
// 사전입력 버튼 노출
expect(find.text('게스트 사전입력'), findsOneWidget);
// 버튼 탭으로 BottomSheet 오픈
await tester.tap(find.text('게스트 사전입력'));
await tester.pumpAndSettle();
// 필드 입력
await tester.enterText(find.byType(TextField).at(0), '홍길동');
await tester.enterText(find.byType(TextField).at(1), 'hong@test.com');
await tester.enterText(find.byType(TextField).at(2), '01012345678');
// 적용
await tester.tap(find.text('적용'));
await tester.pumpAndSettle();
// 폼 필드에 값 반영 확인
expect(find.widgetWithText(TextFormField, '홍길동'), findsOneWidget);
expect(find.widgetWithText(TextFormField, 'hong@test.com'), findsOneWidget);
expect(find.widgetWithText(TextFormField, '01012345678'), findsOneWidget);
});
testWidgets('shows warning when name is empty', (tester) async {
await tester.pumpWidget(_buildApp());
await tester.pumpAndSettle();
await tester.tap(find.text('게스트 사전입력'));
await tester.pumpAndSettle();
// 이름 비우고 적용
await tester.enterText(find.byType(TextField).at(0), '');
await tester.tap(find.text('적용'));
await tester.pump();
expect(find.text('이름은 필수 입력 항목입니다'), findsOneWidget);
});
});
}