1 package nl.gridshore.samples.training.dataaccess;
2
3 import org.junit.runner.RunWith;
4 import org.junit.Test;
5 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
6 import org.springframework.test.context.ContextConfiguration;
7 import org.springframework.test.jpa.AbstractJpaTests;
8 import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.transaction.annotation.Transactional;
10 import org.springframework.orm.ObjectRetrievalFailureException;
11 import nl.gridshore.samples.training.domain.Project;
12 import nl.gridshore.samples.training.domain.Employee;
13 import nl.gridshore.samples.training.dataaccess.testhelp.DatabaseOperations;
14
15
16
17
18
19
20
21
22 @RunWith(SpringJUnit4ClassRunner.class)
23 @ContextConfiguration(locations={"classpath:test-dataaccess-config.xml","classpath:dataaccess-config.xml"})
24 public class ProjectDaoTest extends AbstractJpaTests {
25 private ProjectDao projectDao;
26
27 @Autowired
28 public void setProjectDao(ProjectDao projectDao) {
29 this.projectDao = projectDao;
30 }
31
32 @Test
33 @Transactional(readOnly = true)
34 public void loadAllProjects() {
35 assertEquals("The total number of projects is not as expected",2,projectDao.loadAll().size());
36 }
37
38 @Test
39 @Transactional
40 public void saveNewProject() {
41 int numBefore = projectDao.loadAll().size();
42 Project project = createDummyNewProject();
43
44 projectDao.save(project);
45
46 assertEquals("NUmber of projects is not increased like it should after a save of a new object",
47 numBefore+1, projectDao.loadAll().size());
48 }
49
50 @Test
51 @Transactional
52 public void saveNewProjectWithNonExsitingEmployee() {
53
54 Project project = createDummyNewProject();
55 Employee emp = new Employee();
56 emp.setCell("test");
57 emp.setCluster("clust");
58 emp.setEmployeeNumber("12345678");
59 emp.setLevel("2. senior programmer");
60 emp.setLongName("I am test");
61 project.addEmployee(emp);
62
63 projectDao.save(project);
64 }
65
66 @Test
67 @Transactional (readOnly = true)
68 public void loadProjectById() {
69 Project project = projectDao.loadById((long) DatabaseOperations.PROJECT_COMPLETE_ID);
70 assertEquals("project name is not as expected","OCS",project.getName());
71 assertEquals("There should be exactly one employee on the project", 1, project.getEmployees().size());
72 }
73
74 @Test (expected = ObjectRetrievalFailureException.class)
75 @Transactional (readOnly = true)
76 public void loadProjectBNonExistingId() {
77 projectDao.loadById(999L);
78 }
79
80 @Test
81 @Transactional (readOnly = true)
82 public void findProjectByClientAndProject() {
83 Project project = projectDao.findProjectByClientAndProject("Abnamro","OCS");
84 assertNotNull("project should have been found",project);
85 }
86
87 @Test
88 @Transactional (readOnly = true)
89 public void findProjectByClientAndProjectNullProject() {
90 Project project = projectDao.findProjectByClientAndProject("Abnamro",null);
91 assertNull("project should not have been found",project);
92 }
93
94 @Test
95 @Transactional (readOnly = true)
96 public void findProjectByClientAndProjectNonExisting() {
97 Project project = projectDao.findProjectByClientAndProject("Abnamro","OCSSS");
98 assertNull("project should have been null",project);
99 }
100
101 private Project createDummyNewProject() {
102 Project project = new Project();
103 project.setClient("Accenture");
104 project.setManagerEmail("jettro.coenradie@accenture.com");
105 project.setManagerName("COenradie, Jettro");
106 project.setName("ADSJ");
107 project.setWbs("notneeded");
108 return project;
109 }
110
111
112 }