package com.ruoyi.order.service.impl;
|
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.order.api.vo.ChargingOrderVO;
|
import com.ruoyi.other.api.domain.TFleet;
|
import com.ruoyi.other.api.domain.TGroupCompany;
|
import com.ruoyi.other.api.feignClient.GroupCompanyClient;
|
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 org.springframework.test.util.ReflectionTestUtils;
|
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.Collections;
|
import java.util.List;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.mockito.ArgumentMatchers.anyList;
|
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.when;
|
|
/**
|
* 充电桩订单「所属公司/所属车队」单测:
|
* 列表回填按订单快照 companyId/fleetId 批量远程取名;失败或缺失时保持为空且不抛异常;
|
* 无归属订单不发起远程调用。建单快照写入由 paymentChargingOrder 直接 set(支付建单链路过重,不做全链路单测,靠编译+走查覆盖)。
|
*/
|
@ExtendWith(MockitoExtension.class)
|
class TChargingOrderCompanyFleetTest {
|
|
@InjectMocks
|
private TChargingOrderServiceImpl service;
|
|
@Mock
|
private GroupCompanyClient groupCompanyClient;
|
|
private void fillCompanyFleetNames(List<ChargingOrderVO> list) {
|
ReflectionTestUtils.invokeMethod(service, "fillChargingOrderCompanyFleetNames", list);
|
}
|
|
@Test
|
void fillsCompanyAndFleetNamesFromOrderSnapshot() {
|
when(groupCompanyClient.listCompaniesByIds(anyList()))
|
.thenReturn(R.ok(Collections.singletonList(company(12, "甲公司"))));
|
when(groupCompanyClient.listFleetsByIds(anyList()))
|
.thenReturn(R.ok(Collections.singletonList(fleet(3, "一队"))));
|
|
ChargingOrderVO withFleet = order(12, 3);
|
ChargingOrderVO companyOnly = order(12, null);
|
ChargingOrderVO unmatched = order(99, 88);
|
List<ChargingOrderVO> list = new ArrayList<>(Arrays.asList(withFleet, companyOnly, unmatched));
|
|
fillCompanyFleetNames(list);
|
|
assertEquals("甲公司", withFleet.getCompanyName());
|
assertEquals("一队", withFleet.getFleetName());
|
assertEquals("甲公司", companyOnly.getCompanyName());
|
assertNull(companyOnly.getFleetName());
|
assertNull(unmatched.getCompanyName());
|
assertNull(unmatched.getFleetName());
|
|
ArgumentCaptor<List<Integer>> companyIds = ArgumentCaptor.forClass(List.class);
|
verify(groupCompanyClient).listCompaniesByIds(companyIds.capture());
|
assertTrue(companyIds.getValue().containsAll(Arrays.asList(12, 99)));
|
assertEquals(2, companyIds.getValue().size());
|
ArgumentCaptor<List<Integer>> fleetIds = ArgumentCaptor.forClass(List.class);
|
verify(groupCompanyClient).listFleetsByIds(fleetIds.capture());
|
assertTrue(fleetIds.getValue().containsAll(Arrays.asList(3, 88)));
|
assertEquals(2, fleetIds.getValue().size());
|
}
|
|
@Test
|
void keepsNamesBlankWhenRemoteFails() {
|
when(groupCompanyClient.listCompaniesByIds(anyList())).thenReturn(R.fail("公司服务调用失败"));
|
when(groupCompanyClient.listFleetsByIds(anyList())).thenThrow(new RuntimeException("车队服务不可用"));
|
|
ChargingOrderVO item = order(12, 3);
|
List<ChargingOrderVO> list = new ArrayList<>(Collections.singletonList(item));
|
|
fillCompanyFleetNames(list);
|
|
assertNull(item.getCompanyName());
|
assertNull(item.getFleetName());
|
}
|
|
@Test
|
void skipsRemoteCallsWhenOrdersHaveNoOwnership() {
|
ChargingOrderVO item = new ChargingOrderVO();
|
item.setCode("CD202609290001");
|
List<ChargingOrderVO> list = new ArrayList<>(Collections.singletonList(item));
|
|
fillCompanyFleetNames(list);
|
|
verify(groupCompanyClient, never()).listCompaniesByIds(anyList());
|
verify(groupCompanyClient, never()).listFleetsByIds(anyList());
|
assertNull(item.getCompanyName());
|
assertNull(item.getFleetName());
|
}
|
|
private ChargingOrderVO order(Integer companyId, Integer fleetId) {
|
ChargingOrderVO item = new ChargingOrderVO();
|
item.setCode("CD202609290002");
|
item.setCompanyId(companyId);
|
item.setFleetId(fleetId);
|
return item;
|
}
|
|
private TGroupCompany company(Integer id, String name) {
|
TGroupCompany company = new TGroupCompany();
|
company.setId(id);
|
company.setName(name);
|
return company;
|
}
|
|
private TFleet fleet(Integer id, String fleetName) {
|
TFleet fleet = new TFleet();
|
fleet.setId(id);
|
fleet.setFleetName(fleetName);
|
return fleet;
|
}
|
}
|