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

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
+132
View File
@@ -0,0 +1,132 @@
import 'package:flutter/foundation.dart';
import 'package:lanebow/models/user_model.dart';
import 'package:lanebow/models/club_model.dart';
import 'package:lanebow/models/member_model.dart';
import 'package:lanebow/services/auth_service.dart';
import 'package:lanebow/services/club_service.dart';
import 'package:lanebow/services/member_service.dart';
/// noSuchMethod 기반 간소 모킹 유틸
/// 실제 서비스 인터페이스가 방대하여 필요한 멤버만 구현하고,
/// 나머지는 noSuchMethod로 흡수합니다.
class MockAuthService extends ChangeNotifier implements AuthService {
MockAuthService({required this.user, this.tokenValue = 'test_token'});
final User user;
final String tokenValue;
@override
bool get isAuthenticated => true;
@override
bool get isInitialized => true;
@override
bool get isLoading => false;
@override
String? get lastError => null;
@override
String? get token => tokenValue;
@override
User? get currentUser => user;
@override
dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
class MockClubService extends ChangeNotifier implements ClubService {
MockClubService({required this.club});
Club? club;
@override
Club? get currentClub => club;
@override
bool get isLoading => false;
@override
List<Club> get clubs => club == null ? <Club>[] : <Club>[club!];
@override
Future<Club> updateClub(String clubId, Map<String, dynamic> updates) async {
// 최소 동작: ownerId 변경 반영
if (club != null && updates.containsKey('ownerId')) {
club = Club(
id: club!.id,
name: club!.name,
description: club!.description,
logo: club!.logo,
address: club!.address,
location: club!.location,
phone: club!.phone,
email: club!.email,
website: club!.website,
memberCount: club!.memberCount,
ownerId: updates['ownerId'] as String?,
femaleHandicap: club!.femaleHandicap,
averageCalculationPeriod: club!.averageCalculationPeriod,
createdAt: club!.createdAt,
updatedAt: club!.updatedAt,
tieBreakerOptions: club!.tieBreakerOptions,
);
notifyListeners();
}
return club!;
}
@override
Future<Club> fetchClub(String clubId) async {
if (club == null) {
throw Exception('클럽이 없습니다');
}
return club!;
}
@override
dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
class MockMemberService extends ChangeNotifier implements MemberService {
MockMemberService({required List<Member> seed}) : _members = List<Member>.from(seed);
List<Member> _members;
@override
bool get isLoading => false;
@override
String? get lastError => null;
@override
List<Member> get members => _members;
@override
Future<void> fetchClubMembers() async {
// no-op
}
@override
Future<void> setClubId(String clubId) async {
// no-op
}
@override
Future<List<Member>> fetchMembersByIds(String clubId, List<String> memberIds) async {
if (memberIds.isEmpty) return <Member>[];
return _members.where((m) => memberIds.contains(m.id)).toList();
}
set membersSeed(List<Member> next) {
_members = List<Member>.from(next);
notifyListeners();
}
@override
dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}