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

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
@@ -6,6 +6,7 @@ import '../../models/participant_model.dart';
import '../../models/team_model.dart';
import '../../services/event_service.dart';
import '../../widgets/loading_indicator.dart';
import '../../widgets/dialog_actions.dart';
class TeamGeneratorScreen extends StatefulWidget {
final String eventId;
@@ -40,9 +41,9 @@ class _TeamGeneratorScreenState extends State<TeamGeneratorScreen> {
// 모든 참가자 기본 선택
for (var participant in widget.participants) {
if (participant.status == '참석함' || participant.status == '확인됨') {
_selectedParticipants[participant.memberId ?? ''] = true;
_selectedParticipants[participant.memberId] = true;
} else {
_selectedParticipants[participant.memberId ?? ''] = false;
_selectedParticipants[participant.memberId] = false;
}
}
@@ -111,7 +112,7 @@ class _TeamGeneratorScreenState extends State<TeamGeneratorScreen> {
: '',
eventId: widget.eventId,
name: '${index + 1}',
memberIds: teams[index].map((p) => p.memberId ?? '').toList(),
memberIds: teams[index].map((p) => p.memberId).toList(),
description: '자동 생성된 팀',
),
);
@@ -145,17 +146,8 @@ class _TeamGeneratorScreenState extends State<TeamGeneratorScreen> {
try {
final eventService = Provider.of<EventService>(context, listen: false);
// 팀 데이터 준비
final teamsData = _generatedTeams.map((team) => {
'eventId': widget.eventId,
'name': team.name,
'memberIds': team.memberIds,
'description': team.description,
}).toList();
// 팀 저장
await eventService.saveTeams(widget.eventId, teamsData);
// 팀 저장 (서비스는 List<Team>을 기대함)
await eventService.saveTeams(widget.eventId, _generatedTeams);
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
@@ -301,7 +293,7 @@ class _TeamGeneratorScreenState extends State<TeamGeneratorScreen> {
value: _selectedParticipants[participant.memberId] ?? false,
onChanged: (value) {
setState(() {
_selectedParticipants[participant.memberId ?? ''] = value ?? false;
_selectedParticipants[participant.memberId] = value ?? false;
});
},
);
@@ -360,27 +352,22 @@ class _TeamGeneratorScreenState extends State<TeamGeneratorScreen> {
},
controller: TextEditingController(text: team.name),
),
actions: [
TextButton(
onPressed: () => Navigator.of(context).pop(),
child: const Text('취소'),
),
TextButton(
onPressed: () {
setState(() {
_generatedTeams[teamIndex] = Team(
id: team.id,
eventId: team.eventId,
name: newName,
memberIds: team.memberIds,
description: team.description,
);
});
Navigator.of(context).pop();
},
child: const Text('저장'),
),
],
actions: DialogActions.confirm(
onCancel: () => Navigator.of(context).pop(),
onConfirm: () {
setState(() {
_generatedTeams[teamIndex] = Team(
id: team.id,
eventId: team.eventId,
name: newName,
memberIds: team.memberIds,
description: team.description,
);
});
Navigator.of(context).pop();
},
confirmText: '저장',
),
);
},
);
@@ -416,45 +403,38 @@ class _TeamGeneratorScreenState extends State<TeamGeneratorScreen> {
}
},
),
actions: [
TextButton(
onPressed: () => Navigator.of(context).pop(),
child: const Text('취소'),
),
TextButton(
onPressed: () {
if (targetTeamIndex != teamIndex) {
setState(() {
// 현재 팀에서 제거
_generatedTeams[teamIndex] = Team(
id: team.id,
eventId: team.eventId,
name: team.name,
memberIds: team.memberIds
.where((id) => id != member.memberId)
.toList(),
description: team.description,
);
// 대상 팀에 추가
final targetTeam = _generatedTeams[targetTeamIndex];
_generatedTeams[targetTeamIndex] = Team(
id: targetTeam.id,
eventId: targetTeam.eventId,
name: targetTeam.name,
memberIds: [
...targetTeam.memberIds,
member.memberId ?? '',
],
description: targetTeam.description,
);
});
}
Navigator.of(context).pop();
},
child: const Text('이동'),
),
],
actions: DialogActions.confirm(
onCancel: () => Navigator.of(context).pop(),
onConfirm: () {
if (targetTeamIndex != teamIndex) {
setState(() {
_generatedTeams[teamIndex] = Team(
id: team.id,
eventId: team.eventId,
name: team.name,
memberIds: team.memberIds
.where((id) => id != member.memberId)
.toList(),
description: team.description,
);
final targetTeam = _generatedTeams[targetTeamIndex];
_generatedTeams[targetTeamIndex] = Team(
id: targetTeam.id,
eventId: targetTeam.eventId,
name: targetTeam.name,
memberIds: [
...targetTeam.memberIds,
member.memberId,
],
description: targetTeam.description,
);
});
}
Navigator.of(context).pop();
},
confirmText: '이동',
),
);
},
);