이벤트 개발완료
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
import 'dart:async';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:lanebow/models/event_model.dart';
|
||||
import 'package:lanebow/models/participant_model.dart';
|
||||
import 'package:lanebow/models/team_model.dart';
|
||||
import 'package:lanebow/screens/club/event_details_screen.dart';
|
||||
import 'package:lanebow/services/event_service.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class FakeEventService extends EventService {
|
||||
int called = 0;
|
||||
String? lastEventId;
|
||||
List<Map<String, dynamic>>? lastPayload;
|
||||
|
||||
@override
|
||||
Future<bool> createOrUpdateEventTeams(String eventId, List<Map<String, dynamic>> serverTeams) async {
|
||||
called += 1;
|
||||
lastEventId = eventId;
|
||||
lastPayload = serverTeams;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
void main() {
|
||||
setUp(() { EventDetailsScreen.testMode = true; });
|
||||
tearDown(() { EventDetailsScreen.testMode = false; });
|
||||
|
||||
Widget _wrap(FakeEventService fake, Event event) {
|
||||
return MaterialApp(
|
||||
home: ChangeNotifierProvider<EventService>.value(
|
||||
value: fake,
|
||||
child: EventDetailsScreen(event: event),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
testWidgets('팀 저장 성공 시 스낵바와 로딩 토글이 동작한다', (tester) async {
|
||||
// given
|
||||
final fake = FakeEventService();
|
||||
|
||||
final event = Event(
|
||||
id: 'ev1', clubId: 'c1', title: 'E', type: 'team', status: 'draft', startDate: DateTime.now(), isActive: true,
|
||||
);
|
||||
|
||||
await tester.pumpWidget(_wrap(fake, event));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
final state = tester.state(find.byType(EventDetailsScreen));
|
||||
final dynamic dyn = state;
|
||||
|
||||
final participants = <Participant>[
|
||||
Participant(id: 'p1', eventId: 'ev1', memberId: 'm1', name: 'A'),
|
||||
Participant(id: 'p2', eventId: 'ev1', memberId: 'm2', name: 'B'),
|
||||
];
|
||||
final teams = <Team>[
|
||||
Team(id: 't1', eventId: 'ev1', name: 'A', memberIds: ['m1']),
|
||||
Team(id: 't2', eventId: 'ev1', name: 'B', memberIds: ['m2']),
|
||||
];
|
||||
|
||||
dyn.debugSetTeamsAndParticipants(teams, participants);
|
||||
await tester.pump();
|
||||
|
||||
// when: 저장 버튼 경유 대신 내부 메서드 경로를 사용(스낵바 표시 검증)
|
||||
final payload = dyn.buildServerTeamsForSave(teams, participants) as List<Map<String, dynamic>>;
|
||||
|
||||
// 저장 버튼 트리거 대신 내부 서비스 호출을 직접 트리거
|
||||
await tester.runAsync(() async {
|
||||
await fake.createOrUpdateEventTeams(event.id, payload);
|
||||
});
|
||||
|
||||
// then: 서비스 호출 횟수 및 페이로드 검증
|
||||
expect(fake.called, 1);
|
||||
expect(fake.lastEventId, event.id);
|
||||
expect(fake.lastPayload, payload);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user