package no.niths.infrastructure.school;
import static org.junit.Assert.assertEquals;
import no.niths.common.config.HibernateConfig;
import no.niths.common.config.TestAppConfig;
import no.niths.domain.school.Committee;
import no.niths.domain.school.Event;
import no.niths.domain.school.Student;
import no.niths.infrastructure.school.interfaces.CommitteeRepositorty;
import no.niths.infrastructure.school.interfaces.StudentRepository;
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")
public class CommitteeRepositoryTest {
@Autowired
private CommitteeRepositorty committeeRepo;
@Autowired
private StudentRepository studentRepo;
@Test
public void testAddLeader(){
Student s1 = new Student("John", "Doe");
s1.setEmail("supermail@mail.com");
Student s2 = new Student("Jane", "Doe");
s2.setEmail("dupermail2@mail.com");
studentRepo.create(s1);
studentRepo.create(s2);
Committee c1 = new Committee("Linux", "1337");
c1.getLeaders().add(s1);
committeeRepo.create(c1);
assertEquals(1, c1.getLeaders().size());
Student s3 = studentRepo.getById(s1.getId());
assertEquals(0, s3.getCommittees().size());
}
@Test
public void testCRUD() {
int size = committeeRepo.getAll(null).size();
Committee committee = new Committee("LUG", "Linux");
committee.setId(committeeRepo.create(committee));
assertEquals(size + 1, committeeRepo.getAll(null).size());
assertEquals(committee, committeeRepo.getById(committee.getId()));
committee.setName("LINUXs");
committeeRepo.update(committee);
assertEquals(committee, committeeRepo.getById(committee.getId()));
committeeRepo.delete(committee.getId());
assertEquals(size, committeeRepo.getAll(null).size());
}
@Test
public void testGetAllWithCreateCritera(){
Committee c1 = new Committee("LUG", "23");
Committee c2 = new Committee("LAG", "Linux");
Committee c3 = new Committee("ads", "Linux");
committeeRepo.create(c1);
committeeRepo.create(c2);
committeeRepo.create(c3);
c1.setDescription(null);
assertEquals(1, committeeRepo.getAll(c1).size());
c3.setName(null);
assertEquals(2, committeeRepo.getAll(c3).size());
}
@Test
public void testEventJoin(){
Event event = new Event();
event.setName("Joe");
Committee committee = new Committee("LUG", "Linux");
committee.getEvents().add(event);
committeeRepo.create(committee);
Committee temp = committeeRepo.getById(committee.getId());
assertEquals(committee, temp);
assertEquals(1, temp.getEvents().size());
}
}