-
Notifications
You must be signed in to change notification settings - Fork 2
/
canAccess.test.ts
124 lines (119 loc) · 2.74 KB
/
canAccess.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import { canAccess2 as canAccess } from "./canAccess";
import {
Action,
Permission,
PermissionString,
} from "../constants";
describe("canAccess", () => {
const permissions: Permission[] = [
{
// type: PermissionType.ALLOW,
action: Action.LIST,
resource: "product", // same as "product"
// resourceType: ResourceType.MENU,
},
{
// type: PermissionType.DENY,
action: [Action.LIST, Action.READ],
resource: "product",
},
];
const permissionTable: [
string,
{
expected: boolean;
permissions: PermissionString | Permission[];
permission: PermissionString | Permission;
// testName: string;
}
][] = [
[
"should return true with permission [product:get.all]",
{
permissions,
permission: "product:get.all",
expected: true,
},
],
[
"should return true with permission [product:get]",
{
permissions,
permission: "product:get",
expected: true,
},
],
[
"should return true with permission [product.title:get]",
{
permissions,
permission: "product:get",
expected: true,
},
],
[
"should return false with permission [anotherProduct:get]",
{
permissions,
permission: "anotherProduct:get",
expected: false,
},
],
[
"should return true with permission [product:create]",
{
// have
permissions: [
{
// type: PermissionType.DENY,
action: [Action.READ, Action.LIST],
resource: "learner",
},
{
// type: PermissionType.DENY,
action: Action.CREATE,
resource: "product",
},
],
// want
permission: {
action: Action.CREATE,
resource: "product",
},
// canAccess?
expected: true,
},
],
[
"should return true with permission [product:get,get.all]",
{
permissions: [
{
// type: PermissionType.ALLOW,
action: Action.ANY,
resource: "product",
},
],
permission: "product:get,get.all",
expected: true,
},
],
[
"should return false with permission [product:update]",
{
permissions: [
{
// type: PermissionType.ALLOW,
action: Action.ANY,
resource: "product",
},
],
permission: "product:update",
expected: true,
},
],
];
it.each(permissionTable)("%s", (_, { permissions, permission, expected }) => {
expect(canAccess(permissions)(permission)).toBe(expected);
});
});