package com.ruoyi.chargingPile.service.impl;
|
|
import com.ruoyi.chargingPile.api.model.Partner;
|
import com.ruoyi.chargingPile.api.domain.SiteMenu;
|
import com.ruoyi.chargingPile.mapper.PartnerMapper;
|
import com.ruoyi.chargingPile.service.TSiteMenuService;
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.security.service.TokenService;
|
import com.ruoyi.other.api.feignClient.RoleSiteClient;
|
import com.ruoyi.other.api.feignClient.UserSiteClient;
|
import com.ruoyi.system.api.domain.SysUser;
|
import com.ruoyi.system.api.feignClient.SysUserRoleClient;
|
import com.ruoyi.system.api.model.LoginUser;
|
import com.ruoyi.system.api.model.SysUserRoleVo;
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import org.junit.jupiter.api.Test;
|
import org.springframework.test.util.ReflectionTestUtils;
|
import org.mockito.ArgumentCaptor;
|
|
import java.math.BigDecimal;
|
import java.util.Arrays;
|
import java.util.HashSet;
|
import java.util.Set;
|
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.when;
|
import static org.mockito.ArgumentMatchers.isNull;
|
import static org.mockito.ArgumentMatchers.any;
|
|
class PartnerServiceImplTest {
|
|
@Test
|
void editingPartnerExcludesPasswordFromSystemUserUpdate() {
|
PartnerServiceImpl service = new PartnerServiceImpl();
|
Partner partner = new Partner();
|
partner.setAccount("partner-user");
|
partner.setName("合作商A");
|
partner.setPhoneOne("13800000000");
|
partner.setLogoUrl("logo.jpg");
|
partner.setRoleId(9);
|
SysUser user = new SysUser();
|
user.setPassword("$2a$10$existing-bcrypt-hash");
|
user.setPassWordUpdate(new java.util.Date());
|
|
service.prepareExistingUserForUpdate(user, partner);
|
|
assertNull(user.getPassword());
|
assertNull(user.getPassWordUpdate());
|
assertEquals("partner-user", user.getUserName());
|
assertEquals(Long.valueOf(9), user.getRoleId());
|
}
|
|
@Test
|
void acceptsShareRatioWithoutIcbcSubMerchantConfiguration() {
|
Partner partner = new Partner();
|
partner.setId(1);
|
partner.setCode("PARTNER001");
|
partner.setName("测试合作商");
|
partner.setPartnerType(1);
|
partner.setPhoneOne("13800000000");
|
partner.setElectricityShareRatio(new BigDecimal("20.00"));
|
partner.setServiceShareRatio(new BigDecimal("30.00"));
|
|
assertTrue(new PartnerServiceImpl().addPartnerParameterCheck(partner).isSuccess());
|
}
|
|
@Test
|
void venuePartnerFallsBackToPartnerRoleWhenDedicatedRoleIsMissing() {
|
PartnerServiceImpl service = new PartnerServiceImpl();
|
PartnerMapper mapper = mock(PartnerMapper.class);
|
ReflectionTestUtils.setField(service, "baseMapper", mapper);
|
when(mapper.getDefaultPartnerRoleId("场地方")).thenReturn(null);
|
when(mapper.getDefaultPartnerRoleId("合作商")).thenReturn(7);
|
|
assertEquals(7, service.resolveDefaultRoleId(2));
|
verify(mapper).getDefaultPartnerRoleId("场地方");
|
verify(mapper).getDefaultPartnerRoleId("合作商");
|
}
|
|
@Test
|
void serviceProviderUsesDedicatedRoleWhenItExists() {
|
PartnerServiceImpl service = new PartnerServiceImpl();
|
PartnerMapper mapper = mock(PartnerMapper.class);
|
ReflectionTestUtils.setField(service, "baseMapper", mapper);
|
when(mapper.getDefaultPartnerRoleId("服务商")).thenReturn(9);
|
|
assertEquals(9, service.resolveDefaultRoleId(3));
|
verify(mapper).getDefaultPartnerRoleId("服务商");
|
verify(mapper, never()).getDefaultPartnerRoleId("合作商");
|
}
|
|
@Test
|
void independentPartnerUsesUnifiedRoleNameBeforeLegacyAlias() {
|
PartnerServiceImpl service = new PartnerServiceImpl();
|
PartnerMapper mapper = mock(PartnerMapper.class);
|
ReflectionTestUtils.setField(service, "baseMapper", mapper);
|
when(mapper.getDefaultPartnerRoleId("独立合作商")).thenReturn(11);
|
|
assertEquals(11, service.resolveDefaultRoleId(1));
|
verify(mapper).getDefaultPartnerRoleId("独立合作商");
|
verify(mapper, never()).getDefaultPartnerRoleId("合作商");
|
}
|
|
@Test
|
void clearingShareRatiosStillProducesExplicitDatabaseUpdate() {
|
PartnerServiceImpl service = new PartnerServiceImpl();
|
PartnerMapper mapper = mock(PartnerMapper.class);
|
ReflectionTestUtils.setField(service, "baseMapper", mapper);
|
Partner partner = new Partner();
|
partner.setId(8);
|
partner.setElectricityShareRatio(null);
|
partner.setServiceShareRatio(null);
|
|
service.updateShareRatios(partner);
|
|
ArgumentCaptor<Wrapper<Partner>> wrapperCaptor = ArgumentCaptor.forClass(Wrapper.class);
|
verify(mapper).update(isNull(), wrapperCaptor.capture());
|
UpdateWrapper<Partner> wrapper = (UpdateWrapper<Partner>) wrapperCaptor.getValue();
|
assertTrue(wrapper.getSqlSet().contains("electricity_share_ratio"));
|
assertTrue(wrapper.getSqlSet().contains("service_share_ratio"));
|
}
|
|
@Test
|
void partnerSitePermissionIncludesCurrentUsersDirectAndAllRoleSites() {
|
PartnerServiceImpl service = new PartnerServiceImpl();
|
PartnerMapper mapper = mock(PartnerMapper.class);
|
UserSiteClient userSiteClient = mock(UserSiteClient.class);
|
RoleSiteClient roleSiteClient = mock(RoleSiteClient.class);
|
SysUserRoleClient userRoleClient = mock(SysUserRoleClient.class);
|
TokenService tokenService = mock(TokenService.class);
|
TSiteMenuService siteMenuService = mock(TSiteMenuService.class);
|
ReflectionTestUtils.setField(service, "baseMapper", mapper);
|
ReflectionTestUtils.setField(service, "userSiteClient", userSiteClient);
|
ReflectionTestUtils.setField(service, "roleSiteClient", roleSiteClient);
|
ReflectionTestUtils.setField(service, "userRoleClient", userRoleClient);
|
ReflectionTestUtils.setField(service, "tokenService", tokenService);
|
ReflectionTestUtils.setField(service, "siteMenuService", siteMenuService);
|
|
LoginUser loginUser = new LoginUser();
|
loginUser.setUserid(100L);
|
SysUserRoleVo firstRole = new SysUserRoleVo();
|
firstRole.setRoleId(10L);
|
SysUserRoleVo secondRole = new SysUserRoleVo();
|
secondRole.setRoleId(20L);
|
when(tokenService.getLoginUser()).thenReturn(loginUser);
|
when(siteMenuService.getOne(any())).thenReturn(null);
|
when(userSiteClient.getSiteIds(100L)).thenReturn(R.ok(Arrays.asList(1, 2)));
|
when(userRoleClient.getRoleByUserId(100L)).thenReturn(R.ok(Arrays.asList(firstRole, secondRole)));
|
when(roleSiteClient.getSiteIds(10L)).thenReturn(R.ok(Arrays.asList(2, 3)));
|
when(roleSiteClient.getSiteIds(20L)).thenReturn(R.ok(Arrays.asList(4, 5)));
|
|
Set<Integer> result = service.authSite(9, SiteMenu.SITE_LIST);
|
|
assertEquals(new HashSet<>(Arrays.asList(1, 2, 3, 4, 5)), result);
|
}
|
}
|