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