package com.battery.business.service.impl;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.Mockito.doAnswer;
|
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.when;
|
|
import java.util.Arrays;
|
import java.util.Collections;
|
import java.util.List;
|
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.mockito.ArgumentCaptor;
|
import org.mockito.InjectMocks;
|
import org.mockito.Mock;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
import com.ruoyi.common.exception.ServiceException;
|
import com.battery.business.domain.TBatteryGroupField;
|
import com.battery.business.domain.TBatteryGroupTemplate;
|
import com.battery.business.domain.TBatteryGroupTemplateField;
|
import com.battery.business.mapper.TBatteryGroupTemplateMapper;
|
|
/** 电池组模板 Service 单元测试。 */
|
@ExtendWith(MockitoExtension.class)
|
class TBatteryGroupTemplateServiceImplTest
|
{
|
@Mock
|
private TBatteryGroupTemplateMapper batteryGroupTemplateMapper;
|
|
@InjectMocks
|
private TBatteryGroupTemplateServiceImpl batteryGroupTemplateService;
|
|
@Test
|
void insertShouldValidateFieldsAndReplaceRelations()
|
{
|
TBatteryGroupTemplate template = template(null, " 默认模板 ", Arrays.asList(1L, 2L));
|
template.setUpdateBy(null);
|
when(batteryGroupTemplateMapper.selectEnabledFieldsByIds(template.getFieldIds()))
|
.thenReturn(Arrays.asList(field(1L), field(2L)));
|
doAnswer(invocation -> {
|
invocation.<TBatteryGroupTemplate>getArgument(0).setTemplateId(10L);
|
return 1;
|
}).when(batteryGroupTemplateMapper).insertBatteryGroupTemplate(any(TBatteryGroupTemplate.class));
|
|
assertEquals(1, batteryGroupTemplateService.insertBatteryGroupTemplate(template));
|
|
ArgumentCaptor<List<TBatteryGroupTemplateField>> captor = ArgumentCaptor.forClass(List.class);
|
verify(batteryGroupTemplateMapper).batchInsertTemplateFields(captor.capture());
|
assertEquals(2, captor.getValue().size());
|
assertEquals(0, captor.getValue().get(0).getSortOrder());
|
assertEquals(1, captor.getValue().get(1).getSortOrder());
|
assertEquals("默认模板", template.getTemplateName());
|
assertEquals("admin", template.getUpdateBy());
|
}
|
|
@Test
|
void insertShouldRejectDuplicateFieldIds()
|
{
|
TBatteryGroupTemplate template = template(null, "模板", Arrays.asList(1L, 1L));
|
|
ServiceException exception = assertThrows(ServiceException.class,
|
() -> batteryGroupTemplateService.insertBatteryGroupTemplate(template));
|
|
assertEquals("模板字段不能重复或为空", exception.getMessage());
|
verify(batteryGroupTemplateMapper, never()).insertBatteryGroupTemplate(any(TBatteryGroupTemplate.class));
|
}
|
|
@Test
|
void insertShouldRejectDisabledOrMissingField()
|
{
|
TBatteryGroupTemplate template = template(null, "模板", Collections.singletonList(1L));
|
when(batteryGroupTemplateMapper.selectEnabledFieldsByIds(template.getFieldIds()))
|
.thenReturn(Collections.emptyList());
|
|
ServiceException exception = assertThrows(ServiceException.class,
|
() -> batteryGroupTemplateService.insertBatteryGroupTemplate(template));
|
|
assertEquals("模板包含不存在或已禁用的电池组字段", exception.getMessage());
|
}
|
|
@Test
|
void updateShouldDeleteOldRelationsBeforeInsert()
|
{
|
TBatteryGroupTemplate template = template(10L, "模板", Collections.singletonList(1L));
|
when(batteryGroupTemplateMapper.selectBatteryGroupTemplateById(10L)).thenReturn(template);
|
when(batteryGroupTemplateMapper.selectEnabledFieldsByIds(template.getFieldIds()))
|
.thenReturn(Collections.singletonList(field(1L)));
|
when(batteryGroupTemplateMapper.updateBatteryGroupTemplate(template)).thenReturn(1);
|
|
assertEquals(1, batteryGroupTemplateService.updateBatteryGroupTemplate(template));
|
verify(batteryGroupTemplateMapper).deleteTemplateFields(10L);
|
verify(batteryGroupTemplateMapper).batchInsertTemplateFields(any(List.class));
|
}
|
|
private TBatteryGroupTemplate template(Long id, String name, java.util.List<Long> fieldIds)
|
{
|
TBatteryGroupTemplate template = new TBatteryGroupTemplate();
|
template.setTemplateId(id);
|
template.setTemplateName(name);
|
template.setFieldIds(fieldIds);
|
template.setCreateBy("admin");
|
template.setUpdateBy("admin");
|
return template;
|
}
|
|
private TBatteryGroupField field(Long id)
|
{
|
TBatteryGroupField field = new TBatteryGroupField();
|
field.setFieldId(id);
|
field.setStatus("0");
|
return field;
|
}
|
}
|