Commit 614d0a4f authored by Liang Ding's avatar Liang Ding Committed by Vanessa

#12274 添加单元测试以便排查 bug

parent e27ae23c
...@@ -50,7 +50,7 @@ import java.util.Set; ...@@ -50,7 +50,7 @@ import java.util.Set;
* Category console request processing. * Category console request processing.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.1.0.1, Apr 1, 2017 * @version 1.1.1.1, Apr 22, 2017
* @since 2.0.0 * @since 2.0.0
*/ */
@RequestProcessor @RequestProcessor
...@@ -276,6 +276,12 @@ public class CategoryConsole { ...@@ -276,6 +276,12 @@ public class CategoryConsole {
@RequestProcessing(value = "/console/category/", method = HTTPRequestMethod.PUT) @RequestProcessing(value = "/console/category/", method = HTTPRequestMethod.PUT)
public void updateCategory(final HttpServletRequest request, final HttpServletResponse response, final HTTPRequestContext context) public void updateCategory(final HttpServletRequest request, final HttpServletResponse response, final HTTPRequestContext context)
throws Exception { throws Exception {
if (!userQueryService.isAdminLoggedIn(request)) {
response.sendError(HttpServletResponse.SC_FORBIDDEN);
return;
}
final JSONRenderer renderer = new JSONRenderer(); final JSONRenderer renderer = new JSONRenderer();
context.setRenderer(renderer); context.setRenderer(renderer);
...@@ -293,7 +299,6 @@ public class CategoryConsole { ...@@ -293,7 +299,6 @@ public class CategoryConsole {
final List<JSONObject> tags = new ArrayList<>(); final List<JSONObject> tags = new ArrayList<>();
final Set<String> deduplicate = new HashSet<>(); final Set<String> deduplicate = new HashSet<>();
for (int i = 0; i < tagTitles.length; i++) { for (int i = 0; i < tagTitles.length; i++) {
String tagTitle = StringUtils.trim(tagTitles[i]); String tagTitle = StringUtils.trim(tagTitles[i]);
if (StringUtils.isBlank(tagTitle)) { if (StringUtils.isBlank(tagTitle)) {
...@@ -401,6 +406,12 @@ public class CategoryConsole { ...@@ -401,6 +406,12 @@ public class CategoryConsole {
@RequestProcessing(value = "/console/category/", method = HTTPRequestMethod.POST) @RequestProcessing(value = "/console/category/", method = HTTPRequestMethod.POST)
public void addCategory(final HttpServletRequest request, final HttpServletResponse response, final HTTPRequestContext context) public void addCategory(final HttpServletRequest request, final HttpServletResponse response, final HTTPRequestContext context)
throws Exception { throws Exception {
if (!userQueryService.isAdminLoggedIn(request)) {
response.sendError(HttpServletResponse.SC_FORBIDDEN);
return;
}
final JSONRenderer renderer = new JSONRenderer(); final JSONRenderer renderer = new JSONRenderer();
context.setRenderer(renderer); context.setRenderer(renderer);
...@@ -529,15 +540,15 @@ public class CategoryConsole { ...@@ -529,15 +540,15 @@ public class CategoryConsole {
@RequestProcessing(value = "/console/categories/*/*/*"/* Requests.PAGINATION_PATH_PATTERN */, method = HTTPRequestMethod.GET) @RequestProcessing(value = "/console/categories/*/*/*"/* Requests.PAGINATION_PATH_PATTERN */, method = HTTPRequestMethod.GET)
public void getCategories(final HttpServletRequest request, final HttpServletResponse response, final HTTPRequestContext context) public void getCategories(final HttpServletRequest request, final HttpServletResponse response, final HTTPRequestContext context)
throws Exception { throws Exception {
final JSONRenderer renderer = new JSONRenderer();
context.setRenderer(renderer);
if (!userQueryService.isAdminLoggedIn(request)) { if (!userQueryService.isAdminLoggedIn(request)) {
response.sendError(HttpServletResponse.SC_FORBIDDEN); response.sendError(HttpServletResponse.SC_FORBIDDEN);
return; return;
} }
final JSONRenderer renderer = new JSONRenderer();
context.setRenderer(renderer);
try { try {
final String requestURI = request.getRequestURI(); final String requestURI = request.getRequestURI();
final String path = requestURI.substring((Latkes.getContextPath() + "/console/categories/").length()); final String path = requestURI.substring((Latkes.getContextPath() + "/console/categories/").length());
......
...@@ -37,7 +37,7 @@ import org.b3log.latke.servlet.renderer.HTTP500Renderer; ...@@ -37,7 +37,7 @@ import org.b3log.latke.servlet.renderer.HTTP500Renderer;
* Mock dispatcher servlet for unit tests. * Mock dispatcher servlet for unit tests.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.0, Nov 1, 2016 * @version 1.0.0.1, Apr 22, 2017
* @since 1.7.0 * @since 1.7.0
*/ */
public class MockDispatcherServlet { public class MockDispatcherServlet {
...@@ -45,7 +45,7 @@ public class MockDispatcherServlet { ...@@ -45,7 +45,7 @@ public class MockDispatcherServlet {
/** /**
* the holder of all the sys-handler. * the holder of all the sys-handler.
*/ */
public static final List<Handler> SYS_HANDLER = new ArrayList<Handler>(); private static final List<Handler> SYS_HANDLER = new ArrayList<>();
public void init() throws ServletException { public void init() throws ServletException {
SYS_HANDLER.add(new RequestPrepareHandler()); SYS_HANDLER.add(new RequestPrepareHandler());
...@@ -55,7 +55,7 @@ public class MockDispatcherServlet { ...@@ -55,7 +55,7 @@ public class MockDispatcherServlet {
SYS_HANDLER.add(new MethodInvokeHandler()); SYS_HANDLER.add(new MethodInvokeHandler());
} }
protected void service(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException { public void service(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
final HTTPRequestContext httpRequestContext = new HTTPRequestContext(); final HTTPRequestContext httpRequestContext = new HTTPRequestContext();
httpRequestContext.setRequest(req); httpRequestContext.setRequest(req);
......
package org.b3log.solo.processor.console;
import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys;
import org.b3log.latke.model.User;
import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.model.Category;
import org.b3log.solo.processor.MockDispatcherServlet;
import org.b3log.solo.service.InitService;
import org.b3log.solo.service.UserQueryService;
import org.json.JSONObject;
import org.testng.Assert;
import org.testng.annotations.Test;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.StringReader;
import java.io.StringWriter;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
/**
* {@link CategoryConsole} test case.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.0, Apr 22, 2017
* @since 2.1.0
*/
@Test(suiteName = "processor")
public class CategoryConsoleTestCase extends AbstractTestCase {
/**
* Init.
*
* @throws Exception exception
*/
@Test
public void init() throws Exception {
final InitService initService = getInitService();
final JSONObject requestJSONObject = new JSONObject();
requestJSONObject.put(User.USER_EMAIL, "test@gmail.com");
requestJSONObject.put(User.USER_NAME, "Admin");
requestJSONObject.put(User.USER_PASSWORD, "pass");
initService.init(requestJSONObject);
final UserQueryService userQueryService = getUserQueryService();
Assert.assertNotNull(userQueryService.getUserByEmail("test@gmail.com"));
}
/**
* addCategory.
*
* @throws Exception exception
*/
@Test(dependsOnMethods = "init")
public void addCategory() throws Exception {
final HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("/console/category/");
when(request.getMethod()).thenReturn("POST");
final JSONObject adminUser = getUserQueryService().getAdmin();
final HttpSession httpSession = mock(HttpSession.class);
when(httpSession.getAttribute(User.USER)).thenReturn(adminUser);
when(request.getSession(false)).thenReturn(httpSession);
final JSONObject requestJSON = new JSONObject();
requestJSON.put(Category.CATEGORY_T_TAGS, "Solo");
requestJSON.put(Category.CATEGORY_TITLE, "分类1");
requestJSON.put(Category.CATEGORY_URI, "cate1");
final BufferedReader reader = new BufferedReader(new StringReader(requestJSON.toString()));
when(request.getReader()).thenReturn(reader);
final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet();
dispatcherServlet.init();
final StringWriter stringWriter = new StringWriter();
final PrintWriter printWriter = new PrintWriter(stringWriter);
final HttpServletResponse response = mock(HttpServletResponse.class);
when(response.getWriter()).thenReturn(printWriter);
dispatcherServlet.service(request, response);
final String content = stringWriter.toString();
Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
}
/**
* updateCategory.
*
* @throws Exception exception
*/
@Test(dependsOnMethods = "addCategory")
public void updateCategory() throws Exception {
final HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("/console/category/");
when(request.getMethod()).thenReturn("PUT");
final JSONObject adminUser = getUserQueryService().getAdmin();
final HttpSession httpSession = mock(HttpSession.class);
when(httpSession.getAttribute(User.USER)).thenReturn(adminUser);
when(request.getSession(false)).thenReturn(httpSession);
JSONObject category = getCategoryQueryService().getByTitle("分类1");
final JSONObject requestJSON = new JSONObject();
requestJSON.put(Category.CATEGORY_T_TAGS, "Solo");
requestJSON.put(Keys.OBJECT_ID, category.optString(Keys.OBJECT_ID));
requestJSON.put(Category.CATEGORY_TITLE, "新的分类1");
final BufferedReader reader = new BufferedReader(new StringReader(requestJSON.toString()));
when(request.getReader()).thenReturn(reader);
final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet();
dispatcherServlet.init();
final StringWriter stringWriter = new StringWriter();
final PrintWriter printWriter = new PrintWriter(stringWriter);
final HttpServletResponse response = mock(HttpServletResponse.class);
when(response.getWriter()).thenReturn(printWriter);
dispatcherServlet.service(request, response);
final String content = stringWriter.toString();
Assert.assertTrue(StringUtils.contains(content, "sc\":true"));
category = getCategoryQueryService().getByTitle("分类1");
Assert.assertNull(category);
category = getCategoryQueryService().getByTitle("新的分类1");
Assert.assertNotNull(category);
//Assert.assertEquals(category.optInt(Category.CATEGORY_TAG_CNT), 1); // https://github.com/b3log/solo/issues/12274
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment