77 lines
2.1 KiB
Dart
77 lines
2.1 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
import 'package:lanebow/widgets/owner_dropdown.dart';
|
|
import 'package:lanebow/models/member_model.dart';
|
|
|
|
void main() {
|
|
group('OwnerDropdown', () {
|
|
testWidgets('빌드 시 onItemsBuilt로 항목 수를 보고하고, onChanged로 값이 변경된다', (tester) async {
|
|
// Arrange: 샘플 멤버 2명
|
|
final members = <Member>[
|
|
Member(
|
|
id: 'm1',
|
|
userId: 'u1',
|
|
clubId: 'c1',
|
|
name: '아무개 A',
|
|
email: 'a@example.com',
|
|
gender: 'male',
|
|
isActive: true,
|
|
memberType: 'regular',
|
|
status: 'active',
|
|
),
|
|
Member(
|
|
id: 'm2',
|
|
userId: 'u2',
|
|
clubId: 'c1',
|
|
name: '아무개 B',
|
|
email: 'b@example.com',
|
|
gender: 'female',
|
|
isActive: true,
|
|
memberType: 'associate',
|
|
status: 'active',
|
|
),
|
|
];
|
|
|
|
String? selected = members.first.userId;
|
|
int? builtCount;
|
|
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
home: Scaffold(
|
|
body: Padding(
|
|
padding: const EdgeInsets.all(8.0),
|
|
child: OwnerDropdown(
|
|
members: members,
|
|
value: selected,
|
|
onChanged: (v) {
|
|
selected = v;
|
|
},
|
|
onItemsBuilt: (count) => builtCount = count,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
// onItemsBuilt는 microtask로 호출되므로 한 번 더 펌프
|
|
await tester.pump();
|
|
|
|
// Assert: 항목 수 콜백이 2로 보고됨
|
|
expect(builtCount, 2);
|
|
|
|
// Act: 오버레이를 열지 않고 DropdownButtonFormField의 onChanged를 직접 호출
|
|
final field = tester.widget<DropdownButtonFormField<String>>(
|
|
find.byType(DropdownButtonFormField<String>),
|
|
);
|
|
field.onChanged?.call(members[1].userId);
|
|
|
|
// 한 프레임 펌프하여 상태 반영
|
|
await tester.pump();
|
|
|
|
// Assert: 선택 값이 두 번째 사용자로 변경됨
|
|
expect(selected, members[1].userId);
|
|
});
|
|
});
|
|
}
|