@thepalaceproject/circulation-admin 1.22.0 → 1.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/20fd1704ea223900efa9.woff2 +0 -0
- package/dist/4692b9ec53fd5972caa2.ttf +0 -0
- package/dist/5be1347c682810f199c7.eot +0 -0
- package/dist/82b1212e45a2bc35dd73.woff +0 -0
- package/dist/be810be3a3e14c682a25.woff2 +0 -0
- package/dist/circulation-admin.css +4 -4
- package/dist/circulation-admin.js +1 -1
- package/dist/f691f37e57f04c152e23.woff +0 -0
- package/package.json +3 -2
- package/tests/__data__/statisticsApiResponseData.ts +1 -0
- package/tests/jest/businessRules/roleBasedAccess.test.ts +158 -0
- package/tests/jest/components/Stats.test.tsx +609 -243
- package/tests/jest/context/AppContext.test.tsx +72 -0
- package/tests/jest/testUtils/withProviders.tsx +3 -3
- package/webpack.common.js +9 -5
- package/dist/45eb1d236a736caa24dd.woff2 +0 -1
- package/dist/4c6f1cd9993ba8a53b8e.ttf +0 -1
- package/dist/5e9505a87e4d8ecb2017.eot +0 -1
- package/dist/7a065a1c0cb2d586cecb.woff +0 -1
- package/dist/7d6ec71e2466a9fd777f.woff2 +0 -1
- package/dist/dec4ea00820558e24672.ttf +0 -1
- package/dist/e5c0c62d732823225aaa.eot +0 -1
- package/dist/f34ea237f268661e9d00.woff +0 -1
- /package/dist/{1e59d2330b4c6deb84b340635ed36249.ttf → 1e59d2330b4c6deb84b3.ttf} +0 -0
- /package/dist/{8b43027f47b20503057dfbbaa9401fef.eot → 8b43027f47b20503057d.eot} +0 -0
|
Binary file
|
package/package.json
CHANGED
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"react-dom": "^16.8.6",
|
|
61
61
|
"react-redux": "^7.2.9",
|
|
62
62
|
"react-router": "^3.2.0",
|
|
63
|
-
"recharts": "^
|
|
63
|
+
"recharts": "^2.12.7",
|
|
64
64
|
"redux": "^4.2.1",
|
|
65
65
|
"redux-thunk": "^2.4.2",
|
|
66
66
|
"request": "^2.85.0",
|
|
@@ -119,6 +119,7 @@
|
|
|
119
119
|
"react-axe": "^3.3.0",
|
|
120
120
|
"react-test-renderer": "^16.14.0",
|
|
121
121
|
"redux-mock-store": "^1.5.4",
|
|
122
|
+
"resize-observer-polyfill": "^1.5.1",
|
|
122
123
|
"sass": "^1.64.2",
|
|
123
124
|
"sass-lint": "^1.13.1",
|
|
124
125
|
"sass-loader": "^13.2.0",
|
|
@@ -149,5 +150,5 @@
|
|
|
149
150
|
"*.{js,jsx,ts,tsx,css,md}": "prettier --write",
|
|
150
151
|
"*.{js,css,md}": "prettier --write"
|
|
151
152
|
},
|
|
152
|
-
"version": "1.
|
|
153
|
+
"version": "1.23.0"
|
|
153
154
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { StatisticsData } from "../../src/interfaces";
|
|
2
2
|
|
|
3
3
|
export const testLibraryKey = "lyrasis-reads";
|
|
4
|
+
export const testLibraryName = "LYRASIS Reads";
|
|
4
5
|
export const noCollectionsLibraryKey = "unfunded-library";
|
|
5
6
|
export const noInventoryLibraryKey = "unfunded-library";
|
|
6
7
|
export const noPatronsLibraryKey = "unused-library";
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { renderHook } from "@testing-library/react-hooks";
|
|
2
|
+
import { componentWithProviders } from "../testUtils/withProviders";
|
|
3
|
+
import { ContextProviderProps } from "../../../src/components/ContextProvider";
|
|
4
|
+
import { ConfigurationSettings, FeatureFlags } from "../../../src/interfaces";
|
|
5
|
+
import {
|
|
6
|
+
useMayRequestInventoryReports,
|
|
7
|
+
useMayViewCollectionBarChart,
|
|
8
|
+
} from "../../../src/businessRules/roleBasedAccess";
|
|
9
|
+
|
|
10
|
+
const setupWrapper = ({
|
|
11
|
+
roles,
|
|
12
|
+
featureFlags,
|
|
13
|
+
}: Partial<ConfigurationSettings>) => {
|
|
14
|
+
const contextProviderProps: ContextProviderProps = {
|
|
15
|
+
featureFlags,
|
|
16
|
+
roles,
|
|
17
|
+
email: "email",
|
|
18
|
+
csrfToken: "token",
|
|
19
|
+
};
|
|
20
|
+
return componentWithProviders({ contextProviderProps });
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
describe("Business rules for role-based access", () => {
|
|
24
|
+
const libraryMatch = "match";
|
|
25
|
+
const libraryMismatch = "mismatch";
|
|
26
|
+
|
|
27
|
+
describe("controls access to inventory reports", () => {
|
|
28
|
+
const testAccess = (
|
|
29
|
+
expectedResult: boolean,
|
|
30
|
+
config: Partial<ConfigurationSettings>
|
|
31
|
+
) => {
|
|
32
|
+
const wrapper = setupWrapper(config);
|
|
33
|
+
const { result } = renderHook(
|
|
34
|
+
() => useMayRequestInventoryReports({ library: libraryMatch }),
|
|
35
|
+
{ wrapper }
|
|
36
|
+
);
|
|
37
|
+
expect(result.current).toBe(expectedResult);
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
it("restricts access to only sysadmins, if the restriction feature flag is true", () => {
|
|
41
|
+
const featureFlags: FeatureFlags = { reportsOnlyForSysadmins: true };
|
|
42
|
+
|
|
43
|
+
testAccess(true, { roles: [{ role: "system" }], featureFlags });
|
|
44
|
+
|
|
45
|
+
testAccess(false, { roles: [{ role: "manager-all" }], featureFlags });
|
|
46
|
+
testAccess(false, { roles: [{ role: "librarian-all" }], featureFlags });
|
|
47
|
+
|
|
48
|
+
testAccess(false, {
|
|
49
|
+
roles: [{ role: "manager", library: libraryMatch }],
|
|
50
|
+
featureFlags,
|
|
51
|
+
});
|
|
52
|
+
testAccess(false, {
|
|
53
|
+
roles: [{ role: "manager", library: libraryMismatch }],
|
|
54
|
+
featureFlags,
|
|
55
|
+
});
|
|
56
|
+
testAccess(false, {
|
|
57
|
+
roles: [{ role: "librarian", library: libraryMatch }],
|
|
58
|
+
featureFlags,
|
|
59
|
+
});
|
|
60
|
+
testAccess(false, {
|
|
61
|
+
roles: [{ role: "librarian", library: libraryMismatch }],
|
|
62
|
+
featureFlags,
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it("allows all users, if the restriction feature flag is is false", () => {
|
|
67
|
+
const featureFlags: FeatureFlags = { reportsOnlyForSysadmins: false };
|
|
68
|
+
|
|
69
|
+
testAccess(true, { roles: [{ role: "system" }], featureFlags });
|
|
70
|
+
|
|
71
|
+
testAccess(true, { roles: [{ role: "manager-all" }], featureFlags });
|
|
72
|
+
testAccess(true, { roles: [{ role: "librarian-all" }], featureFlags });
|
|
73
|
+
|
|
74
|
+
testAccess(true, {
|
|
75
|
+
roles: [{ role: "manager", library: libraryMatch }],
|
|
76
|
+
featureFlags,
|
|
77
|
+
});
|
|
78
|
+
testAccess(true, {
|
|
79
|
+
roles: [{ role: "manager", library: libraryMismatch }],
|
|
80
|
+
featureFlags,
|
|
81
|
+
});
|
|
82
|
+
testAccess(true, {
|
|
83
|
+
roles: [{ role: "librarian", library: libraryMatch }],
|
|
84
|
+
featureFlags,
|
|
85
|
+
});
|
|
86
|
+
testAccess(true, {
|
|
87
|
+
roles: [{ role: "librarian", library: libraryMismatch }],
|
|
88
|
+
featureFlags,
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it("allows all users, if the restriction feature flag is not set", () => {
|
|
93
|
+
const featureFlags: FeatureFlags = {};
|
|
94
|
+
|
|
95
|
+
testAccess(true, { roles: [{ role: "system" }], featureFlags });
|
|
96
|
+
|
|
97
|
+
testAccess(true, { roles: [{ role: "manager-all" }], featureFlags });
|
|
98
|
+
testAccess(true, { roles: [{ role: "librarian-all" }], featureFlags });
|
|
99
|
+
|
|
100
|
+
testAccess(true, {
|
|
101
|
+
roles: [{ role: "manager", library: libraryMatch }],
|
|
102
|
+
featureFlags,
|
|
103
|
+
});
|
|
104
|
+
testAccess(true, {
|
|
105
|
+
roles: [{ role: "manager", library: libraryMismatch }],
|
|
106
|
+
featureFlags,
|
|
107
|
+
});
|
|
108
|
+
testAccess(true, {
|
|
109
|
+
roles: [{ role: "librarian", library: libraryMatch }],
|
|
110
|
+
featureFlags,
|
|
111
|
+
});
|
|
112
|
+
testAccess(true, {
|
|
113
|
+
roles: [{ role: "librarian", library: libraryMismatch }],
|
|
114
|
+
featureFlags,
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
describe("controls access to the collection statistics barchart", () => {
|
|
120
|
+
const testAccess = (
|
|
121
|
+
expectedResult: boolean,
|
|
122
|
+
config: Partial<ConfigurationSettings>
|
|
123
|
+
) => {
|
|
124
|
+
const wrapper = setupWrapper(config);
|
|
125
|
+
const { result } = renderHook(
|
|
126
|
+
() => useMayViewCollectionBarChart({ library: libraryMatch }),
|
|
127
|
+
{ wrapper }
|
|
128
|
+
);
|
|
129
|
+
expect(result.current).toBe(expectedResult);
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
it("restricts access to sysadmins", () => {
|
|
133
|
+
const featureFlags: FeatureFlags = {};
|
|
134
|
+
|
|
135
|
+
testAccess(true, { roles: [{ role: "system" }], featureFlags });
|
|
136
|
+
|
|
137
|
+
testAccess(false, { roles: [{ role: "manager-all" }], featureFlags });
|
|
138
|
+
testAccess(false, { roles: [{ role: "librarian-all" }], featureFlags });
|
|
139
|
+
|
|
140
|
+
testAccess(false, {
|
|
141
|
+
roles: [{ role: "manager", library: libraryMatch }],
|
|
142
|
+
featureFlags,
|
|
143
|
+
});
|
|
144
|
+
testAccess(false, {
|
|
145
|
+
roles: [{ role: "manager", library: libraryMismatch }],
|
|
146
|
+
featureFlags,
|
|
147
|
+
});
|
|
148
|
+
testAccess(false, {
|
|
149
|
+
roles: [{ role: "librarian", library: libraryMatch }],
|
|
150
|
+
featureFlags,
|
|
151
|
+
});
|
|
152
|
+
testAccess(false, {
|
|
153
|
+
roles: [{ role: "librarian", library: libraryMismatch }],
|
|
154
|
+
featureFlags,
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
});
|