From cf70bbc0080d7ad8866998a9f63cc56612374a93 Mon Sep 17 00:00:00 2001 From: WangHao <43278047@qq.com> Date: Tue, 15 Sep 2020 23:25:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95=20?= =?UTF-8?q?=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/common/CaptchaController.java | 172 +++++++-------- .../test/controller/BaseSpringBootTest.java | 7 + .../web/test/controller/SqBookmarkTest.java | 200 ++++++++++++++---- 3 files changed, 252 insertions(+), 127 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java index 035cfd284..1f532329d 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java @@ -1,86 +1,86 @@ -package com.ruoyi.web.controller.common; - -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.util.concurrent.TimeUnit; -import javax.annotation.Resource; -import javax.imageio.ImageIO; -import javax.servlet.http.HttpServletResponse; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.util.FastByteArrayOutputStream; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; -import com.google.code.kaptcha.Producer; -import com.ruoyi.common.constant.Constants; -import com.ruoyi.common.core.domain.AjaxResult; -import com.ruoyi.common.core.redis.RedisCache; -import com.ruoyi.common.utils.sign.Base64; -import com.ruoyi.common.utils.uuid.IdUtils; - -/** - * 验证码操作处理 - * - * @author ruoyi - */ -@RestController -public class CaptchaController -{ - @Resource(name = "captchaProducer") - private Producer captchaProducer; - - @Resource(name = "captchaProducerMath") - private Producer captchaProducerMath; - - @Autowired - private RedisCache redisCache; - - // 验证码类型 - @Value("${ruoyi.captchaType}") - private String captchaType; - - /** - * 生成验证码 - */ - @GetMapping("/captchaImage") - public AjaxResult getCode(HttpServletResponse response) throws IOException - { - // 保存验证码信息 - String uuid = IdUtils.simpleUUID(); - String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid; - - String capStr = null, code = null; - BufferedImage image = null; - - // 生成验证码 - if ("math".equals(captchaType)) - { - String capText = captchaProducerMath.createText(); - capStr = capText.substring(0, capText.lastIndexOf("@")); - code = capText.substring(capText.lastIndexOf("@") + 1); - image = captchaProducerMath.createImage(capStr); - } - else if ("char".equals(captchaType)) - { - capStr = code = captchaProducer.createText(); - image = captchaProducer.createImage(capStr); - } - - redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); - // 转换流信息写出 - FastByteArrayOutputStream os = new FastByteArrayOutputStream(); - try - { - ImageIO.write(image, "jpg", os); - } - catch (IOException e) - { - return AjaxResult.error(e.getMessage()); - } - - AjaxResult ajax = AjaxResult.success(); - ajax.put("uuid", uuid); - ajax.put("img", Base64.encode(os.toByteArray())); - return ajax; - } -} +package com.ruoyi.web.controller.common; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.concurrent.TimeUnit; +import javax.annotation.Resource; +import javax.imageio.ImageIO; +import javax.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.FastByteArrayOutputStream; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; +import com.google.code.kaptcha.Producer; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.sign.Base64; +import com.ruoyi.common.utils.uuid.IdUtils; + +/** + * 验证码操作处理 + * + * @author ruoyi + */ +@RestController +public class CaptchaController +{ + @Resource(name = "captchaProducer") + private Producer captchaProducer; + + @Resource(name = "captchaProducerMath") + private Producer captchaProducerMath; + + @Autowired + private RedisCache redisCache; + + // 验证码类型 + @Value("${ruoyi.captchaType}") + private String captchaType; + + /** + * 生成验证码 + */ + @GetMapping("/captchaImage") + public AjaxResult getCode(HttpServletResponse response) throws IOException + { + // 保存验证码信息 + String uuid = IdUtils.simpleUUID(); + String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid; + + String capStr = null, code = null; + BufferedImage image = null; + + // 生成验证码 + if ("math".equals(captchaType)) + { + String capText = captchaProducerMath.createText(); + capStr = capText.substring(0, capText.lastIndexOf("@")); + code = capText.substring(capText.lastIndexOf("@") + 1); + image = captchaProducerMath.createImage(capStr); + } + else if ("char".equals(captchaType)) + { + capStr = code = captchaProducer.createText(); + image = captchaProducer.createImage(capStr); + } + + redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); + // 转换流信息写出 + FastByteArrayOutputStream os = new FastByteArrayOutputStream(); + try + { + ImageIO.write(image, "jpg", os); + } + catch (IOException e) + { + return AjaxResult.error(e.getMessage()); + } + + AjaxResult ajax = AjaxResult.success(); + ajax.put("uuid", uuid); + ajax.put("img", Base64.encode(os.toByteArray())); + return ajax; + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/test/controller/BaseSpringBootTest.java b/ruoyi-admin/src/main/java/com/ruoyi/web/test/controller/BaseSpringBootTest.java index e3673884a..849c5e520 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/test/controller/BaseSpringBootTest.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/test/controller/BaseSpringBootTest.java @@ -7,6 +7,7 @@ import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.web.WebAppConfiguration; @@ -17,8 +18,10 @@ import org.springframework.test.context.web.WebAppConfiguration; * 功能描述: */ @RunWith(SpringRunner.class) +//@SpringBootTest(classes = BaseSpringBootTest.class) @SpringBootTest @WebAppConfiguration +//@ContextConfiguration(locations = {"classpath*:*.xml"}) public class BaseSpringBootTest { protected static final Logger logger = LoggerFactory.getLogger(BaseSpringBootTest.class); @Before @@ -30,4 +33,8 @@ public class BaseSpringBootTest { public void after() { logger.info("测试结束..."); } + + + + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/test/controller/SqBookmarkTest.java b/ruoyi-admin/src/main/java/com/ruoyi/web/test/controller/SqBookmarkTest.java index 00fbadf1d..2cebe23cc 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/test/controller/SqBookmarkTest.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/test/controller/SqBookmarkTest.java @@ -1,85 +1,203 @@ package com.ruoyi.web.test.controller; -import com.github.wujun234.uid.UidGenerator; -import com.ruoyi.bookmark.mapper.SqMenuMapper; -import com.ruoyi.bookmark.service.ISqUserTagService; + + + + +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.model.LoginBody; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.web.controller.common.CaptchaController; +import com.ruoyi.web.controller.system.SysLoginController; import com.ruoyi.web.controller.yunbookmark.SqBookmarkController; import org.junit.Before; import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultHandlers; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; import javax.annotation.Resource; +import javax.servlet.http.HttpSession; import java.util.List; import java.util.Map; +import static org.junit.Assert.assertEquals; + /** * @Auther: Wang * @Date: 2020/08/08 18:51 - * 功能描述: SqBookmark 测试类 + * 功能描述: SqBookmark 测试类 https://www.it610.com/article/1254347008462852096.htm 断言库教程 */ public class SqBookmarkTest extends BaseSpringBootTest{ + private static final String AUTHORIZATION = "Authorization"; + @Autowired + private WebApplicationContext context; @Autowired private SqBookmarkController sqBookmarkController; @Autowired - private SqMenuMapper sqMenuMapper; + private CaptchaController captchaController; + @Autowired - private ISqUserTagService iSqUserTagService; - - + private SysLoginController sysLoginController; + private MockHttpServletRequest request; private MockMvc mockMvc; + private MockMvc loginmockMvc; + + private String url; + + @Autowired + private RedisCache redisCache; + + + private String Token; + + + + + + @Before public void setup() { - mockMvc = MockMvcBuilders.standaloneSetup(sqBookmarkController).build(); - logger.info("setup()........."); + MockitoAnnotations.initMocks(this); + mockMvc = MockMvcBuilders.standaloneSetup(captchaController).build(); + loginmockMvc = MockMvcBuilders.standaloneSetup(sysLoginController).build(); } -// @Test -// public void demo() throws Exception { -// MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/bookmark/bookmark/2")) + + + + + + @Test + public void login2() throws Exception { + //获取验证码UUID 然后从Redis中取UUID +// HttpHeaders httpHeaders = new HttpHeaders(); +// httpHeaders.add("cache-control", "no-cache, no-store, max-age=0, must-revalidate"); +// httpHeaders.add("connection", "close"); +// httpHeaders.add("content-type", "application/json;charset=UTF-8"); +// httpHeaders.add("date", "Tue, 15 Sep 2020 13:33:02 GMT"); +// httpHeaders.add("expires", " 0"); +// httpHeaders.add("pragma", "no-cache"); +// httpHeaders.add("transfer-encoding", "chunked"); +// httpHeaders.add("x-content-type-options", " nosniff"); +// httpHeaders.add("X-Powered-By", "Express"); +// httpHeaders.add("x-xss-protection", " 1; mode=block"); + + + MvcResult code = this.mockMvc.perform(MockMvcRequestBuilders.get("/captchaImage") + .accept(MediaType.APPLICATION_JSON) //请求头,Accept代表发送端(客户端)希望接收的数据类型 +// .headers(httpHeaders) //发送端发送的header信息 + .contentType(MediaType.APPLICATION_JSON)//实体头,Content-Type代表发送端(客户端|服务器)发送的实体数据的数据类型 + ) + .andExpect( + MockMvcResultMatchers.status().isOk() + )//添加ResultMatcher验证规则,验证控制器执行完成后结果是否正确 + .andDo( + MockMvcResultHandlers.print()//输出整个响应结果信息 //new EncodingResultHandler()//自定义结果处理器 + ) + .andReturn(); + + + String returntext=code.getResponse().getContentAsString(); + JSONObject jsonObject = JSONUtil.parseObj(returntext); + String uuid= jsonObject.get("uuid").toString(); + String captcha = redisCache.getCacheObject(Constants.CAPTCHA_CODE_KEY +uuid); + + logger.debug("验证码接口UUID:"+uuid); + logger.debug("验证码接口缓存中的验证码结果:"+captcha); + + + + LoginBody request = new LoginBody(); + request.setUsername("admin"); + request.setPassword("admin123"); + request.setCode(captcha); + request.setUuid(uuid); + MvcResult mvcResult = loginmockMvc.perform(MockMvcRequestBuilders.post("/login") + .contentType(MediaType.APPLICATION_JSON) + .content(JSONUtil.parseObj(request, false).toString()) + ) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andDo(MockMvcResultHandlers.print()) + .andReturn(); + + logger.debug("登录接口返回:"+mvcResult.getResponse().getContentAsString()); + + logger.debug("TOKEN:"+JSONUtil.parseObj(mvcResult.getResponse().getContentAsString()).get("token")); + } + + + + + + @Test + public void testGetUser() throws Exception { +// //获取验证码UUID 然后从Redis中取UUID +// HttpHeaders httpHeaders = new HttpHeaders(); +// httpHeaders.add("cache-control", "no-cache, no-store, max-age=0, must-revalidate"); +// httpHeaders.add("connection", "close"); +// httpHeaders.add("content-type", "application/json;charset=UTF-8"); +// httpHeaders.add("date", "Tue, 15 Sep 2020 13:33:02 GMT"); +// httpHeaders.add("expires", " 0"); +// httpHeaders.add(AUTHORIZATION, "no-cache"); +// httpHeaders.add("transfer-encoding", "chunked"); +// httpHeaders.add("x-content-type-options", " nosniff"); +// httpHeaders.add("X-Powered-By", "Express"); +// httpHeaders.add("x-xss-protection", " 1; mode=block"); +// +// MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/bookmark/bookmark/list") +// .accept(MediaType.APPLICATION_JSON).param("pageNum", "2").param("pageSize","10")) // .andExpect(MockMvcResultMatchers.status().isOk()) // .andDo(MockMvcResultHandlers.print()) // .andReturn(); // // logger.info(mvcResult.getResponse().getContentAsString()); -// -// } -// @Test -// public void demo() throws Exception { -// Long[] menuIds={1L,4L,6L}; -// sqMenuMapper.updateCountAdd(menuIds,5); -// -// logger.info("执行完毕"); -// -// } - /** - * @auther: Wang - * @date: 2020/09/04 23:58 - * 功能描述: 测试查询用户的 标签 - */ - - @Test - public void selectSqUserTagByUserId() throws Exception { - List> map = iSqUserTagService.selectSqUserTagByUserId(1L); - logger.info("执行完毕"); - for (Map list: map) { - for (Map.Entry entry: list.entrySet() ) { - System.out.println(entry.getKey()+"="+entry.getValue()); - } - logger.info("========================================"); - } - - + logger.info("成功"); } + /** + * 获取登入信息session + * @return + * @throws Exception + */ + private HttpSession getLoginSession() throws Exception{ + // mock request get login session + // url = /xxx/xxx/{username}/{password} + MvcResult result = this.mockMvc + .perform((MockMvcRequestBuilders.post("/login"))) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andReturn(); + return result.getRequest().getSession(); + } + + + + +//单元测试 教程 +// https://www.cnblogs.com/shunyang/p/8681111.html + +