]> WPIA git - gigi.git/blob - tests/club/wpia/gigi/TestUserGroupMembership.java
d0e7a2bf0dafdf2d4762a9b8cf8696a0fab3bab7
[gigi.git] / tests / club / wpia / gigi / TestUserGroupMembership.java
1 package club.wpia.gigi;
2
3 import static org.hamcrest.CoreMatchers.*;
4 import static org.junit.Assert.*;
5
6 import java.io.IOException;
7 import java.sql.SQLException;
8 import java.util.Arrays;
9 import java.util.Collections;
10 import java.util.HashSet;
11
12 import org.junit.Test;
13
14 import club.wpia.gigi.database.GigiPreparedStatement;
15 import club.wpia.gigi.database.GigiResultSet;
16 import club.wpia.gigi.dbObjects.Group;
17 import club.wpia.gigi.dbObjects.ObjectCache;
18 import club.wpia.gigi.dbObjects.User;
19 import club.wpia.gigi.testUtils.BusinessTest;
20
21 public class TestUserGroupMembership extends BusinessTest {
22
23     private final Group ttpGroup = Group.TTP_ASSURER;
24
25     private final Group supporter = Group.SUPPORTER;
26
27     @Test
28     public void testAddObject() throws GigiApiException, SQLException, IOException {
29         User u = User.getById(createVerifiedUser("fname", "lname", createUniqueName() + "@example.org", TEST_PASSWORD));
30
31         User granter = getSupporter();
32         assertBehavesEmpty(u);
33
34         u.grantGroup(granter, ttpGroup);
35         assertBehavesTtpGroup(u);
36
37         ObjectCache.clearAllCaches();
38         User u2 = User.getById(u.getId());
39
40         assertThat(u2, is(not(sameInstance(u))));
41         assertBehavesTtpGroup(u2);
42
43         try (GigiPreparedStatement ps = new GigiPreparedStatement("SELECT * FROM `user_groups` WHERE `user`=?")) {
44             ps.setInt(1, u.getId());
45             GigiResultSet rs = ps.executeQuery();
46
47             assertTrue(rs.next());
48             assertEquals(0, rs.getInt("revokedby"));
49             assertEquals(granter.getId(), rs.getInt("grantedby"));
50             assertEquals(ttpGroup.getDBName(), rs.getString("permission"));
51
52             assertNull(rs.getTimestamp("deleted"));
53             assertNotNull(rs.getTimestamp("granted"));
54
55             assertFalse(rs.next());
56         }
57     }
58
59     @Test
60     public void testRemoveObject() throws GigiApiException, SQLException, IOException {
61         User u = User.getById(createVerifiedUser("fname", "lname", createUniqueName() + "@example.org", TEST_PASSWORD));
62
63         User granter = getSupporter();
64
65         assertBehavesEmpty(u);
66         u.grantGroup(granter, ttpGroup);
67         assertBehavesTtpGroup(u);
68         u.revokeGroup(granter, ttpGroup);
69         assertBehavesEmpty(u);
70
71         ObjectCache.clearAllCaches();
72         User u2 = User.getById(u.getId());
73         assertThat(u2, is(not(sameInstance(u))));
74         assertBehavesEmpty(u);
75
76         try (GigiPreparedStatement ps = new GigiPreparedStatement("SELECT * FROM `user_groups` WHERE `user`=?")) {
77             ps.setInt(1, u.getId());
78             GigiResultSet rs = ps.executeQuery();
79             assertTrue(rs.next());
80             assertEquals(granter.getId(), rs.getInt("revokedby"));
81             assertEquals(granter.getId(), rs.getInt("grantedby"));
82             assertEquals(ttpGroup.getDBName(), rs.getString("permission"));
83
84             assertNotNull(rs.getTimestamp("deleted"));
85             assertNotNull(rs.getTimestamp("granted"));
86
87             assertFalse(rs.next());
88         }
89     }
90
91     private void assertBehavesEmpty(User u) {
92         assertEquals(Collections.emptySet(), u.getGroups());
93         assertFalse(u.isInGroup(ttpGroup));
94         assertFalse(u.isInGroup(supporter));
95     }
96
97     private void assertBehavesTtpGroup(User u) {
98         assertEquals(new HashSet<>(Arrays.asList(ttpGroup)), u.getGroups());
99         assertTrue(u.isInGroup(ttpGroup));
100         assertFalse(u.isInGroup(supporter));
101     }
102
103     @Test
104     public void testListGroup() throws GigiApiException, IOException {
105         Group g = Group.SUPPORTER;
106         int start = g.getMembers(0, 10).length;
107         User ux = User.getById(createVerifiedUser("fn", "ln", createUniqueName() + "@example.org", TEST_PASSWORD));
108         User ux2 = User.getById(createVerifiedUser("fn", "ln", createUniqueName() + "@example.org", TEST_PASSWORD));
109         assertEquals(0, g.getMembers(0, 10).length + start);
110         ux.grantGroup(getSupporter(), g); // creates a supporter
111         assertEquals(2, g.getMembers(0, 10).length + start);
112         ux2.grantGroup(ux, g);
113         assertEquals(3, g.getMembers(0, 10).length + start);
114         ux2.revokeGroup(ux, g);
115         assertEquals(2, g.getMembers(0, 10).length + start);
116         ux.revokeGroup(ux, g);
117         assertEquals(1, g.getMembers(0, 10).length + start);
118
119     }
120
121     @Test
122     public void testGroupEquals() {
123         assertTrue(ttpGroup.equals(ttpGroup));
124         assertFalse(ttpGroup.equals(null));
125         assertFalse(ttpGroup.equals(""));
126         assertFalse(ttpGroup.equals(supporter));
127     }
128 }