001package edu.pdx.cs.joy.grader.canvas; 002 003import org.junit.jupiter.api.Test; 004 005import java.io.IOException; 006import java.io.InputStreamReader; 007import java.util.List; 008import java.util.Objects; 009import java.util.Optional; 010 011import static org.hamcrest.MatcherAssert.assertThat; 012import static org.hamcrest.Matchers.*; 013 014public class CanvasGradesCSVParserTest { 015 016 @Test 017 void canCreateAssignmentFromText() { 018 String assignmentText = "Name (123)"; 019 GradesFromCanvas.CanvasAssignment assignment = CanvasGradesCSVParser.createAssignment(assignmentText); 020 assertThat(assignment.getName(), equalTo("Name")); 021 assertThat(assignment.getId(), equalTo(123)); 022 } 023 024 @Test 025 void canCreateAssignmentFromMultiWordText() { 026 String assignmentText = "Two Names (123)"; 027 GradesFromCanvas.CanvasAssignment assignment = CanvasGradesCSVParser.createAssignment(assignmentText); 028 assertThat(assignment.getName(), equalTo("Two Names")); 029 assertThat(assignment.getId(), equalTo(123)); 030 } 031 032 @Test 033 void canReadAssignmentsFromCSV() throws IOException { 034 CanvasGradesCSVParser parser = createParserFromResource(); 035 List<GradesFromCanvas.CanvasAssignment> assignments = parser.getAssignments(); 036 037 GradesFromCanvas.CanvasAssignment endOfTermSurvey = getAssignment(assignments, "End of Term Survey"); 038 assertThat(endOfTermSurvey.getId(), equalTo(897970)); 039 assertThat(endOfTermSurvey.getPointsPossible(), equalTo(3.00)); 040 041 GradesFromCanvas.CanvasAssignment midtermSurvey = getAssignment(assignments, "Midterm Survey"); 042 assertThat(midtermSurvey.getId(), equalTo(897968)); 043 assertThat(midtermSurvey.getPointsPossible(), equalTo(3.00)); 044 045 GradesFromCanvas.CanvasAssignment project1POA = getAssignment(assignments, "Project 1 POA"); 046 assertThat(project1POA.getId(), equalTo(897974)); 047 assertThat(project1POA.getPointsPossible(), equalTo(1.00)); 048 } 049 050 private CanvasGradesCSVParser createParserFromResource() throws IOException { 051 return new CanvasGradesCSVParser(new InputStreamReader(Objects.requireNonNull(getClass().getResourceAsStream("canvas.csv")))); 052 } 053 054 @Test 055 void canReadStudentsFromCSV() throws IOException { 056 CanvasGradesCSVParser parser = createParserFromResource(); 057 List<GradesFromCanvas.CanvasStudent> students = parser.getGrades().getStudents(); 058 assertThat(students.get(0).getFirstName(), equalTo("First1")); 059 assertThat(students.get(0).getLastName(), equalTo("Last1")); 060 assertThat(students.get(0).getLoginId(), equalTo("student1")); 061 assertThat(students.get(0).getCanvasId(), equalTo("11111")); 062 assertThat(students.get(0).getSection(), equalTo("CS-410P-021: TOP: Joy Coding Java & Android")); 063 assertThat(students.get(1).getFirstName(), equalTo("First2")); 064 assertThat(students.get(1).getLastName(), equalTo("Last2")); 065 assertThat(students.get(1).getLoginId(), equalTo("student2")); 066 assertThat(students.get(1).getCanvasId(), equalTo("22222")); 067 assertThat(students.get(1).getSection(), equalTo("CS-510-045: TOP: Joy Coding Java & Android")); 068 } 069 070 @Test 071 void testStudentIsNotReadFromCSV() throws IOException { 072 CanvasGradesCSVParser parser = createParserFromResource(); 073 List<GradesFromCanvas.CanvasStudent> students = parser.getGrades().getStudents(); 074 assertThat(students, hasSize(2)); 075 } 076 077 @Test 078 void canReadGradesFromCSV() throws IOException { 079 CanvasGradesCSVParser parser = createParserFromResource(); 080 List<GradesFromCanvas.CanvasAssignment> assignments = parser.getAssignments(); 081 List<GradesFromCanvas.CanvasStudent> students = parser.getGrades().getStudents(); 082 083 GradesFromCanvas.CanvasAssignment quiz1 = getAssignment(assignments, "Quiz 1: Source Code Management with GitHub"); 084 assertThat(students.get(0).getScore(quiz1), equalTo(3.00)); 085 assertThat(students.get(1).getScore(quiz1), equalTo(2.85)); 086 087 GradesFromCanvas.CanvasAssignment quiz2 = getAssignment(assignments, "Quiz 3: Unit Testing and Test-Driven Development"); 088 assertThat(students.get(0).getScore(quiz2), nullValue()); 089 assertThat(students.get(1).getScore(quiz2), equalTo(2.80)); 090 } 091 092 private GradesFromCanvas.CanvasAssignment getAssignment(List<GradesFromCanvas.CanvasAssignment> assignments, String assignmentName) { 093 Optional<GradesFromCanvas.CanvasAssignment> optional = assignments.stream().filter(assignment -> assignment.getName().equals(assignmentName)).findFirst(); 094 return optional.orElseThrow(() -> new IllegalStateException("Can't find assignment \"" + assignmentName + "\"")); 095 } 096}