Skip to content

Commit e9a1fd0

Browse files
committed
✨ - feat: permissions tests with factories
1 parent c272b1f commit e9a1fd0

10 files changed

+282
-147
lines changed
+12-5
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
11
import { DestructionList } from "../lib/api/destructionLists";
2-
import { FIXTURE_USERS } from "./user";
2+
import { createObjectFactory } from "./factory";
3+
import { userFactory, usersFactory } from "./user";
34

4-
export const FIXTURE_DESTRUCTION_LIST: DestructionList = {
5+
const FIXTURE_DESTRUCTION_LIST: DestructionList = {
56
pk: 1,
67
uuid: "00000000-0000-0000-0000-000000000000",
78
name: "My First Destruction List",
8-
author: FIXTURE_USERS[0],
9+
author: userFactory(),
910
containsSensitiveInfo: false,
1011
status: "changes_requested",
11-
assignees: FIXTURE_USERS.map((u, i) => ({ user: u, order: i })),
12-
assignee: FIXTURE_USERS[0],
12+
assignees: usersFactory().map((u, i) => ({ user: u, order: i })),
13+
assignee: userFactory(),
1314
created: "2024-07-11T16:57",
1415
statusChanged: "2024-07-11:16:57",
1516
};
17+
18+
const destructionListFactory = createObjectFactory<DestructionList>(
19+
FIXTURE_DESTRUCTION_LIST,
20+
);
21+
22+
export { destructionListFactory };

frontend/src/fixtures/factory.ts

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { RecursivePartial } from "../lib/types/utilities";
2+
3+
/**
4+
* Generic factory function to create individual objects with default and overridden properties
5+
* @param {T} defaultValues - Default values for the object
6+
* @returns {(overrides?: RecursivePartial<T>) => T} - Function to create objects with specified properties
7+
*/
8+
export const createObjectFactory = <T>(defaultValues: T) => {
9+
return (overrides: RecursivePartial<T> = {}): T => {
10+
return Object.assign({}, defaultValues, overrides);
11+
};
12+
};
13+
14+
/**
15+
* Generic factory function to create arrays of objects with default and overridden properties
16+
* @param {T[]} defaultValues - Default values for the array of objects
17+
* @returns {(overrides?: RecursivePartial<T>[]) => T[]} - Function to create arrays of objects with specified properties
18+
*/
19+
export const createArrayFactory = <T>(defaultValues: T[]) => {
20+
return (overrides: RecursivePartial<T>[] = []): T[] => {
21+
return defaultValues.map((defaultItem, index) =>
22+
Object.assign({}, defaultItem, overrides[index]),
23+
);
24+
};
25+
};
+11-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
1-
import { FIXTURE_ZAKEN } from "./zaak";
1+
import { PaginatedZaken } from "../lib/api/zaken";
2+
import { createObjectFactory } from "./factory";
3+
import { zakenFactory } from "./zaak";
24

3-
export const FIXTURE_PAGINATED_ZAKEN = {
5+
const FIXTURE_PAGINATED_ZAKEN = {
46
count: 10,
57
next: null,
68
previous: null,
7-
results: FIXTURE_ZAKEN,
9+
results: zakenFactory(),
810
};
11+
12+
const paginatedZakenFactory = createObjectFactory<PaginatedZaken>(
13+
FIXTURE_PAGINATED_ZAKEN,
14+
);
15+
16+
export { paginatedZakenFactory };

frontend/src/fixtures/review.ts

+10-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
import { Review } from "../lib/api/review";
2-
import { FIXTURE_DESTRUCTION_LIST } from "./destructionList";
3-
import { FIXTURE_BEOORDELAAR } from "./user";
2+
import { destructionListFactory } from "./destructionList";
3+
import { createObjectFactory } from "./factory";
4+
import { beoordelaarFactory } from "./user";
45

5-
export const FIXTURE_REVIEW: Review = {
6+
const FIXTURE_REVIEW: Review = {
67
pk: 1,
7-
destructionList: FIXTURE_DESTRUCTION_LIST.uuid,
8-
author: FIXTURE_BEOORDELAAR,
8+
destructionList: destructionListFactory().uuid,
9+
author: beoordelaarFactory(),
910
decision: "rejected",
1011
listFeedback: "",
1112
created: "2024-06-24T17:08:10.474973+02:00",
1213
};
14+
15+
const reviewFactory = createObjectFactory<Review>(FIXTURE_REVIEW);
16+
17+
export { reviewFactory };

frontend/src/fixtures/reviewItem.ts

+13-7
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,28 @@
1-
import { Review, ReviewItem } from "../lib/api/review";
2-
import { FIXTURE_ZAAK, FIXTURE_ZAKEN } from "./zaak";
1+
import { ReviewItem } from "../lib/api/review";
2+
import { createArrayFactory, createObjectFactory } from "./factory";
3+
import { zaakFactory, zakenFactory } from "./zaak";
34

4-
export const FIXTURE_REVIEW_ITEM: ReviewItem = {
5+
const FIXTURE_REVIEW_ITEM: ReviewItem = {
56
pk: 1,
6-
zaak: FIXTURE_ZAAK,
7+
zaak: zaakFactory(),
78
feedback: "Deze niet",
89
};
910

10-
export const FIXTURE_REVIEW_ITEMS: ReviewItem[] = [
11+
const FIXTURE_REVIEW_ITEMS: ReviewItem[] = [
1112
FIXTURE_REVIEW_ITEM,
1213
{
1314
pk: 2,
14-
zaak: FIXTURE_ZAKEN[1],
15+
zaak: zakenFactory()[1],
1516
feedback: "Deze ook niet",
1617
},
1718
{
1819
pk: 3,
19-
zaak: FIXTURE_ZAKEN[2],
20+
zaak: zakenFactory()[2],
2021
feedback: "Deze nog niet",
2122
},
2223
];
24+
25+
const reviewItemFactory = createObjectFactory<ReviewItem>(FIXTURE_REVIEW_ITEM);
26+
const reviewItemsFactory = createArrayFactory<ReviewItem>(FIXTURE_REVIEW_ITEMS);
27+
28+
export { reviewItemFactory, reviewItemsFactory };

frontend/src/fixtures/selectieLijstKlasseChoices.ts

+10-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { Option } from "@maykin-ui/admin-ui";
22

3-
import { FIXTURE_ZAKEN } from "./zaak";
3+
import { createArrayFactory } from "./factory";
4+
import { zakenFactory } from "./zaak";
45

5-
export const FIXTURE_SELECTIELIJSTKLASSE_CHOICES: Option[] = [
6+
const FIXTURE_SELECTIELIJSTKLASSE_CHOICES: Option[] = [
67
{
78
label: "1.1 - Ingericht - vernietigen - P10Y",
89
value:
@@ -45,10 +46,16 @@ export const FIXTURE_SELECTIELIJSTKLASSE_CHOICES: Option[] = [
4546
},
4647
];
4748

48-
export const FIXTURE_SELECTIELIJSTKLASSE_CHOICES_MAP = FIXTURE_ZAKEN.reduce(
49+
export const FIXTURE_SELECTIELIJSTKLASSE_CHOICES_MAP = zakenFactory().reduce(
4950
(acc, val) => ({
5051
...acc,
5152
[val.url as string]: FIXTURE_SELECTIELIJSTKLASSE_CHOICES,
5253
}),
5354
{},
5455
);
56+
57+
const selectieLijstKlasseFactory = createArrayFactory<Option>(
58+
FIXTURE_SELECTIELIJSTKLASSE_CHOICES,
59+
);
60+
61+
export { selectieLijstKlasseFactory };

frontend/src/fixtures/user.ts

+38-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,21 @@
11
import { User } from "../lib/api/auth";
2+
import { createArrayFactory, createObjectFactory } from "./factory";
23

3-
export const FIXTURE_RECORD_MANAGER: User = {
4+
const FIXTURE_USER: User = {
5+
pk: 1,
6+
username: "testuser",
7+
firstName: "Test",
8+
lastName: "User",
9+
10+
role: {
11+
name: "Test Role",
12+
canStartDestruction: false,
13+
canReviewDestruction: false,
14+
canViewCaseDetails: true,
15+
},
16+
};
17+
18+
const FIXTURE_RECORD_MANAGER: User = {
419
pk: 1,
520
username: "Record Manager",
621
firstName: "Record",
@@ -14,7 +29,7 @@ export const FIXTURE_RECORD_MANAGER: User = {
1429
},
1530
};
1631

17-
export const FIXTURE_BEOORDELAAR: User = {
32+
const FIXTURE_BEOORDELAAR: User = {
1833
pk: 2,
1934
username: "Beoor del Laar",
2035
firstName: "Beoor",
@@ -28,7 +43,7 @@ export const FIXTURE_BEOORDELAAR: User = {
2843
},
2944
};
3045

31-
export const FIXTURE_PROCES_EIGENAAR: User = {
46+
const FIXTURE_PROCES_EIGENAAR: User = {
3247
pk: 3,
3348
username: "Proces ei Genaar",
3449
firstName: "Proces",
@@ -42,8 +57,25 @@ export const FIXTURE_PROCES_EIGENAAR: User = {
4257
},
4358
};
4459

45-
export const FIXTURE_USERS = [
46-
FIXTURE_RECORD_MANAGER,
47-
FIXTURE_BEOORDELAAR,
60+
const userFactory = createObjectFactory<User>(FIXTURE_USER);
61+
const recordManagerFactory = createObjectFactory<User>(FIXTURE_RECORD_MANAGER);
62+
const beoordelaarFactory = createObjectFactory<User>(FIXTURE_BEOORDELAAR);
63+
const procesEigenaarFactory = createObjectFactory<User>(
4864
FIXTURE_PROCES_EIGENAAR,
65+
);
66+
67+
const defaultUsers: User[] = [
68+
recordManagerFactory(),
69+
beoordelaarFactory(),
70+
procesEigenaarFactory(),
4971
];
72+
73+
const usersFactory = createArrayFactory(defaultUsers);
74+
75+
export {
76+
beoordelaarFactory,
77+
procesEigenaarFactory,
78+
recordManagerFactory,
79+
userFactory,
80+
usersFactory,
81+
};

frontend/src/fixtures/zaak.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Zaak } from "../types";
2+
import { createArrayFactory, createObjectFactory } from "./factory";
23

3-
export const FIXTURE_ZAAK: Zaak = {
4+
const FIXTURE_ZAAK: Zaak = {
45
uuid: "87691e74-1b0b-491a-aa63-0a396bbb1e3e",
56
url: "http://localhost:8000/zaken/api/v1/zaken/87691e74-1b0b-491a-aa63-0a396bbb1e3e",
67
rollen: [],
@@ -56,7 +57,7 @@ export const FIXTURE_ZAAK: Zaak = {
5657
verantwoordelijkeOrganisatie: "104567387",
5758
} as Zaak;
5859

59-
export const FIXTURE_ZAKEN: Zaak[] = [
60+
const FIXTURE_ZAKEN: Zaak[] = [
6061
FIXTURE_ZAAK,
6162
{
6263
uuid: "3038cc8e-003b-411c-b6ef-7dc5ddc5a3ee",
@@ -541,3 +542,8 @@ export const FIXTURE_ZAKEN: Zaak[] = [
541542
verantwoordelijkeOrganisatie: "104567387",
542543
},
543544
] as Zaak[];
545+
546+
const zaakFactory = createObjectFactory<Zaak>(FIXTURE_ZAAK);
547+
const zakenFactory = createArrayFactory<Zaak>(FIXTURE_ZAKEN);
548+
549+
export { zaakFactory, zakenFactory };

0 commit comments

Comments
 (0)