package no.niths.infrastructure.school; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertTrue; import java.util.List; import no.niths.common.config.HibernateConfig; import no.niths.common.config.TestAppConfig; import no.niths.domain.school.Course; import no.niths.domain.school.Subject; import no.niths.domain.school.constants.Weekday; import no.niths.infrastructure.school.interfaces.CourseRepository; import no.niths.infrastructure.school.interfaces.SubjectRepository; import org.hibernate.exception.ConstraintViolationException; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.transaction.TransactionConfiguration; import org.springframework.transaction.annotation.Transactional; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes= { TestAppConfig.class, HibernateConfig.class }) @Transactional @TransactionConfiguration(transactionManager = "transactionManager",defaultRollback=true) public class CourseRepositoryTest { @Autowired private CourseRepository courseRepo; @Autowired private SubjectRepository subjectRepo; @Test public void testCreateCourseWithSubjects(){ // Subject 1 Subject pg111 = new Subject( "Java innføring", "PG111", "Lær java", "10:00", "12:00"); pg111.setWeekday(Weekday.MONDAY); subjectRepo.create(pg111); // Subject 2 Subject pg211 = new Subject( "Java viderekomne", "PG211", "Lær java", "12:00", "14:00"); pg211.setWeekday(Weekday.MONDAY); subjectRepo.create(pg211); // Add both to a Course Course course = new Course("Programmering", "Java and the like"); course.getSubjects().add(pg111); course.getSubjects().add(pg211); courseRepo.create(course); assertEquals( 2, courseRepo.getById(course.getId()).getSubjects().size()); } @Test(expected=ConstraintViolationException.class) public void testWhenAddCourseWithSameName(){ int size = courseRepo.getAll(null).size(); Course c1 = new Course("XXX", "XXX"); courseRepo.create(c1); assertEquals(size + 1, courseRepo.getAll(null).size()); //Course with same name and grade //Should throw ConstraintViolationEx Course c2 = new Course("XXX", "XXX"); courseRepo.create(c2); } @Test public void whenAddedTopics_CourseShouldHaveThem() { int numTopics = subjectRepo.getAll(null).size(); int numCourses = courseRepo.getAll(null).size(); Course c1 = new Course("Programmering", "programmering"); Subject t1 = new Subject(); t1.setSubjectCode("PG111"); c1.getSubjects().add(t1); courseRepo.create(c1); assertEquals(numCourses + 1, courseRepo.getAll(null).size()); assertEquals(numTopics + 1, subjectRepo.getAll(null).size()); Course res = courseRepo.getById(c1.getId()); int numOfTopics = res.getSubjects().size(); if(numOfTopics > 0){ res.getSubjects().remove(0); courseRepo.update(res); assertEquals(numOfTopics - 1, courseRepo.getById(res.getId()).getSubjects().size() ); assertEquals(numTopics + 1, subjectRepo.getAll(null).size()); } } @Test(expected = IllegalArgumentException.class) public void whenInsertNull_persistenceShouldFail() { courseRepo.create(null); } @Test public void whenInsertCourse_CourseShouldBePersisted(){ int size = courseRepo.getAll(null).size(); Course c = new Course("Name", "Desc"); courseRepo.create(c); assertEquals(size + 1, courseRepo.getAll(null).size()); } @Test public void getCoursesByName_shouldReturnListWithCourses(){ int size = courseRepo.getAll(null).size(); Course c1 = new Course("One", "oneDesc"); Course c2 = new Course("Two", "oneDesc");// equal desc Course c3 = new Course("Three", "threeDesc"); Course c4 = new Course("Four", "fourDesc"); courseRepo.create(c1); courseRepo.create(c2); courseRepo.create(c3); courseRepo.create(c4); assertEquals(size + 4, courseRepo.getAll(null).size()); Course mockCourse= new Course(); mockCourse.setName("One"); assertEquals(1, courseRepo.getAll(mockCourse).size()); mockCourse.setName("Two"); assertEquals(1, courseRepo.getAll(mockCourse).size()); mockCourse.setName("*AASDASD"); assertEquals(0, courseRepo.getAll(mockCourse).size()); } @Test public void getCoursesByAttributes_shouldReturnListWithCourses(){ int size = courseRepo.getAll(null).size(); Course c1 = new Course("One", "oneDesc"); Course c2 = new Course("Two", "oneDesc");// equal desc Course c3 = new Course("Three", "threeDesc"); Course c4 = new Course("Four", "fourDesc"); courseRepo.create(c1); courseRepo.create(c2); courseRepo.create(c3); courseRepo.create(c4); assertEquals(size + 4, courseRepo.getAll(null).size()); Course toFind = new Course(); toFind.setName("One"); List<Course> results = courseRepo.getAll(toFind); assertEquals(1, results.size()); toFind = new Course(); toFind.setDescription("oneDesc"); results = courseRepo.getAll(toFind); assertEquals(2, results.size()); toFind = new Course(); toFind.setName("x"); results = courseRepo.getAll(toFind); assertEquals(0, results.size()); } @Test public void testCRUD() { int size = courseRepo.getAll(null).size(); Course c = new Course("Name222", "Desc"); courseRepo.create(c); assertEquals(size + 1, courseRepo.getAll(null).size()); Course c1 = courseRepo.getById(c.getId()); assertEquals(c1.getId(), c.getId()); long id = c1.getId(); Course testCourse= new Course(); testCourse.setName("Name222"); assertEquals(c1, courseRepo.getAll(testCourse).get(0)); boolean isDeleted = courseRepo.delete(id); assertTrue(isDeleted); assertEquals(size, courseRepo.getAll(null).size()); assertEquals(0,courseRepo.getAll(testCourse).size()); } @Test public void testRead(){ Course courseProg = new Course("Programmering", "programmering er kult"); // adding course courseProg.setId(courseRepo.create(courseProg)); assertNotSame(0, courseRepo.getAll(null).size()); // deleting courses courseRepo.delete(courseProg.getId()); } }