이벤트 가져오기 위젯 테스트 추가 및 테스트 훅 도입

This commit is contained in:
2025-09-12 06:33:44 +09:00
parent 107abc963f
commit a5f2544d11
121 changed files with 39277 additions and 3911 deletions
@@ -0,0 +1,72 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:provider/provider.dart';
import 'package:lanebow/models/user_model.dart';
import 'package:lanebow/models/club_model.dart';
import 'package:lanebow/models/event_model.dart';
import 'package:lanebow/screens/club/events_screen.dart';
import 'package:lanebow/services/auth_service.dart';
import 'package:lanebow/services/club_service.dart';
import 'package:lanebow/services/event_service.dart';
import '../../utils/mock_services.dart';
import '../../utils/stub_event_service.dart';
void main() {
testWidgets('EventsScreen popup duplicate onSelected triggers cloneEvent without overlay interaction', (tester) async {
// Arrange
final auth = MockAuthService(
user: User(id: 'u1', email: 't@test.com', name: 'tester', role: 'user'),
tokenValue: 'token',
);
final club = MockClubService(
club: Club(
id: 'club1',
name: '클럽',
createdAt: DateTime.now(),
updatedAt: DateTime.now(),
),
);
final stub = StubEventService();
// Seed events via overridden getter in stub
final event = Event(
id: 'e1',
clubId: 'club1',
title: '이벤트1',
startDate: DateTime(2025, 1, 1),
status: 'active',
isActive: true,
);
stub.seededEvents = [event];
// Initialize stub similarly to real service to avoid branch differences
await stub.initialize('token');
stub.setClubId('club1');
await tester.pumpWidget(
MultiProvider(
providers: [
ChangeNotifierProvider<AuthService>.value(value: auth),
ChangeNotifierProvider<ClubService>.value(value: club),
ChangeNotifierProvider<EventService>.value(value: stub),
],
child: const MaterialApp(
home: Scaffold(body: EventsScreen()),
),
),
);
await tester.pumpAndSettle();
// Act: call testing hook to perform duplicate flow directly
final stateFinder = find.byType(EventsScreen);
final state = tester.state<State<StatefulWidget>>(stateFinder) as dynamic;
await state.invokeDuplicateForTest(event);
await tester.pump();
// Assert: cloneEvent was called on the stub with the correct id
expect(stub.lastCloneCalled, isTrue);
expect(stub.lastClonedEventId, equals('e1'));
});
}