package edu.pdx.cs410J.grader;
import edu.pdx.cs410J.ParserException;
import org.junit.Test;
import org.w3c.dom.Document;
import javax.xml.transform.TransformerException;
import java.io.ByteArrayInputStream;
import java.io.InputStreamReader;
import java.time.LocalDateTime;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.equalTo;
public class StudentXmlTest {
@Test
public void letterGradeIsPersistedInXml() throws TransformerException, ParserException {
Student student = new Student("test");
LetterGrade letterGrade = LetterGrade.A;
student.setLetterGrade(letterGrade);
Student student2 = writeAndReadStudentAsXml(student);
assertThat(student2.getLetterGrade(), equalTo(letterGrade));
}
private Student writeAndReadStudentAsXml(Student student) throws TransformerException, ParserException {
Document doc = XmlDumper.toXml(student);
byte[] bytes = XmlHelper.getBytesForXmlDocument(doc);
XmlStudentParser parser = new XmlStudentParser(new InputStreamReader(new ByteArrayInputStream(bytes)));
return parser.parseStudent();
}
@Test
public void oneSubmissionIsPersistedInXml() throws TransformerException, ParserException {
Student student = new Student("test");
String assignmentName = "project";
LocalDateTime submissionTime = LocalDateTime.now().minusHours(3).withNano(0);
Grade grade = new Grade(assignmentName, Grade.NO_GRADE);
grade.addSubmissionTime(submissionTime);
student.setGrade(assignmentName, grade);
Student student2 = writeAndReadStudentAsXml(student);
assertThat(student2.getGrade(assignmentName).getSubmissionTimes(), contains(submissionTime));
}
@Test
public void multipleSubmissionsArePersistedInXml() throws TransformerException, ParserException {
Student student = new Student("test");
String assignmentName = "project";
LocalDateTime submissionTime1 = LocalDateTime.now().minusHours(3).withNano(0);
LocalDateTime submissionTime2 = LocalDateTime.now().minusHours(4).withNano(0);
Grade grade = new Grade(assignmentName, Grade.NO_GRADE);
grade.addSubmissionTime(submissionTime1);
grade.addSubmissionTime(submissionTime2);
student.setGrade(assignmentName, grade);
Student student2 = writeAndReadStudentAsXml(student);
assertThat(student2.getGrade(assignmentName).getSubmissionTimes(), contains(submissionTime1, submissionTime2));
}
@Test
public void enrolledUndergraduateSectionIsPersistedInXml() throws TransformerException, ParserException {
Student student = new Student("test");
Student.Section section = Student.Section.UNDERGRADUATE;
student.setEnrolledSection(section);
Student student2 = writeAndReadStudentAsXml(student);
assertThat(student2.getEnrolledSection(), equalTo(section));
}
@Test
public void enrolledGraduateSectionIsPersistedInXml() throws TransformerException, ParserException {
Student student = new Student("test");
Student.Section section = Student.Section.GRADUATE;
student.setEnrolledSection(section);
Student student2 = writeAndReadStudentAsXml(student);
assertThat(student2.getEnrolledSection(), equalTo(section));
}
}