feat: Implement app backdoor login and user listing for mini-programs with corresponding tests
This commit is contained in:
@@ -2,9 +2,13 @@ package com.ruoyi.web.controller.system;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.domain.entity.AppUser;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.web.config.BackDoorLoginProperties;
|
||||
import com.ruoyi.web.service.BackDoorLoginService;
|
||||
import com.ruoyi.web.service.BackDoorLoginService.AppLoginSession;
|
||||
import com.ruoyi.web.service.BackDoorLoginService.LoginSession;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -78,4 +82,24 @@ class BackDoorLoginControllerTest
|
||||
assertFalse(response.getBody().contains("/management/"));
|
||||
assertFalse(response.getBody().contains("?token=signed-token"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void appBackDoorLoginReturnsSiteToken()
|
||||
{
|
||||
SysUser sysUser = new SysUser();
|
||||
sysUser.setUserId(8L);
|
||||
AppUser appUser = new AppUser();
|
||||
appUser.setUserId(66L);
|
||||
appUser.setIsCompanyUser("1");
|
||||
when(loginService.loginApp(8L)).thenReturn(new AppLoginSession(sysUser, appUser, "site-token"));
|
||||
JSONObject body = new JSONObject();
|
||||
body.put("userId", 8L);
|
||||
|
||||
AjaxResult response = controller.appBackDoorLogin(body);
|
||||
|
||||
assertEquals(200, response.get("code"));
|
||||
assertEquals("site-token", response.get("token"));
|
||||
assertEquals(66L, response.get("appUserId"));
|
||||
assertEquals("1", response.get("isCompanyUser"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.ruoyi.web.service;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import com.ruoyi.common.core.domain.entity.AppUser;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.common.core.domain.model.LoginUser;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
@@ -10,6 +11,8 @@ import com.ruoyi.framework.web.service.SysLoginService;
|
||||
import com.ruoyi.framework.web.service.TokenService;
|
||||
import com.ruoyi.framework.web.service.UserDetailsServiceImpl;
|
||||
import com.ruoyi.system.mapper.SysUserMapper;
|
||||
import com.ruoyi.system.service.ISysUserService;
|
||||
import com.ruoyi.web.service.BackDoorLoginService.AppLoginSession;
|
||||
import com.ruoyi.web.service.BackDoorLoginService.LoginSession;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -35,13 +38,15 @@ class BackDoorLoginServiceTest
|
||||
private TokenService tokenService;
|
||||
@Mock
|
||||
private SysLoginService sysLoginService;
|
||||
@Mock
|
||||
private ISysUserService sysUserService;
|
||||
|
||||
private BackDoorLoginService service;
|
||||
|
||||
@BeforeEach
|
||||
void setUp()
|
||||
{
|
||||
service = new BackDoorLoginService(userMapper, userDetailsService, tokenService, sysLoginService);
|
||||
service = new BackDoorLoginService(userMapper, userDetailsService, tokenService, sysLoginService, sysUserService);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -113,6 +118,41 @@ class BackDoorLoginServiceTest
|
||||
verify(tokenService, never()).createTokenHourTwo(org.mockito.ArgumentMatchers.any());
|
||||
}
|
||||
|
||||
@Test
|
||||
void loginAppCreatesSiteTokenForLinkedAppUser()
|
||||
{
|
||||
SysUser user = activeUser(12L);
|
||||
user.setAppUserId(66L);
|
||||
AppUser appUser = new AppUser();
|
||||
appUser.setUserId(66L);
|
||||
appUser.setName("测试求职者");
|
||||
when(userMapper.selectUserById(12L)).thenReturn(user);
|
||||
when(userMapper.selectBackDoorEffectiveUserId("tester")).thenReturn(12L);
|
||||
when(sysUserService.selectAppUserById(66L)).thenReturn(appUser);
|
||||
when(sysLoginService.loginUserIdApp(appUser)).thenReturn("site-test-token");
|
||||
|
||||
AppLoginSession session = service.loginApp(12L);
|
||||
|
||||
assertSame(user, session.getSysUser());
|
||||
assertSame(appUser, session.getAppUser());
|
||||
assertEquals("site-test-token", session.getToken());
|
||||
verify(sysLoginService).loginUserIdApp(appUser);
|
||||
verify(tokenService, never()).createTokenHourTwo(org.mockito.ArgumentMatchers.any());
|
||||
}
|
||||
|
||||
@Test
|
||||
void loginAppRejectsUserWithoutAppUserLink()
|
||||
{
|
||||
SysUser user = activeUser(12L);
|
||||
when(userMapper.selectUserById(12L)).thenReturn(user);
|
||||
when(userMapper.selectBackDoorEffectiveUserId("tester")).thenReturn(12L);
|
||||
|
||||
ServiceException exception = assertThrows(ServiceException.class, () -> service.loginApp(12L));
|
||||
|
||||
assertEquals("该用户未关联小程序业务账号,不能授权登录", exception.getMessage());
|
||||
verify(sysLoginService, never()).loginUserIdApp(org.mockito.ArgumentMatchers.any());
|
||||
}
|
||||
|
||||
private SysUser activeUser(Long userId)
|
||||
{
|
||||
SysUser user = new SysUser();
|
||||
|
||||
Reference in New Issue
Block a user