package cn.iocoder.yudao.module.ums.service.member; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; import cn.iocoder.yudao.module.system.service.auth.WxcpPasswordSetupGrant; import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.ums.dal.dataobject.member.UmsMemberDO; import cn.iocoder.yudao.module.ums.dal.mysql.member.UmsMemberMapper; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.MybatisConfiguration; import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; import org.apache.ibatis.builder.MapperBuilderAssistant; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; class WxcpInitialPasswordServiceTest extends BaseMockitoUnitTest { @InjectMocks private WxcpInitialPasswordService service; @Mock private UmsMemberMapper memberMapper; @Mock private AdminUserService userService; @Mock private WxcpPasswordSetupGrant grant; @Test void rejectsSessionWithoutWxcpGrant() { when(grant.valid("token", 1L)).thenReturn(false); assertThrows(RuntimeException.class, () -> service.setPassword(1L, "token", "password1")); verifyNoInteractions(memberMapper, userService); } @Test void rejectsAccountWithoutPendingSetup() { when(grant.valid("token", 1L)).thenReturn(true); when(memberMapper.selectByUserId(1L)).thenReturn(new UmsMemberDO().setPasswordSetupRequired(false)); assertThrows(RuntimeException.class, () -> service.setPassword(1L, "token", "password1")); verifyNoInteractions(userService); } @Test void setsPasswordOnceAndReturnsOwnUsername() { TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), UmsMemberDO.class); when(grant.valid("token", 1L)).thenReturn(true); when(memberMapper.selectByUserId(1L)).thenReturn(new UmsMemberDO().setId(2L).setPasswordSetupRequired(true)); when(memberMapper.update(isNull(), any(Wrapper.class))).thenReturn(1); when(userService.getUser(1L)).thenReturn(new AdminUserDO().setUsername("wx_example")); assertEquals("wx_example", service.setPassword(1L, "token", "password1")); verify(userService).updateUserPassword(1L, "password1"); verify(grant).revoke("token"); } }