1 package net.avcompris.examples.users3.core.tests;
2
3 import static net.avcompris.commons3.core.tests.CoreTestUtils.defaultClock;
4 import static net.avcompris.commons3.core.tests.CoreTestUtils.newCorrelationId;
5 import static net.avcompris.commons3.core.tests.CoreTestUtils.random40;
6 import static net.avcompris.commons3.databeans.DataBeans.instantiate;
7 import static net.avcompris.examples.users3.core.tests.UsersCoreTestUtils.ensureAnyUser;
8 import static net.avcompris.examples.users3.core.tests.UsersCoreTestUtils.setCorrelationId;
9 import static net.avcompris.examples.users3.core.tests.UsersCoreTestUtils.setUsersService;
10 import static org.junit.jupiter.api.Assertions.assertThrows;
11
12 import org.apache.commons.lang3.tuple.Pair;
13 import org.junit.jupiter.api.BeforeEach;
14 import org.junit.jupiter.api.Test;
15
16 import net.avcompris.commons3.api.User;
17 import net.avcompris.commons3.api.exception.UnauthorizedException;
18 import net.avcompris.commons3.core.Permissions;
19 import net.avcompris.commons3.core.impl.PermissionsImpl;
20 import net.avcompris.commons3.core.tests.AbstractServiceTest;
21 import net.avcompris.commons3.utils.LogFactory;
22 import net.avcompris.examples.shared3.Role;
23 import net.avcompris.examples.users3.api.UserCreate;
24 import net.avcompris.examples.users3.core.api.UsersService;
25 import net.avcompris.examples.users3.core.impl.UsersServiceImpl;
26 import net.avcompris.examples.users3.dao.AuthDao;
27 import net.avcompris.examples.users3.dao.UsersDao;
28
29 public abstract class AbstractUsersServicePermissionsTest extends AbstractServiceTest<Pair<UsersDao, AuthDao>> {
30
31 protected UsersService usersService;
32
33 private String correlationId;
34
35 @BeforeEach
36 public final void setUpBeans() throws Exception {
37
38 final Pair<UsersDao, AuthDao> beans = getBeans(defaultClock());
39
40 final UsersDao usersDao = beans.getLeft();
41 final AuthDao authDao = beans.getRight();
42
43 final Permissions permissions = new PermissionsImpl();
44
45 usersService = new UsersServiceImpl(permissions, defaultClock(), usersDao, authDao);
46
47 setUsersService(usersService);
48
49 LogFactory.resetCorrelationId();
50
51 correlationId = setCorrelationId(newCorrelationId());
52 }
53
54 @Test
55 public final void test_Usermgr_can_createUsermgrUser() throws Exception {
56
57 final User user0 = ensureAnyUser(Role.USERMGR);
58
59 usersService.createUser(correlationId, user0, random40("USER-"), instantiate(UserCreate.class)
60 .setEnabled(true)
61 .setRole(Role.USERMGR));
62 }
63
64 @Test
65 public final void test_Admin_can_createAdminUser() throws Exception {
66
67 final User user0 = ensureAnyUser(Role.ADMIN);
68
69 usersService.createUser(correlationId, user0, random40("USER-"), instantiate(UserCreate.class)
70 .setEnabled(true)
71 .setRole(Role.ADMIN));
72 }
73
74 @Test
75 public final void test_Admin_can_createUsermgrUser() throws Exception {
76
77 final User user0 = ensureAnyUser(Role.ADMIN);
78
79 usersService.createUser(correlationId, user0, random40("USER-"), instantiate(UserCreate.class)
80 .setEnabled(true)
81 .setRole(Role.USERMGR));
82 }
83
84 @Test
85 public final void test_Usermgr_cannot_createAdminUser() throws Exception {
86
87 final User user0 = ensureAnyUser(Role.USERMGR);
88
89 assertThrows(UnauthorizedException.class, ()
90
91 -> usersService.createUser(correlationId, user0, random40("USER-"), instantiate(UserCreate.class)
92 .setEnabled(true)
93 .setRole(Role.ADMIN)));
94 }
95 }