1 package com.atlassian.user.impl.hibernate;
2
3 import com.atlassian.user.*;
4 import com.atlassian.user.generic.AbstractSpringTest;
5 import com.atlassian.user.impl.DefaultUser;
6
7 import java.util.Iterator;
8
9
10
11
12
13
14 public class TestHibernateGroupManagerHandlesDetachedGroups extends AbstractSpringTest
15 {
16 protected ExternalEntityDAO externalEntityDao;
17 protected HibernateUserManager hibernateUserManager;
18 protected HibernateGroupManager hibernateGroupManager;
19
20 protected UserManager getUserManager()
21 {
22 return hibernateUserManager;
23 }
24
25 protected GroupManager getGroupManager()
26 {
27 return hibernateGroupManager;
28 }
29
30 public void setExternalEntityDao(ExternalEntityDAO externalEntityDao)
31 {
32 this.externalEntityDao = externalEntityDao;
33 }
34
35 public void setHibernateUserManager(HibernateUserManager hibernateUserManager)
36 {
37 this.hibernateUserManager = hibernateUserManager;
38 }
39
40 public void setHibernateGroupManager(HibernateGroupManager hibernateGroupManager)
41 {
42 this.hibernateGroupManager = hibernateGroupManager;
43 }
44
45 protected String[] getConfigLocations()
46 {
47 return new String[]{
48 "classpath:com/atlassian/user/impl/hibernate/hibernateTestContext.xml",
49 "classpath:com/atlassian/user/dataSourceTestContext.xml",
50 };
51 }
52
53 private DefaultHibernateGroup persistentGroup;
54 private User localUser;
55 private User externalUser;
56
57 protected void onSetUp() throws Exception
58 {
59 super.onSetUp();
60
61 Group group = getGroupManager().createGroup("group");
62 localUser = getUserManager().createUser("localUser");
63 externalUser = new DefaultUser("externalUser");
64 getGroupManager().addMembership(group, localUser);
65 getGroupManager().addMembership(group, externalUser);
66 setComplete();
67 endTransaction();
68
69
70 startNewTransaction();
71 persistentGroup = (DefaultHibernateGroup) getGroupManager().getGroup("group");
72 setComplete();
73 endTransaction();
74
75
76 startNewTransaction();
77 }
78
79 protected void onTearDown() throws Exception
80 {
81 deleteUsersAndGroups();
82 super.onTearDown();
83 deleteUsersAndGroups();
84 }
85
86 protected void deleteUsersAndGroups() throws EntityException
87 {
88 for (Iterator i = getGroupManager().getGroups().iterator(); i.hasNext();)
89 {
90 Group group = (Group) i.next();
91 getGroupManager().removeGroup(group);
92 }
93 for (Iterator i = getUserManager().getUsers().iterator(); i.hasNext();)
94 {
95 User user = (User) i.next();
96 getUserManager().removeUser(user);
97 }
98 externalEntityDao.removeExternalEntity("externalUser");
99 }
100
101 public void testMembershipCollectionsAreNotInitialised() throws Exception
102 {
103 assertEquals(net.sf.hibernate.collection.Set.class, persistentGroup.getLocalMembers().getClass());
104 assertFalse(((net.sf.hibernate.collection.Set) persistentGroup.getLocalMembers()).wasInitialized());
105 assertEquals(net.sf.hibernate.collection.Set.class, persistentGroup.getExternalMembers().getClass());
106 assertFalse(((net.sf.hibernate.collection.Set) persistentGroup.getExternalMembers()).wasInitialized());
107 }
108
109 public void testHasExternalMembership() throws Exception
110 {
111 assertTrue(getGroupManager().hasMembership(persistentGroup, externalUser));
112 }
113
114 public void testHasLocalMembership() throws Exception
115 {
116 assertTrue(getGroupManager().hasMembership(persistentGroup, localUser));
117 }
118
119 public void testAddExternalMembership() throws Exception
120 {
121 User anotherExternalUser = new DefaultUser("anotherExternalUser");
122 getGroupManager().addMembership(persistentGroup, anotherExternalUser);
123 assertTrue(getGroupManager().hasMembership(persistentGroup, anotherExternalUser));
124 }
125
126 public void testAddLocalMembership() throws Exception
127 {
128 User anotherLocalUser = getUserManager().createUser("anotherLocalUser");
129 getGroupManager().addMembership(persistentGroup, anotherLocalUser);
130 assertTrue(getGroupManager().hasMembership(persistentGroup, anotherLocalUser));
131 }
132
133 public void testRemoveExternalMembership() throws Exception
134 {
135 getGroupManager().removeMembership(persistentGroup, externalUser);
136 assertFalse(getGroupManager().hasMembership(persistentGroup, externalUser));
137 }
138
139 public void testRemoveLocalMembership() throws Exception
140 {
141 getGroupManager().removeMembership(persistentGroup, localUser);
142 assertFalse(getGroupManager().hasMembership(persistentGroup, localUser));
143 }
144 }