1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.ibatis.submitted.permissions;
17
18 import java.io.Reader;
19 import java.util.List;
20
21 import org.apache.ibatis.BaseDataTest;
22 import org.apache.ibatis.io.Resources;
23 import org.apache.ibatis.session.SqlSession;
24 import org.apache.ibatis.session.SqlSessionFactory;
25 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
26 import org.junit.jupiter.api.Assertions;
27 import org.junit.jupiter.api.BeforeAll;
28 import org.junit.jupiter.api.Test;
29
30 class PermissionsTest {
31
32 private static SqlSessionFactory sqlSessionFactory;
33
34 @BeforeAll
35 static void setUp() throws Exception {
36
37 try (Reader reader = Resources.getResourceAsReader("org/apache/ibatis/submitted/permissions/mybatis-config.xml")) {
38 sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
39 }
40
41
42 BaseDataTest.runScript(sqlSessionFactory.getConfiguration().getEnvironment().getDataSource(),
43 "org/apache/ibatis/submitted/permissions/CreateDB.sql");
44 }
45
46 @Test
47 void checkNestedResultMapLoop() {
48 try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
49 final PermissionsMapper mapper = sqlSession.getMapper(PermissionsMapper.class);
50
51 final List<Resource> resources = mapper.getResources();
52 Assertions.assertEquals(2, resources.size());
53
54 final Resource firstResource = resources.get(0);
55 final List<Principal> principalPermissions = firstResource.getPrincipals();
56 Assertions.assertEquals(1, principalPermissions.size());
57
58 final Principal firstPrincipal = principalPermissions.get(0);
59 final List<Permission> permissions = firstPrincipal.getPermissions();
60 Assertions.assertEquals(2, permissions.size());
61
62 final Permission firstPermission = firstPrincipal.getPermissions().get(0);
63 Assertions.assertSame(firstResource, firstPermission.getResource());
64 final Permission secondPermission = firstPrincipal.getPermissions().get(1);
65 Assertions.assertSame(firstResource, secondPermission.getResource());
66 }
67 }
68
69 @Test
70 void checkNestedSelectLoop() {
71 try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
72 final PermissionsMapper mapper = sqlSession.getMapper(PermissionsMapper.class);
73
74 final List<Resource> resources = mapper.getResource("read");
75 Assertions.assertEquals(1, resources.size());
76
77 final Resource firstResource = resources.get(0);
78 final List<Principal> principalPermissions = firstResource.getPrincipals();
79 Assertions.assertEquals(1, principalPermissions.size());
80
81 final Principal firstPrincipal = principalPermissions.get(0);
82 final List<Permission> permissions = firstPrincipal.getPermissions();
83 Assertions.assertEquals(4, permissions.size());
84
85 boolean readFound = false;
86 for (Permission permission : permissions) {
87 if ("read".equals(permission.getPermission())) {
88 Assertions.assertSame(firstResource, permission.getResource());
89 readFound = true;
90 }
91 }
92
93 if (!readFound) {
94 Assertions.fail();
95 }
96 }
97 }
98
99 }