package cn.iocoder.yudao.module.ums.service.application; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; import cn.iocoder.yudao.module.ums.dal.dataobject.application.UmsApplicationDO; import cn.iocoder.yudao.module.ums.dal.mysql.application.UmsApplicationMapper; import cn.iocoder.yudao.module.ums.dal.redis.UmsNoRedisDAO; import cn.iocoder.yudao.module.ums.enums.UmsApplicationStatusEnum; import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.service.permission.PermissionService; import com.baomidou.mybatisplus.core.conditions.Wrapper; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; 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 WxcpMembershipRegistrationImplTest extends BaseMockitoUnitTest { @InjectMocks private WxcpMembershipRegistrationImpl service; @Mock private UmsApplicationMapper mapper; @Mock private UmsNoRedisDAO noRedisDAO; @Mock private BpmProcessInstanceApi processInstanceApi; @Mock private AdminUserService userService; @Mock private PermissionService permissionService; @Test void firstScanStartsApprovalWithUnconfirmedFee() { when(noRedisDAO.generate(anyString())).thenReturn("SQ001"); when(userService.getUserByUsername("wxcpservice")).thenReturn(new AdminUserDO().setId(5L).setStatus(0).setRemark("仅用于系统自动发起入会审批")); when(processInstanceApi.createProcessInstance(eq(5L), any())).thenReturn("process-1"); service.startIfAbsent("openid-1", "会员", "13800138000"); ArgumentCaptor captor = ArgumentCaptor.forClass(UmsApplicationDO.class); verify(mapper).insert(captor.capture()); UmsApplicationDO draft = captor.getValue(); assertEquals("openid-1", draft.getWxcpOpenid()); assertEquals(UmsApplicationStatusEnum.APPROVING.getStatus(), draft.getStatus()); assertNull(draft.getFeePaid()); assertEquals("13800138000", draft.getContactPhone()); verify(processInstanceApi).createProcessInstance(eq(5L), any()); } @Test void repeatScanDoesNotCreateAnotherDraft() { when(mapper.selectOne(any(Wrapper.class))).thenReturn(new UmsApplicationDO()); service.startIfAbsent("openid-1", "会员", null); verify(mapper, never()).insert(any(UmsApplicationDO.class)); verifyNoInteractions(processInstanceApi); } }