longz
2026-07-28 79f1a19bb3344de47dff029cf5498d787e223782
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
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);
    }
}