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 static org.hamcrest.CoreMatchers.equalTo;
009import static org.hamcrest.CoreMatchers.hasItem;
010import static org.hamcrest.MatcherAssert.assertThat;
011import static org.junit.jupiter.api.Assertions.assertThrows;
012
013public class GradesFromCanvasImporterTest extends CanvasTestCase {
014
015  @Test
016  public void errorWhenCanvasQuizDoesNotExistInGradebook() {
017    String studentId = "studentId";
018
019    GradeBook gradebook = new GradeBook("test");
020    Student student = new Student(studentId);
021    gradebook.addStudent(student);
022
023    GradesFromCanvas canvas = new GradesFromCanvas();
024    GradesFromCanvas.CanvasAssignment assignment = new GradesFromCanvas.CanvasAssignment("quiz", 1234);
025    GradesFromCanvas.CanvasStudent canvasStudent = createCanvasStudentWithId(studentId);
026    canvasStudent.setScore(assignment, 3.4);
027    canvas.addStudent(canvasStudent);
028
029    assertThrows(IllegalStateException.class, () ->
030      GradesFromCanvasImporter.importGradesFromCanvas(canvas, gradebook)
031    );
032  }
033
034  private GradesFromCanvas.CanvasStudent createCanvasStudentWithId(String studentId) {
035    return createCanvasStudent("First", "Last", studentId);
036  }
037
038  @Test
039  public void importScoreFromCanvasWhenStudentIdMatchesCanvasId() {
040    String studentId = "studentId";
041    String quizName = "quiz";
042    double score = 3.4;
043
044    GradeBook gradebook = new GradeBook("test");
045    gradebook.addAssignment(new Assignment(quizName, 4.0));
046    Student student = new Student(studentId);
047    gradebook.addStudent(student);
048
049    GradesFromCanvas canvas = new GradesFromCanvas();
050    GradesFromCanvas.CanvasAssignment assignment = new GradesFromCanvas.CanvasAssignment(quizName, 1234);
051    GradesFromCanvas.CanvasStudent canvasStudent = createCanvasStudentWithId(studentId);
052    canvasStudent.setScore(assignment, score);
053    canvas.addStudent(canvasStudent);
054
055    GradesFromCanvasImporter.importGradesFromCanvas(canvas, gradebook);
056
057    assertThat(student.getGradeNames(), hasItem(quizName));
058    assertThat(student.getGrade(quizName).getScore(), equalTo(score));
059  }
060
061  @Test
062  public void importScoreFromCanvasWhenStudentNameMatchesCanvasName() {
063    String firstName = "first";
064    String lastName = "last";
065
066    String quizName = "quiz";
067    double score = 3.4;
068
069    GradeBook gradebook = new GradeBook("test");
070    gradebook.addAssignment(new Assignment(quizName, 4.0));
071    Student student = new Student("studentId");
072    student.setFirstName(firstName);
073    student.setLastName(lastName);
074    gradebook.addStudent(student);
075
076    GradesFromCanvas canvas = new GradesFromCanvas();
077    GradesFromCanvas.CanvasStudent canvasStudent = createCanvasStudent(firstName, lastName);
078    GradesFromCanvas.CanvasAssignment quiz = new GradesFromCanvas.CanvasAssignment(quizName, 1234);
079    canvasStudent.setScore(quiz, score);
080    canvas.addStudent(canvasStudent);
081
082    GradesFromCanvasImporter.importGradesFromCanvas(canvas, gradebook);
083
084    assertThat(student.getGradeNames(), hasItem(quizName));
085    assertThat(student.getGrade(quizName).getScore(), equalTo(score));
086  }
087
088
089
090}