From d66db56c86f0d568a30856361045a4cfa3417a1a Mon Sep 17 00:00:00 2001 From: Nanne Baars Date: Sun, 16 Apr 2017 07:28:35 +0200 Subject: [PATCH] Added test for LessonMenuService. --- .../webgoat/service/LessonMenuService.java | 3 +- .../service/LessonMenuServiceTest.java | 80 +++++++++++++++++++ 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 webgoat-container/src/test/java/org/owasp/webgoat/service/LessonMenuServiceTest.java diff --git a/webgoat-container/src/main/java/org/owasp/webgoat/service/LessonMenuService.java b/webgoat-container/src/main/java/org/owasp/webgoat/service/LessonMenuService.java index 843a28f3c..c9f316cf6 100644 --- a/webgoat-container/src/main/java/org/owasp/webgoat/service/LessonMenuService.java +++ b/webgoat-container/src/main/java/org/owasp/webgoat/service/LessonMenuService.java @@ -55,6 +55,7 @@ import java.util.stream.Collectors; @AllArgsConstructor public class LessonMenuService { + public static final String URL_LESSONMENU_MVC = "/service/lessonmenu.mvc"; private final Course course; private UserTracker userTracker; @@ -63,7 +64,7 @@ public class LessonMenuService { * * @return a {@link java.util.List} object. */ - @RequestMapping(path = "/service/lessonmenu.mvc", produces = "application/json") + @RequestMapping(path = URL_LESSONMENU_MVC, produces = "application/json") public @ResponseBody List showLeftNav() { diff --git a/webgoat-container/src/test/java/org/owasp/webgoat/service/LessonMenuServiceTest.java b/webgoat-container/src/test/java/org/owasp/webgoat/service/LessonMenuServiceTest.java new file mode 100644 index 000000000..17a51a948 --- /dev/null +++ b/webgoat-container/src/test/java/org/owasp/webgoat/service/LessonMenuServiceTest.java @@ -0,0 +1,80 @@ +package org.owasp.webgoat.service; + +import com.beust.jcommander.internal.Lists; +import org.hamcrest.CoreMatchers; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; +import org.owasp.webgoat.lessons.Category; +import org.owasp.webgoat.lessons.NewLesson; +import org.owasp.webgoat.session.Course; +import org.owasp.webgoat.session.LessonTracker; +import org.owasp.webgoat.session.UserTracker; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.when; +import static org.owasp.webgoat.service.LessonMenuService.URL_LESSONMENU_MVC; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup; + +/** + * @author nbaars + * @since 4/16/17. + */ +@RunWith(MockitoJUnitRunner.class) +public class LessonMenuServiceTest { + + @Mock + private Course course; + @Mock + private UserTracker userTracker; + private MockMvc mockMvc; + + @Before + public void setup() { + this.mockMvc = standaloneSetup(new LessonMenuService(course, userTracker)).build(); + } + + @Test + public void lessonsShouldBeOrdered() throws Exception { + NewLesson l1 = Mockito.mock(NewLesson.class); + NewLesson l2 = Mockito.mock(NewLesson.class); + when(l1.getTitle()).thenReturn("ZA"); + when(l2.getTitle()).thenReturn("AA"); + when(l1.getCategory()).thenReturn(Category.ACCESS_CONTROL); + when(l2.getCategory()).thenReturn(Category.ACCESS_CONTROL); + LessonTracker lessonTracker = Mockito.mock(LessonTracker.class); + when(lessonTracker.isLessonSolved()).thenReturn(false); + when(course.getLessons(any())).thenReturn(Lists.newArrayList(l1, l2)); + when(course.getCategories()).thenReturn(Lists.newArrayList(Category.ACCESS_CONTROL)); + when(userTracker.getLessonTracker(any())).thenReturn(lessonTracker); + + mockMvc.perform(MockMvcRequestBuilders.get(URL_LESSONMENU_MVC)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$[0].children[0].name", CoreMatchers.is("AA"))) + .andExpect(jsonPath("$[0].children[1].name", CoreMatchers.is("ZA"))); + } + + @Test + public void lessonCompleted() throws Exception { + NewLesson l1 = Mockito.mock(NewLesson.class); + when(l1.getTitle()).thenReturn("ZA"); + when(l1.getCategory()).thenReturn(Category.ACCESS_CONTROL); + LessonTracker lessonTracker = Mockito.mock(LessonTracker.class); + when(lessonTracker.isLessonSolved()).thenReturn(true); + when(course.getLessons(any())).thenReturn(Lists.newArrayList(l1)); + when(course.getCategories()).thenReturn(Lists.newArrayList(Category.ACCESS_CONTROL)); + when(userTracker.getLessonTracker(any())).thenReturn(lessonTracker); + + mockMvc.perform(MockMvcRequestBuilders.get(URL_LESSONMENU_MVC)) + .andExpect(status().isOk()).andDo(print()) + .andExpect(jsonPath("$[0].children[0].complete", CoreMatchers.is(true))); + } +} \ No newline at end of file