package no.niths.infrastructure.school; import static org.junit.Assert.assertEquals; import java.util.List; 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 no.niths.infrastructure.school.interfaces.FadderGroupRepository; 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 FadderGroupRepositoryTest { @Autowired private FadderGroupRepository fadderRepo; @Autowired private StudentRepository studRepo; @Test public void testGetAllStudentsNotInAGroup(){ Student s1 = new Student("mail1234@nith.no"); Student s2 = new Student("mail2345@nith.no"); Student s3 = new Student("mail3456@nith.no"); studRepo.create(s1); studRepo.create(s2); studRepo.create(s3); FadderGroup group = new FadderGroup(928); group.getFadderChildren().add(s1); fadderRepo.create(group); FadderGroup fetched = fadderRepo.getById(group.getId()); assertEquals(fetched, group); List<Student> all = fadderRepo.getStudentsNotInAGroup(); assertEquals(2, all.size()); FadderGroup group2 = new FadderGroup(923); group2.getFadderChildren().add(s2); group2.getFadderChildren().add(s3); fadderRepo.create(group2); all = fadderRepo.getStudentsNotInAGroup(); assertEquals(true, all.isEmpty()); fetched = fadderRepo.getById(group2.getId()); fetched.setFadderChildren(null); fadderRepo.update(fetched); all = fadderRepo.getStudentsNotInAGroup(); assertEquals(2, all.size()); } @Test public void testCRUD(){ int size = fadderRepo.getAll(null).size(); FadderGroup group = new FadderGroup(924); fadderRepo.create(group); assertEquals(size + 1, fadderRepo.getAll(null).size()); assertEquals(group, fadderRepo.getById(group.getId())); group.setGroupNumber(1337); fadderRepo.update(group); assertEquals(new Integer(1337), fadderRepo.getById(group.getId()).getGroupNumber()); fadderRepo.delete(group.getId()); assertEquals(size, fadderRepo.getAll(null).size()); } @Test public void testAddAndRemoveLeaders(){ int studSize = studRepo.getAll(null).size(); Student s1 = new Student("mail@nith.no"); Student s2 = new Student("mail2@nith.no"); // Student s3 = new Student("mail3@nith.no"); // Student s4 = new Student("mail4@nith.no"); studRepo.create(s1); studRepo.create(s2); FadderGroup group = new FadderGroup(924); fadderRepo.create(group); int leaderSize = fadderRepo.getById(group.getId()).getLeaders().size(); //Add two leaders group.getLeaders().add(s1); group.getLeaders().add(s2); fadderRepo.update(group); //Check if persisted assertEquals(leaderSize + 2, fadderRepo.getById(group.getId()).getLeaders().size()); assertEquals(studSize + 2, studRepo.getAll(null).size()); //Remove a leader from the group group.getLeaders().remove(s2); fadderRepo.update(group); //Check if it was removed assertEquals(leaderSize + 1, fadderRepo.getById(group.getId()).getLeaders().size()); //Student should still be in the DB assertEquals(studSize + 2, studRepo.getAll(null).size()); } @Test public void testAddAndRemoveChildren(){ int studSize = studRepo.getAll(null).size(); Student s1 = new Student("mail@nith.no"); Student s2 = new Student("mail2@nith.no"); Student s3 = new Student("mail3@nith.no"); Student s4 = new Student("mail4@nith.no"); studRepo.create(s1); studRepo.create(s2); studRepo.create(s3); studRepo.create(s4); FadderGroup group = new FadderGroup(924); fadderRepo.create(group); int childrenSize = fadderRepo.getById(group.getId()).getFadderChildren().size(); //Add children to group group.getFadderChildren().add(s1); group.getFadderChildren().add(s2); group.getFadderChildren().add(s3); group.getFadderChildren().add(s4); fadderRepo.update(group); //Check if they were added to the group assertEquals(childrenSize + 4, fadderRepo.getById(group.getId()).getFadderChildren().size()); //Remove a children: group.getFadderChildren().remove(s1); fadderRepo.update(group); assertEquals(childrenSize + 3, fadderRepo.getById(group.getId()).getFadderChildren().size()); //Student should still exist in student db: assertEquals(studSize + 4, studRepo.getAll(null).size()); } }