Fix report card (#1845)
* fix: report card Fix and simplify calculation of the number of assignments a user solved. Rename `UserTracker` to `UserProgress` Rename `LessonTracker` to `LessonProgress` Rename tables in database
This commit is contained in:
@ -32,8 +32,8 @@ import org.owasp.webgoat.container.i18n.Messages;
|
||||
import org.owasp.webgoat.container.i18n.PluginMessages;
|
||||
import org.owasp.webgoat.container.session.UserSessionData;
|
||||
import org.owasp.webgoat.container.session.WebSession;
|
||||
import org.owasp.webgoat.container.users.UserTracker;
|
||||
import org.owasp.webgoat.container.users.UserTrackerRepository;
|
||||
import org.owasp.webgoat.container.users.UserProgress;
|
||||
import org.owasp.webgoat.container.users.UserProgressRepository;
|
||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
import org.springframework.test.util.ReflectionTestUtils;
|
||||
import org.springframework.web.servlet.i18n.FixedLocaleResolver;
|
||||
@ -41,8 +41,8 @@ import org.springframework.web.servlet.i18n.FixedLocaleResolver;
|
||||
// Do not remove is the base class for all assignments tests
|
||||
public class AssignmentEndpointTest {
|
||||
|
||||
@Mock protected UserTracker userTracker;
|
||||
@Mock protected UserTrackerRepository userTrackerRepository;
|
||||
@Mock protected UserProgress userTracker;
|
||||
@Mock protected UserProgressRepository userTrackerRepository;
|
||||
@Mock protected WebSession webSession;
|
||||
@Mock protected UserSessionData userSessionData;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
package org.owasp.webgoat.container.service;
|
||||
package org.owasp.webgoat.container.report;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.is;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
@ -18,22 +18,23 @@ import org.owasp.webgoat.container.i18n.PluginMessages;
|
||||
import org.owasp.webgoat.container.lessons.Lesson;
|
||||
import org.owasp.webgoat.container.session.Course;
|
||||
import org.owasp.webgoat.container.session.WebSession;
|
||||
import org.owasp.webgoat.container.users.LessonTracker;
|
||||
import org.owasp.webgoat.container.users.UserTracker;
|
||||
import org.owasp.webgoat.container.users.UserTrackerRepository;
|
||||
import org.owasp.webgoat.container.users.LessonProgress;
|
||||
import org.owasp.webgoat.container.users.UserProgress;
|
||||
import org.owasp.webgoat.container.users.UserProgressRepository;
|
||||
import org.springframework.security.test.context.support.WithMockUser;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
public class ReportCardServiceTest {
|
||||
// TODO: Rewrite this as end-to-end test this mocks too many classes
|
||||
public class ReportCardControllerTest {
|
||||
|
||||
private MockMvc mockMvc;
|
||||
@Mock private Course course;
|
||||
@Mock private UserTracker userTracker;
|
||||
@Mock private UserProgress userTracker;
|
||||
@Mock private Lesson lesson;
|
||||
@Mock private LessonTracker lessonTracker;
|
||||
@Mock private UserTrackerRepository userTrackerRepository;
|
||||
@Mock private LessonProgress lessonTracker;
|
||||
@Mock private UserProgressRepository userTrackerRepository;
|
||||
@Mock private WebSession websession;
|
||||
@Mock private PluginMessages pluginMessages;
|
||||
|
||||
@ -41,7 +42,7 @@ public class ReportCardServiceTest {
|
||||
void setup() {
|
||||
this.mockMvc =
|
||||
standaloneSetup(
|
||||
new ReportCardService(websession, userTrackerRepository, course, pluginMessages))
|
||||
new ReportCardController(websession, userTrackerRepository, course, pluginMessages))
|
||||
.build();
|
||||
when(pluginMessages.getMessage(anyString())).thenReturn("Test");
|
||||
}
|
||||
@ -54,12 +55,11 @@ public class ReportCardServiceTest {
|
||||
when(course.getTotalOfAssignments()).thenReturn(10);
|
||||
when(course.getLessons()).thenAnswer(x -> List.of(lesson));
|
||||
when(userTrackerRepository.findByUser(any())).thenReturn(userTracker);
|
||||
when(userTracker.getLessonTracker(any(Lesson.class))).thenReturn(lessonTracker);
|
||||
when(userTracker.getLessonProgress(any(Lesson.class))).thenReturn(lessonTracker);
|
||||
mockMvc
|
||||
.perform(MockMvcRequestBuilders.get("/service/reportcard.mvc"))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$.totalNumberOfLessons", is(1)))
|
||||
.andExpect(jsonPath("$.solvedLessons", is(0)))
|
||||
.andExpect(jsonPath("$.numberOfAssignmentsSolved", is(0)))
|
||||
.andExpect(jsonPath("$.totalNumberOfAssignments", is(10)))
|
||||
.andExpect(jsonPath("$.lessonStatistics[0].name", is("Test")))
|
@ -41,9 +41,9 @@ import org.owasp.webgoat.container.lessons.Category;
|
||||
import org.owasp.webgoat.container.lessons.Lesson;
|
||||
import org.owasp.webgoat.container.session.Course;
|
||||
import org.owasp.webgoat.container.session.WebSession;
|
||||
import org.owasp.webgoat.container.users.LessonTracker;
|
||||
import org.owasp.webgoat.container.users.UserTracker;
|
||||
import org.owasp.webgoat.container.users.UserTrackerRepository;
|
||||
import org.owasp.webgoat.container.users.LessonProgress;
|
||||
import org.owasp.webgoat.container.users.UserProgress;
|
||||
import org.owasp.webgoat.container.users.UserProgressRepository;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||
|
||||
@ -51,11 +51,11 @@ import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||
public class LessonMenuServiceTest {
|
||||
|
||||
@Mock(lenient = true)
|
||||
private LessonTracker lessonTracker;
|
||||
private LessonProgress lessonTracker;
|
||||
|
||||
@Mock private Course course;
|
||||
@Mock private UserTracker userTracker;
|
||||
@Mock private UserTrackerRepository userTrackerRepository;
|
||||
@Mock private UserProgress userTracker;
|
||||
@Mock private UserProgressRepository userTrackerRepository;
|
||||
@Mock private WebSession webSession;
|
||||
private MockMvc mockMvc;
|
||||
|
||||
@ -81,7 +81,7 @@ public class LessonMenuServiceTest {
|
||||
when(lessonTracker.isLessonSolved()).thenReturn(false);
|
||||
when(course.getLessons(any())).thenReturn(Lists.newArrayList(l1, l2));
|
||||
when(course.getCategories()).thenReturn(Lists.newArrayList(Category.A1));
|
||||
when(userTracker.getLessonTracker(any(Lesson.class))).thenReturn(lessonTracker);
|
||||
when(userTracker.getLessonProgress(any(Lesson.class))).thenReturn(lessonTracker);
|
||||
when(userTrackerRepository.findByUser(any())).thenReturn(userTracker);
|
||||
|
||||
mockMvc
|
||||
@ -98,7 +98,7 @@ public class LessonMenuServiceTest {
|
||||
when(lessonTracker.isLessonSolved()).thenReturn(true);
|
||||
when(course.getLessons(any())).thenReturn(Lists.newArrayList(l1));
|
||||
when(course.getCategories()).thenReturn(Lists.newArrayList(Category.A1));
|
||||
when(userTracker.getLessonTracker(any(Lesson.class))).thenReturn(lessonTracker);
|
||||
when(userTracker.getLessonProgress(any(Lesson.class))).thenReturn(lessonTracker);
|
||||
when(userTrackerRepository.findByUser(any())).thenReturn(userTracker);
|
||||
|
||||
mockMvc
|
||||
|
@ -16,9 +16,9 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import org.owasp.webgoat.container.lessons.Assignment;
|
||||
import org.owasp.webgoat.container.lessons.Lesson;
|
||||
import org.owasp.webgoat.container.session.WebSession;
|
||||
import org.owasp.webgoat.container.users.LessonTracker;
|
||||
import org.owasp.webgoat.container.users.UserTracker;
|
||||
import org.owasp.webgoat.container.users.UserTrackerRepository;
|
||||
import org.owasp.webgoat.container.users.LessonProgress;
|
||||
import org.owasp.webgoat.container.users.UserProgress;
|
||||
import org.owasp.webgoat.container.users.UserProgressRepository;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||
@ -60,16 +60,16 @@ class LessonProgressServiceTest {
|
||||
private MockMvc mockMvc;
|
||||
|
||||
@Mock private Lesson lesson;
|
||||
@Mock private UserTracker userTracker;
|
||||
@Mock private LessonTracker lessonTracker;
|
||||
@Mock private UserTrackerRepository userTrackerRepository;
|
||||
@Mock private UserProgress userTracker;
|
||||
@Mock private LessonProgress lessonTracker;
|
||||
@Mock private UserProgressRepository userTrackerRepository;
|
||||
@Mock private WebSession websession;
|
||||
|
||||
@BeforeEach
|
||||
void setup() {
|
||||
Assignment assignment = new Assignment("test", "test", List.of());
|
||||
when(userTrackerRepository.findByUser(any())).thenReturn(userTracker);
|
||||
when(userTracker.getLessonTracker(any(Lesson.class))).thenReturn(lessonTracker);
|
||||
when(userTracker.getLessonProgress(any(Lesson.class))).thenReturn(lessonTracker);
|
||||
when(websession.getCurrentLesson()).thenReturn(lesson);
|
||||
when(lessonTracker.getLessonOverview()).thenReturn(Maps.newHashMap(assignment, true));
|
||||
this.mockMvc =
|
||||
|
@ -10,7 +10,7 @@ import org.assertj.core.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.owasp.webgoat.container.lessons.Assignment;
|
||||
import org.owasp.webgoat.container.lessons.Lesson;
|
||||
import org.owasp.webgoat.container.users.LessonTracker;
|
||||
import org.owasp.webgoat.container.users.LessonProgress;
|
||||
|
||||
/**
|
||||
* ************************************************************************************************
|
||||
@ -49,7 +49,7 @@ class LessonTrackerTest {
|
||||
Lesson lesson = mock(Lesson.class);
|
||||
when(lesson.getAssignments())
|
||||
.thenReturn(List.of(new Assignment("assignment", "assignment", List.of(""))));
|
||||
LessonTracker lessonTracker = new LessonTracker(lesson);
|
||||
LessonProgress lessonTracker = new LessonProgress(lesson);
|
||||
lessonTracker.assignmentSolved("assignment");
|
||||
|
||||
Assertions.assertThat(lessonTracker.isLessonSolved()).isTrue();
|
||||
@ -62,7 +62,7 @@ class LessonTrackerTest {
|
||||
Assignment a2 = new Assignment("a2");
|
||||
List<Assignment> assignments = List.of(a1, a2);
|
||||
when(lesson.getAssignments()).thenReturn(assignments);
|
||||
LessonTracker lessonTracker = new LessonTracker(lesson);
|
||||
LessonProgress lessonTracker = new LessonProgress(lesson);
|
||||
lessonTracker.assignmentSolved("a1");
|
||||
|
||||
Map<Assignment, Boolean> lessonOverview = lessonTracker.getLessonOverview();
|
||||
@ -76,7 +76,7 @@ class LessonTrackerTest {
|
||||
Assignment a1 = new Assignment("a1");
|
||||
List<Assignment> assignments = List.of(a1);
|
||||
when(lesson.getAssignments()).thenReturn(assignments);
|
||||
LessonTracker lessonTracker = new LessonTracker(lesson);
|
||||
LessonProgress lessonTracker = new LessonProgress(lesson);
|
||||
lessonTracker.assignmentSolved("a1");
|
||||
lessonTracker.assignmentSolved("a1");
|
||||
|
||||
|
@ -18,7 +18,7 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
||||
class UserServiceTest {
|
||||
|
||||
@Mock private UserRepository userRepository;
|
||||
@Mock private UserTrackerRepository userTrackerRepository;
|
||||
@Mock private UserProgressRepository userTrackerRepository;
|
||||
@Mock private JdbcTemplate jdbcTemplate;
|
||||
@Mock private Function<String, Flyway> flywayLessons;
|
||||
|
||||
|
@ -34,23 +34,23 @@ class UserTrackerRepositoryTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Autowired private UserTrackerRepository userTrackerRepository;
|
||||
@Autowired private UserProgressRepository userTrackerRepository;
|
||||
|
||||
@Test
|
||||
void saveUserTracker() {
|
||||
UserTracker userTracker = new UserTracker("test");
|
||||
UserProgress userTracker = new UserProgress("test");
|
||||
|
||||
userTrackerRepository.save(userTracker);
|
||||
|
||||
userTracker = userTrackerRepository.findByUser("test");
|
||||
Assertions.assertThat(userTracker.getLessonTracker("test")).isNotNull();
|
||||
Assertions.assertThat(userTracker.getLessonProgress("test")).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void solvedAssignmentsShouldBeSaved() {
|
||||
UserTracker userTracker = new UserTracker("test");
|
||||
UserProgress userTracker = new UserProgress("test");
|
||||
TestLesson lesson = new TestLesson();
|
||||
userTracker.getLessonTracker(lesson);
|
||||
userTracker.getLessonProgress(lesson);
|
||||
userTracker.assignmentFailed(lesson);
|
||||
userTracker.assignmentFailed(lesson);
|
||||
userTracker.assignmentSolved(lesson, "test");
|
||||
@ -63,9 +63,9 @@ class UserTrackerRepositoryTest {
|
||||
|
||||
@Test
|
||||
void saveAndLoadShouldHaveCorrectNumberOfAttempts() {
|
||||
UserTracker userTracker = new UserTracker("test");
|
||||
UserProgress userTracker = new UserProgress("test");
|
||||
TestLesson lesson = new TestLesson();
|
||||
userTracker.getLessonTracker(lesson);
|
||||
userTracker.getLessonProgress(lesson);
|
||||
userTracker.assignmentFailed(lesson);
|
||||
userTracker.assignmentFailed(lesson);
|
||||
userTrackerRepository.saveAndFlush(userTracker);
|
||||
@ -75,6 +75,6 @@ class UserTrackerRepositoryTest {
|
||||
userTracker.assignmentFailed(lesson);
|
||||
userTrackerRepository.saveAndFlush(userTracker);
|
||||
|
||||
Assertions.assertThat(userTracker.getLessonTracker(lesson).getNumberOfAttempts()).isEqualTo(4);
|
||||
Assertions.assertThat(userTracker.getLessonProgress(lesson).getNumberOfAttempts()).isEqualTo(4);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user