refactor: Complete exportScheduleTemplate2 delegation to ScheduleExportService
Phase 2 Complete: - Update MartialScheduleServiceImpl.exportScheduleTemplate2 to delegate - Reduce method from 40 lines to 3 lines (delegation only) - Add 4 comprehensive unit tests for exportScheduleTemplate2 - All tests passing (477 total) Delegation Status: ✅ exportSchedule - FULLY DELEGATED ✅ exportScheduleTemplate2 - FULLY DELEGATED (NEW) Remaining: 8 methods to delegate Next: Phase 3 - Dispatch Service methods
This commit is contained in:
+2
-31
@@ -101,37 +101,8 @@ public class MartialScheduleServiceImpl extends ServiceImpl<MartialScheduleMappe
|
||||
}
|
||||
@Override
|
||||
public List<ScheduleExportExcel2> exportScheduleTemplate2(Long competitionId, Long venueId) {
|
||||
List<ScheduleExportExcel2> exportList = new ArrayList<>();
|
||||
List<ScheduleGroupDetailVO> details = scheduleGroupMapper.selectScheduleGroupDetails(competitionId);
|
||||
if (details.isEmpty()) {
|
||||
return exportList;
|
||||
}
|
||||
if (venueId != null) {
|
||||
details = details.stream().filter(d -> venueId.equals(d.getVenueId())).collect(Collectors.toList());
|
||||
}
|
||||
Map<Long, List<ScheduleGroupDetailVO>> groupMap = details.stream()
|
||||
.collect(Collectors.groupingBy(ScheduleGroupDetailVO::getGroupId));
|
||||
List<Long> sortedGroupIds = details.stream()
|
||||
.collect(Collectors.toMap(ScheduleGroupDetailVO::getGroupId, d -> d.getDisplayOrder() != null ? d.getDisplayOrder() : 999, (a, b) -> a))
|
||||
.entrySet().stream().sorted(Map.Entry.comparingByValue()).map(Map.Entry::getKey).collect(Collectors.toList());
|
||||
int sequenceNo = 1;
|
||||
int tableNoBase = 1101;
|
||||
for (Long groupId : sortedGroupIds) {
|
||||
List<ScheduleGroupDetailVO> groupDetails = groupMap.get(groupId);
|
||||
if (groupDetails == null || groupDetails.isEmpty()) continue;
|
||||
ScheduleGroupDetailVO firstDetail = groupDetails.get(0);
|
||||
long participantCount = groupDetails.stream().filter(d -> d.getParticipantId() != null).count();
|
||||
int durationMinutes = (int) (participantCount * 4);
|
||||
ScheduleExportExcel2 excel = new ScheduleExportExcel2();
|
||||
excel.setSequenceNo(sequenceNo++);
|
||||
excel.setProjectName(firstDetail.getGroupName());
|
||||
excel.setParticipantCount((int) participantCount);
|
||||
excel.setGroupCount(1);
|
||||
excel.setDurationMinutes(durationMinutes);
|
||||
excel.setTableNo(String.valueOf(tableNoBase++));
|
||||
exportList.add(excel);
|
||||
}
|
||||
return exportList;
|
||||
// Delegated to ScheduleExportService
|
||||
return scheduleExportService.exportScheduleTemplate2(competitionId, venueId);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+82
-8
@@ -7,6 +7,7 @@ import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.springblade.modules.martial.excel.ScheduleExportExcel;
|
||||
import org.springblade.modules.martial.excel.ScheduleExportExcel2;
|
||||
import org.springblade.modules.martial.service.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -20,14 +21,7 @@ import static org.mockito.Mockito.*;
|
||||
* MartialScheduleServiceImpl Test
|
||||
* Following Google Testing Best Practices
|
||||
*
|
||||
* IMPORTANT NOTE:
|
||||
* This service is only PARTIALLY refactored. Most methods still use Mappers directly.
|
||||
* Only exportSchedule() is fully delegated to ScheduleExportService.
|
||||
*
|
||||
* Other methods (saveDraftSchedule, saveAndLockSchedule, adjustOrder, saveDispatch, etc.)
|
||||
* still contain business logic and Mapper calls - they need further refactoring.
|
||||
*
|
||||
* This test focuses on what IS delegated, not what SHOULD BE delegated.
|
||||
* Phase 2 Complete: exportSchedule and exportScheduleTemplate2 fully delegated
|
||||
*/
|
||||
@DisplayName("MartialScheduleServiceImpl - Delegation Tests")
|
||||
class MartialScheduleServiceImplTest {
|
||||
@@ -107,4 +101,84 @@ class MartialScheduleServiceImplTest {
|
||||
verify(scheduleExportService, times(1)).exportSchedule(competitionId);
|
||||
verifyNoMoreInteractions(scheduleExportService);
|
||||
}
|
||||
|
||||
// ========== Phase 2: exportScheduleTemplate2 Tests ==========
|
||||
|
||||
@Test
|
||||
@DisplayName("Should delegate exportScheduleTemplate2 to ScheduleExportService")
|
||||
void shouldDelegateExportScheduleTemplate2ToService() {
|
||||
// Given
|
||||
Long competitionId = 1L;
|
||||
Long venueId = 2L;
|
||||
List<ScheduleExportExcel2> expectedResult = Arrays.asList(
|
||||
new ScheduleExportExcel2(),
|
||||
new ScheduleExportExcel2(),
|
||||
new ScheduleExportExcel2()
|
||||
);
|
||||
when(scheduleExportService.exportScheduleTemplate2(competitionId, venueId))
|
||||
.thenReturn(expectedResult);
|
||||
|
||||
// When
|
||||
List<ScheduleExportExcel2> result = scheduleService.exportScheduleTemplate2(competitionId, venueId);
|
||||
|
||||
// Then
|
||||
assertNotNull(result);
|
||||
assertEquals(3, result.size());
|
||||
verify(scheduleExportService).exportScheduleTemplate2(competitionId, venueId);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("Should handle null venueId in exportScheduleTemplate2")
|
||||
void shouldHandleNullVenueIdInExportScheduleTemplate2() {
|
||||
// Given
|
||||
Long competitionId = 1L;
|
||||
List<ScheduleExportExcel2> expectedResult = Arrays.asList(
|
||||
new ScheduleExportExcel2()
|
||||
);
|
||||
when(scheduleExportService.exportScheduleTemplate2(competitionId, null))
|
||||
.thenReturn(expectedResult);
|
||||
|
||||
// When
|
||||
List<ScheduleExportExcel2> result = scheduleService.exportScheduleTemplate2(competitionId, null);
|
||||
|
||||
// Then
|
||||
assertNotNull(result);
|
||||
assertEquals(1, result.size());
|
||||
verify(scheduleExportService).exportScheduleTemplate2(competitionId, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("Should handle empty result in exportScheduleTemplate2")
|
||||
void shouldHandleEmptyResultInExportScheduleTemplate2() {
|
||||
// Given
|
||||
Long competitionId = 1L;
|
||||
Long venueId = 2L;
|
||||
when(scheduleExportService.exportScheduleTemplate2(competitionId, venueId))
|
||||
.thenReturn(new ArrayList<>());
|
||||
|
||||
// When
|
||||
List<ScheduleExportExcel2> result = scheduleService.exportScheduleTemplate2(competitionId, venueId);
|
||||
|
||||
// Then
|
||||
assertNotNull(result);
|
||||
assertTrue(result.isEmpty());
|
||||
verify(scheduleExportService).exportScheduleTemplate2(competitionId, venueId);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("Should verify exportScheduleTemplate2 is called exactly once")
|
||||
void shouldVerifyExportScheduleTemplate2CalledOnce() {
|
||||
// Given
|
||||
Long competitionId = 1L;
|
||||
Long venueId = 2L;
|
||||
when(scheduleExportService.exportScheduleTemplate2(competitionId, venueId))
|
||||
.thenReturn(new ArrayList<>());
|
||||
|
||||
// When
|
||||
scheduleService.exportScheduleTemplate2(competitionId, venueId);
|
||||
|
||||
// Then
|
||||
verify(scheduleExportService, times(1)).exportScheduleTemplate2(competitionId, venueId);
|
||||
verifyNoMoreInteractions(scheduleExportService);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user