package no.niths.application.rest.school;
import static org.junit.Assert.assertEquals;
import java.util.List;
import no.niths.application.rest.exception.ObjectNotFoundException;
import no.niths.application.rest.school.interfaces.FadderGroupController;
import no.niths.application.rest.school.interfaces.StudentController;
import no.niths.common.config.HibernateConfig;
import no.niths.common.config.TestAppConfig;
import no.niths.domain.school.FadderGroup;
import no.niths.domain.school.Student;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { TestAppConfig.class, HibernateConfig.class })
public class FadderGroupControllerTest {
private MockHttpServletResponse res;
@Autowired
private FadderGroupController fadderController;
@Autowired
private StudentController studentController;
@Before
public void setUp() {
res = new MockHttpServletResponse();
}
@Test
public void testGetStudentsWithoutAGroup(){
Student s1 = new Student("ssss1234@sss.com");
Student s2 = new Student("sss2345@sss.com");
Student s3 = new Student("sss3456@sss.com");
studentController.create(s1, res);
studentController.create(s2, res);
studentController.create(s3, res);
FadderGroup g1 = new FadderGroup(981);
g1.getFadderChildren().add(s1);
g1.getFadderChildren().add(s2);
fadderController.create(g1, res);
List<Student> fetched = fadderController.getAllStudentsNotInAGroup();
assertEquals(1, fetched.size());
assertEquals(s3, fetched.get(0));
fadderController.delete(g1.getId());
studentController.delete(s1.getId());
studentController.delete(s2.getId());
studentController.delete(s3.getId());
}
@Test
public void testAddAndRemoveLeaders(){
Student s1 = new Student("mail@nith.com");
Student s2 = new Student("mail2@nith.no");
FadderGroup g1 = new FadderGroup(123);
g1.getLeaders().add(s1);
g1.getLeaders().add(s2);
fadderController.create(g1, res);
assertEquals(g1, fadderController.getById(g1.getId()));
assertEquals(2, fadderController.getById(g1.getId()).getLeaders().size());
fadderController.removeAllLeaders(g1.getId());
assertEquals(true, fadderController.getById(g1.getId()).getLeaders().isEmpty());
fadderController.addLeader(g1.getId(), s1.getId());
fadderController.addLeader(g1.getId(), s2.getId());
assertEquals(2, fadderController.getById(g1.getId()).getLeaders().size());
fadderController.removeLeader(g1.getId(), s1.getId());
assertEquals(1, fadderController.getById(g1.getId()).getLeaders().size());
fadderController.delete(g1.getId());
studentController.delete(s1.getId());
studentController.delete(s2.getId());
int remainingGroups= -1;
try{
remainingGroups=fadderController.getAll(null).size();
}catch(ObjectNotFoundException ex){
assertEquals(-1,remainingGroups);
}
}
@Test
public void testAddAndRemoveChildren(){
Student s1 = new Student("mail@ds.com");
Student s2 = new Student("mail2@mail.sdm");
FadderGroup g1 = new FadderGroup(123);
g1.getFadderChildren().add(s1);
g1.getFadderChildren().add(s2);
fadderController.create(g1, res);
assertEquals(g1, fadderController.getById(g1.getId()));
assertEquals(2, fadderController.getById(g1.getId()).getFadderChildren().size());
fadderController.removeAllChildren(g1.getId());
assertEquals(true, fadderController.getById(g1.getId()).getFadderChildren().isEmpty());
fadderController.addChild(g1.getId(), s1.getId());
fadderController.addChild(g1.getId(), s2.getId());
assertEquals(2, fadderController.getById(g1.getId()).getFadderChildren().size());
fadderController.removeChild(g1.getId(), s1.getId());
assertEquals(1, fadderController.getById(g1.getId()).getFadderChildren().size());
fadderController.delete(g1.getId());
studentController.delete(s1.getId());
studentController.delete(s2.getId());
int remainingGroups= -1;
try{
remainingGroups=fadderController.getAll(null).size();
}catch(ObjectNotFoundException ex){
assertEquals(-1,remainingGroups);
}
}
@Test
public void testCRUD(){
int size = 0;
try{
size = fadderController.getAll(null).size();
}catch(ObjectNotFoundException e){
//Do nothing
}
FadderGroup group = new FadderGroup(1337);
fadderController.create(group, res);
assertEquals(size + 1, fadderController.getAll(null).size());
assertEquals(1, fadderController.getAll(group).size());
group.setGroupNumber(1338);
fadderController.update(group);
assertEquals(new Integer(1338), fadderController.getAll(group).get(0).getGroupNumber());
fadderController.delete(group.getId());
}
}