diff --git a/src/main/java/cn/celess/blog/entity/Response.java b/src/main/java/cn/celess/blog/entity/Response.java index 547ac79..7630696 100644 --- a/src/main/java/cn/celess/blog/entity/Response.java +++ b/src/main/java/cn/celess/blog/entity/Response.java @@ -11,15 +11,15 @@ import java.io.Serializable; * @date : 2019/03/28 15:24 */ @Data -public class Response implements Serializable { +public class Response implements Serializable { private int code; private String msg; - private Object result; + private T result; public Response() { } - public Response(int code, String msg, Object result) { + public Response(int code, String msg, T result) { this.code = code; this.msg = msg; this.result = result; diff --git a/src/test/java/cn/celess/blog/BaseTest.java b/src/test/java/cn/celess/blog/BaseTest.java index 65f6d91..6047ffe 100644 --- a/src/test/java/cn/celess/blog/BaseTest.java +++ b/src/test/java/cn/celess/blog/BaseTest.java @@ -1,5 +1,6 @@ package cn.celess.blog; + import cn.celess.blog.entity.request.LoginReq; import net.sf.json.JSONObject; import org.junit.After; @@ -8,23 +9,25 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; import org.springframework.mock.web.MockHttpSession; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultHandler; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; -import org.springframework.test.web.servlet.result.MockMvcResultHandlers; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; -import javax.servlet.http.Cookie; import java.util.UUID; +import static cn.celess.blog.enmu.ResponseEnum.SUCCESS; import static org.junit.Assert.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** * @Author: 小海 @@ -40,6 +43,8 @@ public class BaseTest { protected MockMvc mockMvc; protected final static String Code = "code"; protected final static String Result = "result"; + private static String userToken = null; + private static String adminToken = null; @Autowired private WebApplicationContext wac; @@ -59,6 +64,7 @@ public class BaseTest { protected String adminLogin() { + if (adminToken != null) return adminToken; try { LoginReq req = new LoginReq(); req.setEmail("a@celess.cn"); @@ -68,9 +74,9 @@ public class BaseTest { String str = mockMvc.perform(MockMvcRequestBuilders.post("/login").content(loginReq.toString()).contentType("application/json")) // .andDo(MockMvcResultHandlers.print()) .andReturn().getResponse().getContentAsString(); - String token = JSONObject.fromObject(str).getJSONObject(Result).getString("token"); - assertNotNull(token); - return token; + adminToken = JSONObject.fromObject(str).getJSONObject(Result).getString("token"); + assertNotNull(adminToken); + return adminToken; } catch (Exception e) { e.printStackTrace(); return null; @@ -78,6 +84,7 @@ public class BaseTest { } protected String userLogin() { + if (userToken != null) return userToken; try { LoginReq req = new LoginReq(); req.setEmail("zh56462271@qq.com"); @@ -87,9 +94,9 @@ public class BaseTest { String str = mockMvc.perform(MockMvcRequestBuilders.post("/login").content(loginReq.toString()).contentType("application/json")) // .andDo(MockMvcResultHandlers.print()) .andReturn().getResponse().getContentAsString(); - String token = JSONObject.fromObject(str).getJSONObject(Result).getString("token"); - assertNotNull(token); - return token; + userToken = JSONObject.fromObject(str).getJSONObject(Result).getString("token"); + assertNotNull(userToken); + return userToken; } catch (Exception e) { e.printStackTrace(); return null; @@ -104,4 +111,24 @@ public class BaseTest { protected String randomStr(int len) { return UUID.randomUUID().toString().replaceAll("-", "").substring(0, len); } + + + protected ResultActions getMockData(String url) throws Exception { + return getMockData(url, null, null); + } + + protected ResultActions getMockData(String url, String token) throws Exception { + return getMockData(url, token, null); + } + + protected ResultActions getMockData(String url, String token, Object content) throws Exception { + MockHttpServletRequestBuilder mockHttpServletRequestBuilder = get(url); + if (token != null) { + mockHttpServletRequestBuilder.header("Authorization", token); + } + if (content != null) { + mockHttpServletRequestBuilder.content(JSONObject.fromObject(content).toString()).contentType(MediaType.APPLICATION_JSON); + } + return mockMvc.perform(mockHttpServletRequestBuilder).andExpect(status().isOk()); + } } diff --git a/src/test/java/cn/celess/blog/controller/ArticleControllerTest.java b/src/test/java/cn/celess/blog/controller/ArticleControllerTest.java index 4d16a34..09edaf9 100644 --- a/src/test/java/cn/celess/blog/controller/ArticleControllerTest.java +++ b/src/test/java/cn/celess/blog/controller/ArticleControllerTest.java @@ -8,6 +8,8 @@ import cn.celess.blog.entity.model.ArticleModel; import cn.celess.blog.entity.model.PageData; import cn.celess.blog.entity.request.ArticleReq; import cn.celess.blog.mapper.ArticleMapper; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import net.sf.json.JSONObject; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -260,55 +262,39 @@ public class ArticleControllerTest extends BaseTest { @Test public void adminArticles() { - String token; + ObjectMapper mapper = new ObjectMapper(); try { - // 未登录 - mockMvc.perform(get("/admin/articles?page=1&count=10")) - .andExpect(status().isOk()) - .andDo(result -> { - assertEquals(HAVE_NOT_LOG_IN.getCode(), - JSONObject.fromObject(result.getResponse().getContentAsString()).getInt(Code) - ); - }); + getMockData("/admin/articles?page=1&count=10").andExpect(result -> + assertEquals(HAVE_NOT_LOG_IN.getCode(), mapper.readValue(result.getResponse().getContentAsString(), Response.class).getCode()) + ); // User权限登陆 - token = userLogin(); - mockMvc.perform(get("/admin/articles?page=1&count=10") - .header("Authorization", token)) - .andExpect(status().isOk()) - .andDo(result -> { - JSONObject object = JSONObject.fromObject(result.getResponse().getContentAsString()); - assertEquals(PERMISSION_ERROR.getCode(), object.getInt(Code)); - }); - - token = adminLogin(); + getMockData("/admin/articles?page=1&count=10", userLogin()).andDo(result -> + assertEquals(PERMISSION_ERROR.getCode(), mapper.readValue(result.getResponse().getContentAsString(), Response.class).getCode()) + ); // admin权限登陆 - mockMvc.perform(get("/admin/articles?page=1&count=10") - .header("Authorization", token)) - .andExpect(status().isOk()) - .andDo(result -> { - JSONObject adminLogin = JSONObject.fromObject(result.getResponse().getContentAsString()); - assertEquals(SUCCESS.getCode(), adminLogin.getInt(Code)); - assertNotNull(adminLogin.getString(Result)); - // 判断pageInfo是否包装完全 - PageData pageData = (PageData) JSONObject.toBean(adminLogin.getJSONObject(Result), PageData.class); - assertNotEquals(0, pageData.getTotal()); - assertEquals(1, pageData.getPageNum()); - assertEquals(10, pageData.getPageSize()); - // 内容完整 - for (Object arc : pageData.getList()) { - ArticleModel a = (ArticleModel) JSONObject.toBean(JSONObject.fromObject(arc), ArticleModel.class); - assertNotNull(a.getTitle()); - assertNotNull(a.getId()); - assertNotNull(a.getOriginal()); - assertNotNull(a.getPublishDateFormat()); - assertNotNull(a.getOpen()); - assertNotNull(a.getReadingNumber()); - assertNotNull(a.getLikeCount()); - assertNotNull(a.getDislikeCount()); - assertNull(a.getMdContent()); - } - }); + getMockData("/admin/articles?page=1&count=10", adminLogin()).andDo(result -> { + Response> response = mapper.readValue(result.getResponse().getContentAsString(), new TypeReference>>(){}); + assertEquals(SUCCESS.getCode(), response.getCode()); + assertNotNull(response.getResult()); + // 判断pageInfo是否包装完全 + PageData pageData = response.getResult(); + assertNotEquals(0, pageData.getTotal()); + assertEquals(1, pageData.getPageNum()); + assertEquals(10, pageData.getPageSize()); + // 内容完整 + for (ArticleModel a : pageData.getList()) { + assertNotNull(a.getTitle()); + assertNotNull(a.getId()); + assertNotNull(a.getOriginal()); + assertNotNull(a.getPublishDateFormat()); + assertNotNull(a.getOpen()); + assertNotNull(a.getReadingNumber()); + assertNotNull(a.getLikeCount()); + assertNotNull(a.getDislikeCount()); + assertNull(a.getMdContent()); + } + }); } catch (Exception e) { e.printStackTrace(); }