1 package com.atlassian.sal.core.permission;
2
3 import com.atlassian.sal.api.permission.AuthorisationException;
4 import com.atlassian.sal.api.permission.NotAuthenticatedException;
5 import com.atlassian.sal.api.user.UserKey;
6 import com.atlassian.sal.api.user.UserManager;
7 import org.junit.Before;
8 import org.junit.Rule;
9 import org.junit.Test;
10 import org.junit.rules.ExpectedException;
11 import org.junit.runner.RunWith;
12 import org.mockito.Mock;
13 import org.mockito.junit.MockitoJUnitRunner;
14
15 import static org.hamcrest.CoreMatchers.isA;
16 import static org.hamcrest.CoreMatchers.not;
17 import static org.junit.Assert.assertFalse;
18 import static org.junit.Assert.assertTrue;
19 import static org.mockito.Mockito.verify;
20 import static org.mockito.Mockito.when;
21
22 @RunWith(MockitoJUnitRunner.class)
23 public class DefaultPermissionEnforcerTest {
24
25 @Rule
26 public ExpectedException thrown = ExpectedException.none();
27
28 private UserKey userKey;
29 @Mock
30 private UserManager userManager;
31 private DefaultPermissionEnforcer permissionEnforcer;
32
33 @Before
34 public void setup() {
35 permissionEnforcer = new DefaultPermissionEnforcer(userManager);
36 userKey = new UserKey("1234");
37 }
38
39 @Test
40 public void testEnforceAdminWithAdminPermission() {
41 when(userManager.getRemoteUserKey()).thenReturn(userKey);
42 when(userManager.isAdmin(userKey)).thenReturn(true);
43
44 permissionEnforcer.enforceAdmin();
45 verify(userManager).isAdmin(userKey);
46 }
47
48 @Test
49 public void testEnforceAdminThrowsIfNotAdmin() {
50 thrown.expect(AuthorisationException.class);
51 thrown.expect(not(isA(NotAuthenticatedException.class)));
52 when(userManager.getRemoteUserKey()).thenReturn(userKey);
53
54 permissionEnforcer.enforceAdmin();
55 }
56
57 @Test
58 public void testEnforceAdminThrowsIfNotAuthenticated() {
59 thrown.expect(NotAuthenticatedException.class);
60
61 permissionEnforcer.enforceAdmin();
62 }
63
64 @Test
65 public void testEnforceAuthenticatedWhenAuthenticated() {
66 when(userManager.getRemoteUserKey()).thenReturn(userKey);
67
68 permissionEnforcer.enforceAuthenticated();
69 verify(userManager).getRemoteUserKey();
70 }
71
72 @Test
73 public void testEnforceAuthenticatedThrowsIfNotAuthenticated() {
74 thrown.expect(AuthorisationException.class);
75
76 permissionEnforcer.enforceAuthenticated();
77 }
78
79 @Test
80 public void testEnforceSystemAdminWithSystemAdminPermission() {
81 when(userManager.getRemoteUserKey()).thenReturn(userKey);
82 when(userManager.isSystemAdmin(userKey)).thenReturn(true);
83
84 permissionEnforcer.enforceSystemAdmin();
85 verify(userManager).isSystemAdmin(userKey);
86 }
87
88 @Test
89 public void testEnforceSystemAdminThrowsIfNotSystemAdmin() {
90 thrown.expect(AuthorisationException.class);
91 thrown.expect(not(isA(NotAuthenticatedException.class)));
92 when(userManager.getRemoteUserKey()).thenReturn(userKey);
93
94 permissionEnforcer.enforceSystemAdmin();
95 }
96
97 @Test
98 public void testEnforceSystemAdminThrowsIfNotAuthenticated() {
99 thrown.expect(NotAuthenticatedException.class);
100
101 permissionEnforcer.enforceSystemAdmin();
102 }
103
104 @Test
105 public void testIsAdminWithAdminPermission() {
106 when(userManager.getRemoteUserKey()).thenReturn(userKey);
107 when(userManager.isAdmin(userKey)).thenReturn(true);
108
109 assertTrue(permissionEnforcer.isAdmin());
110 }
111
112 @Test
113 public void testIsAdminIfNotAdmin() {
114 when(userManager.getRemoteUserKey()).thenReturn(userKey);
115
116 assertFalse(permissionEnforcer.isAdmin());
117 }
118
119 @Test
120 public void testIsAdminIfNotAuthenticated() {
121 assertFalse(permissionEnforcer.isAdmin());
122 }
123
124 @Test
125 public void testIsAuthenticatedWhenAuthenticated() {
126 when(userManager.getRemoteUserKey()).thenReturn(userKey);
127
128 assertTrue(permissionEnforcer.isAuthenticated());
129 }
130
131 @Test
132 public void testIsAuthenticatedWhenNotAuthenticated() {
133 assertFalse(permissionEnforcer.isAuthenticated());
134 }
135
136 @Test
137 public void testIsSystemAdminWithSystemAdminPermission() {
138 when(userManager.getRemoteUserKey()).thenReturn(userKey);
139 when(userManager.isSystemAdmin(userKey)).thenReturn(true);
140
141 assertTrue(permissionEnforcer.isSystemAdmin());
142 }
143
144 @Test
145 public void testIsSystemAdminIfNotAdmin() {
146 when(userManager.getRemoteUserKey()).thenReturn(userKey);
147
148 assertFalse(permissionEnforcer.isSystemAdmin());
149 }
150
151 @Test
152 public void testIsSystemAdminIfNotAuthenticated() {
153 assertFalse(permissionEnforcer.isSystemAdmin());
154 }
155 }