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   * Created by IntelliJ IDEA.
17   * User: jettro
18   * Date: Jan 20, 2008
19   * Time: 6:10:36 PM
20   * Test class for the ProjectDao implementation.
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          // TODO jettro 20/01/2008 : I expected an error here with a non existing employee
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 }