package no.niths.services.school;
import static org.junit.Assert.assertEquals;
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.services.school.interfaces.CourseService;
import no.niths.services.school.interfaces.SubjectService;
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;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { TestAppConfig.class, HibernateConfig.class })
public class CourseServiceTest {
@Autowired
private CourseService cService;
@Autowired
private SubjectService sService;
@Test
public void testCrud(){
int size = cService.getAll(null).size();
Course c1 = new Course();
cService.create(c1);
assertEquals(size + 1, cService.getAll(null).size());
c1.setName("The name is this");
cService.update(c1);
assertEquals("The name is this", cService.getById(c1.getId()).getName());
Course temp = new Course();
temp.setName("XXXsssXXX");
assertEquals(true, cService.getAll(temp).isEmpty());
temp.setName("The name is this");
assertEquals(1, cService.getAll(temp).size());
cService.hibernateDelete(c1.getId());
}
@Test
public void testSubjectRelations(){
int subSize = sService.getAll(null).size();
Course c1 = new Course();
cService.create(c1);
Subject s1 = new Subject();
Subject s2 = new Subject();
Subject s3 = new Subject();
sService.create(s1);
sService.create(s2);
sService.create(s3);
assertEquals(subSize + 3, sService.getAll(null).size());
Course temp = cService.getById(c1.getId());
temp.getSubjects().add(s1);
temp.getSubjects().add(s2);
temp.getSubjects().add(s3);
cService.update(temp);
assertEquals(3, cService.getById(c1.getId()).getSubjects().size());
//Remove a subject
temp = cService.getById(c1.getId());
temp.getSubjects().remove(s1);
cService.update(temp);
assertEquals(2, cService.getById(temp.getId()).getSubjects().size());
//Subject should still exist
assertEquals(subSize + 3, sService.getAll(null).size());
//Delete a subject
sService.hibernateDelete(s2.getId());
assertEquals(subSize + 2, sService.getAll(null).size());
temp = cService.getById(c1.getId());
assertEquals(1, cService.getById(temp.getId()).getSubjects().size());
cService.hibernateDelete(c1.getId());
assertEquals(subSize + 2, sService.getAll(null).size());
sService.hibernateDelete(s1.getId());
sService.hibernateDelete(s3.getId());
}
}