1   package org.itracker.persistence.dao;
2   
3   import java.util.Date;
4   import java.util.List;
5   import java.util.Map;
6   import java.util.Set;
7   
8   import org.itracker.AbstractDependencyInjectionTest;
9   import org.itracker.model.PermissionType;
10  import org.itracker.model.User;
11  import org.itracker.services.util.UserUtilities;
12  import org.junit.Ignore;
13  import org.junit.Test;
14  import org.springframework.dao.DataIntegrityViolationException;
15  
16  public class UserDAOImplTest extends AbstractDependencyInjectionTest {
17  
18      private UserDAO userDAO;
19  
20      @Test
21      public void testCreateUser() {
22  
23          User user = new User( "admin_test2","admin_test2", "admin firstname2", "admin lastname2", "", true );
24          user.setCreateDate( new Date() );
25          user.setLastModifiedDate(new Date());
26          userDAO.saveOrUpdate( user );
27  
28          User foundUser = userDAO.findByLogin( "admin_test2" );
29          assertNotNull( foundUser );
30          assertEquals( "admin_test2", foundUser.getPassword() );
31          assertEquals( "admin firstname2", foundUser.getFirstName() );
32          assertEquals( "admin lastname2", foundUser.getLastName() );
33          assertTrue( foundUser.isSuperUser() );
34          // delete for repeated testing in same persistence
35          userDAO.delete(user);
36      }
37  
38      @Test
39      public void testCreateUserWithNotNullPK() {
40  
41          try {
42              User user = new User( "admin_test3","admin_test3", "admin firstname3", "admin lastname3", "", true );
43              user.setId( -1 );
44              user.setCreateDate( new Date() );
45              userDAO.saveOrUpdate( user );
46          } catch( Exception e ) {
47              // Expected behavior
48              assertTrue( e instanceof DataIntegrityViolationException);
49          }
50  
51      }
52  
53      @Test
54      public void testFindUsersForProjectByAllPermissionTypeList() {
55  
56          Integer[] permissionTypes = new Integer[]{
57                  UserUtilities.PERMISSION_PRODUCT_ADMIN,
58                  UserUtilities.PERMISSION_CREATE,
59                  UserUtilities.PERMISSION_EDIT
60          };
61  
62          List<User> users = userDAO.findUsersForProjectByAllPermissionTypeList(2, permissionTypes);
63  
64          assertEquals(2, users.size());
65  
66          assertContainsUser(userDAO.findByPrimaryKey(2), users);
67          assertContainsUser(userDAO.findByPrimaryKey(3), users);
68  
69      }
70  
71      @Test
72      @Ignore
73    //TODO: Activate skipped, ignored Test (when implementation is done correctly)
74      public void testFindAll() {
75          List<User> users = userDAO.findAll();
76  
77          assertNotNull(users);
78          // TODO: fix this, users.size seems to be 5 sometimes?
79          assertEquals(6, users.size());
80      }
81  
82      @Test
83      public void testFindActive() {
84          List<User> users = userDAO.findActive();
85  
86          assertNotNull(users);
87          assertEquals(4, users.size());
88      }
89  
90      @Test
91      public void testFindByStatus() {
92          List<User> users = userDAO.findByStatus(1);
93  
94          assertNotNull(users);
95          // TODO: fails, please fix
96          assertEquals(4, users.size());
97      }
98  
99      @Test
100     public void testFindSuperUsers() {
101         List<User> users = userDAO.findSuperUsers();
102 
103         assertNotNull(users);
104         assertEquals(1, users.size());
105     }
106 
107     @Test
108     public void testFindByRegistrationType() {
109         List<User> users = userDAO.findByRegistrationType(1);
110 
111         assertNotNull(users);
112         assertEquals(5, users.size());
113     }
114 
115     @Test
116     public void testGetUsersMapOfProjectsAndPermissionTypes() {
117     	Map<Integer, Set<PermissionType>> map =
118 			userDAO.getUsersMapOfProjectsAndPermissionTypes(userDAO.findByPrimaryKey(2));
119     	
120     	assertNotNull( map );
121     	// all permissions connected with user 2 have only project 2 in relation
122     	assertEquals( "projects", 1, map.size() );
123     }
124 
125     private void assertContainsUser(User user, List<User> users) {
126 
127         if (!users.contains(user)) {
128             fail("User not found in the list.");
129         }
130 
131     }
132 
133     @Override
134     public void onSetUp() throws Exception {
135         super.onSetUp();
136 
137         userDAO = (UserDAO)applicationContext.getBean( "userDAO" );
138     }
139 
140     protected String[] getDataSetFiles() {
141         return new String[] {
142                 "dataset/userpreferencesbean_dataset.xml",
143                 "dataset/userbean_dataset.xml",
144                 "dataset/projectbean_dataset.xml",
145                 "dataset/permissionbean_dataset.xml"
146         };
147     }
148 
149     protected String[] getConfigLocations() {
150         return new String[] { "application-context.xml" };
151     }
152 
153 }