package no.niths.services;
import static org.junit.Assert.assertEquals;
import no.niths.common.config.HibernateConfig;
import no.niths.common.config.TestAppConfig;
import no.niths.domain.development.Application;
import no.niths.domain.development.Developer;
import no.niths.services.development.interfaces.ApplicationService;
import no.niths.services.development.interfaces.DeveloperService;
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 DeveloperServiceTest {
@Autowired
private DeveloperService devService;
@Autowired
private ApplicationService appService;
@Test
public void testCRUD() {
int devSize = devService.getAll(null).size();
int appSize = appService.getAll(null).size();
Developer dev = new Developer("DevolName");//, "mailert@mailer.com");
dev.setEmail("mailert@mailer.com");
devService.create(dev);
assertEquals(devSize + 1, devService.getAll(null).size());
//create an app and set the developer
Application app = new Application("Angry Birds Oslo");
app.setDeveloper(dev);
appService.create(app);
Application app2 = new Application("Angry Birds Haag");
app2.setDeveloper(dev);
appService.create(app2);
assertEquals(appSize + 2, appService.getAll(null).size());
assertEquals(dev, appService.getById(app.getId()).getDeveloper());
Developer fetched = devService.getById(dev.getId());
assertEquals(2, fetched.getApps().size());
//Delete an app
appService.hibernateDelete(app.getId());
assertEquals(appSize + 1, appService.getAll(null).size());
//App should be removed from dev
fetched = devService.getById(dev.getId());
assertEquals(1, fetched.getApps().size());
// for (Application a : fetched.getApps()){
// appService.hibernateDelete(a.getId());
// }
// //Delete dev
devService.hibernateDelete(dev.getId());
assertEquals(devSize, devService.getAll(null).size());
//App should still exist
assertEquals(appSize + 1, appService.getAll(null).size());
appService.hibernateDelete(app2.getId());
assertEquals(appSize, appService.getAll(null).size());
}
@Test
public void testAppDevRelation(){
Developer d1 = new Developer();
d1.setName("DevName");
d1.setEmail("mailer@mailer.com");
devService.create(d1);
Application a1 = new Application("App",null,null,null);
Application a2 = new Application("Apssp",null,null,null);
appService.create(a1);
appService.create(a2);
Developer temp = devService.getById(d1.getId());
temp.getApps().add(a1);
temp.getApps().add(a2);
devService.update(temp);
//Did developer get apps?
temp = devService.getById(d1.getId());
assertEquals(2, temp.getApps().size());
//Did app get developer?
Application appTemp = appService.getById(a1.getId());
assertEquals(temp, appTemp.getDeveloper());
//Remove dev from app
appTemp.setDeveloper(null);
appService.update(appTemp);
//App should be removed from dev
temp = devService.getById(d1.getId());
assertEquals(1, temp.getApps().size());
//Set it back
appTemp.setDeveloper(temp);
appService.update(appTemp);
//Dev should get the app back
temp = devService.getById(d1.getId());
assertEquals(2, temp.getApps().size());
//Delete dev
devService.hibernateDelete(temp.getId());
//Apps should still be there but with null dev
appTemp = appService.getById(a1.getId());
assertEquals(null, appTemp.getDeveloper());
appService.hibernateDelete(a1.getId());
appService.hibernateDelete(a2.getId());
}
}