001package edu.pdx.cs.joy.grader.canvas;
002
003import edu.pdx.cs.joy.grader.gradebook.Assignment;
004import edu.pdx.cs.joy.grader.gradebook.GradeBook;
005import edu.pdx.cs.joy.grader.gradebook.Student;
006import org.junit.jupiter.api.Test;
007
008import java.io.IOException;
009import java.io.StringReader;
010import java.io.StringWriter;
011import java.util.List;
012
013import static org.hamcrest.MatcherAssert.assertThat;
014import static org.hamcrest.Matchers.equalTo;
015import static org.hamcrest.Matchers.hasSize;
016
017public class CanvasGradesCSVGeneratorTest {
018
019  @Test
020  void canvasCSVHasStudentName() throws IOException {
021    GradeBook book = new GradeBook("Test");
022    String firstName = "First Name";
023    String lastName = "Last Name";
024    book.addStudent(new Student("id").setFirstName(firstName).setLastName(lastName));
025
026    CanvasGradesCSVParser parser = convertToCSVAndBack(book);
027    List<GradesFromCanvas.CanvasStudent> students = parser.getGrades().getStudents();
028    assertThat(students, hasSize(1));
029
030    GradesFromCanvas.CanvasStudent student = students.get(0);
031    assertThat(student.getFirstName(), equalTo(firstName));
032    assertThat(student.getLastName(), equalTo(lastName));
033  }
034
035  @Test
036  void canvasCSVHasStudentCanvasId() throws IOException {
037    GradeBook book = new GradeBook("Test");
038    String canvasId = "Canvas Id";
039    book.addStudent(new Student("id")
040      .setFirstName("First Name")
041      .setLastName("Last Name")
042      .setCanvasId(canvasId));
043
044    CanvasGradesCSVParser parser = convertToCSVAndBack(book);
045    List<GradesFromCanvas.CanvasStudent> students = parser.getGrades().getStudents();
046    assertThat(students, hasSize(1));
047
048    GradesFromCanvas.CanvasStudent student = students.get(0);
049    assertThat(student.getCanvasId(), equalTo(canvasId));
050  }
051
052  @Test
053  void canvasCSVHasStudentSection() throws IOException {
054    GradeBook book = new GradeBook("Test");
055    String sectionName = "Section Name";
056    book.setSectionName(Student.Section.UNDERGRADUATE, sectionName);
057    book.addStudent(new Student("id")
058      .setFirstName("First Name")
059      .setLastName("Last Name")
060      .setCanvasId("Canvas Id")
061      .setEnrolledSection(Student.Section.UNDERGRADUATE));
062
063    CanvasGradesCSVParser parser = convertToCSVAndBack(book);
064    List<GradesFromCanvas.CanvasStudent> students = parser.getGrades().getStudents();
065    assertThat(students, hasSize(1));
066
067    GradesFromCanvas.CanvasStudent student = students.get(0);
068    assertThat(student.getSection(), equalTo(sectionName));
069  }
070
071  @Test
072  void canvasCSVHasAssignment() throws IOException {
073    GradeBook book = new GradeBook("Test");
074    String assignmentName = "Test Assignment";
075    double points = 3.0;
076    int canvasId = 12345;
077    book.addAssignment(new Assignment(assignmentName, points).setCanvasId(canvasId));
078
079    CanvasGradesCSVParser parser = convertToCSVAndBack(book);
080    List<GradesFromCanvas.CanvasAssignment> assignments = parser.getAssignments();
081
082    assertThat(assignments, hasSize(1));
083
084    GradesFromCanvas.CanvasAssignment canvasAssignment = assignments.get(0);
085    assertThat(canvasAssignment.getName(), equalTo(assignmentName));
086    assertThat(canvasAssignment.getPointsPossible(), equalTo(points));
087    assertThat(canvasAssignment.getId(), equalTo(canvasId));
088  }
089
090  private CanvasGradesCSVParser convertToCSVAndBack(GradeBook book) throws IOException {
091    StringWriter sw = new StringWriter();
092    CanvasGradesCSVGenerator generator = new CanvasGradesCSVGenerator(sw);
093    generator.generate(book);
094
095    String csv = sw.toString();
096    return new CanvasGradesCSVParser(new StringReader(csv));
097  }
098}