@nymphjs/tilmeld 1.0.0-beta.8 → 1.0.0-beta.80
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/CHANGELOG.md +364 -0
- package/README.md +14 -1
- package/dist/AbleObject.d.ts +15 -0
- package/dist/AbleObject.js +16 -1
- package/dist/AbleObject.js.map +1 -1
- package/dist/Group.d.ts +130 -10
- package/dist/Group.js +311 -129
- package/dist/Group.js.map +1 -1
- package/dist/Group.test.js +77 -2
- package/dist/Group.test.js.map +1 -1
- package/dist/Tilmeld.d.ts +237 -9
- package/dist/Tilmeld.js +569 -201
- package/dist/Tilmeld.js.map +1 -1
- package/dist/User.d.ts +344 -16
- package/dist/User.js +979 -313
- package/dist/User.js.map +1 -1
- package/dist/User.test.js +63 -2
- package/dist/User.test.js.map +1 -1
- package/dist/conf/d.d.ts +250 -3
- package/dist/conf/defaults.js +146 -98
- package/dist/conf/defaults.js.map +1 -1
- package/dist/enforceTilmeld.d.ts +3 -0
- package/dist/enforceTilmeld.js +22 -0
- package/dist/enforceTilmeld.js.map +1 -0
- package/dist/errors/AccessControlError.d.ts +2 -1
- package/dist/errors/AccessControlError.js +3 -2
- package/dist/errors/AccessControlError.js.map +1 -1
- package/dist/errors/BadDataError.d.ts +2 -1
- package/dist/errors/BadDataError.js +3 -2
- package/dist/errors/BadDataError.js.map +1 -1
- package/dist/errors/BadEmailError.d.ts +2 -1
- package/dist/errors/BadEmailError.js +3 -2
- package/dist/errors/BadEmailError.js.map +1 -1
- package/dist/errors/BadUsernameError.d.ts +2 -1
- package/dist/errors/BadUsernameError.js +3 -2
- package/dist/errors/BadUsernameError.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +30 -26
- package/src/AbleObject.ts +2 -2
- package/src/Group.test.ts +102 -4
- package/src/Group.ts +274 -158
- package/src/Tilmeld.ts +383 -249
- package/src/User.test.ts +80 -4
- package/src/User.ts +1061 -382
- package/src/conf/d.ts +26 -13
- package/src/conf/defaults.ts +151 -104
- package/src/enforceTilmeld.ts +20 -0
- package/src/errors/AccessControlError.ts +4 -2
- package/src/errors/BadDataError.ts +4 -2
- package/src/errors/BadEmailError.ts +4 -2
- package/src/errors/BadUsernameError.ts +4 -2
- package/src/index.ts +2 -0
- package/src/tilmeldJoiProps.ts +9 -9
- package/tsconfig.json +3 -3
- package/typedoc.json +4 -0
package/src/Group.test.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SQLite3Driver } from '@nymphjs/driver-sqlite3';
|
|
2
|
-
import { Nymph } from '@nymphjs/nymph';
|
|
2
|
+
import { Nymph, EntityUniqueConstraintError } from '@nymphjs/nymph';
|
|
3
3
|
|
|
4
4
|
import Tilmeld from './Tilmeld';
|
|
5
5
|
import defaults from './conf/defaults';
|
|
@@ -21,7 +21,7 @@ const _nymph = new Nymph(
|
|
|
21
21
|
new SQLite3Driver({
|
|
22
22
|
filename: ':memory:',
|
|
23
23
|
}),
|
|
24
|
-
tilmeld
|
|
24
|
+
tilmeld,
|
|
25
25
|
);
|
|
26
26
|
|
|
27
27
|
const Group = tilmeld.Group;
|
|
@@ -41,7 +41,7 @@ describe('Group', () => {
|
|
|
41
41
|
const validGroup = await makeNewGroup();
|
|
42
42
|
|
|
43
43
|
expect(() => {
|
|
44
|
-
defaults.validatorGroup(validGroup);
|
|
44
|
+
defaults.validatorGroup({ config: defaults } as Tilmeld, validGroup);
|
|
45
45
|
}).not.toThrow();
|
|
46
46
|
});
|
|
47
47
|
|
|
@@ -52,7 +52,105 @@ describe('Group', () => {
|
|
|
52
52
|
invalidGroup.unknown = 'I should cause an error.';
|
|
53
53
|
|
|
54
54
|
expect(() => {
|
|
55
|
-
defaults.validatorGroup(invalidGroup);
|
|
55
|
+
defaults.validatorGroup({ config: defaults } as Tilmeld, invalidGroup);
|
|
56
56
|
}).toThrow('Invalid Group: "unknown" is not allowed');
|
|
57
57
|
});
|
|
58
|
+
|
|
59
|
+
it("doesn't allow duplicate groupnames", async () => {
|
|
60
|
+
const newGroupA = await Group.factory();
|
|
61
|
+
|
|
62
|
+
newGroupA.groupname = 'new-group';
|
|
63
|
+
newGroupA.email = 'newgroupa@localhost';
|
|
64
|
+
newGroupA.name = 'New Group';
|
|
65
|
+
|
|
66
|
+
const newGroupB = await Group.factory();
|
|
67
|
+
|
|
68
|
+
newGroupB.groupname = 'new-group';
|
|
69
|
+
newGroupB.email = 'newgroupb@localhost';
|
|
70
|
+
newGroupB.name = 'New Group';
|
|
71
|
+
|
|
72
|
+
const promises = [newGroupA.$saveSkipAC(), newGroupB.$saveSkipAC()];
|
|
73
|
+
|
|
74
|
+
try {
|
|
75
|
+
await Promise.all(promises);
|
|
76
|
+
|
|
77
|
+
throw new Error("Shouldn't get here because of unique constraint.");
|
|
78
|
+
} catch (e: any) {
|
|
79
|
+
expect(e).toBeInstanceOf(EntityUniqueConstraintError);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
await Promise.allSettled(promises);
|
|
83
|
+
|
|
84
|
+
for (const group of [newGroupA, newGroupB]) {
|
|
85
|
+
if (group.guid != null) {
|
|
86
|
+
expect(await group.$deleteSkipAC()).toEqual(true);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it("doesn't allow duplicate emails", async () => {
|
|
92
|
+
const newGroupA = await Group.factory();
|
|
93
|
+
|
|
94
|
+
newGroupA.groupname = 'new-group-a';
|
|
95
|
+
newGroupA.email = 'newgroup@localhost';
|
|
96
|
+
newGroupA.name = 'New Group';
|
|
97
|
+
|
|
98
|
+
const newGroupB = await Group.factory();
|
|
99
|
+
|
|
100
|
+
newGroupB.groupname = 'new-group-b';
|
|
101
|
+
newGroupB.email = 'newgroup@localhost';
|
|
102
|
+
newGroupB.name = 'New Group';
|
|
103
|
+
|
|
104
|
+
const promises = [newGroupA.$saveSkipAC(), newGroupB.$saveSkipAC()];
|
|
105
|
+
|
|
106
|
+
try {
|
|
107
|
+
await Promise.all(promises);
|
|
108
|
+
|
|
109
|
+
throw new Error("Shouldn't get here because of unique constraint.");
|
|
110
|
+
} catch (e: any) {
|
|
111
|
+
expect(e).toBeInstanceOf(EntityUniqueConstraintError);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
await Promise.allSettled(promises);
|
|
115
|
+
|
|
116
|
+
for (const group of [newGroupA, newGroupB]) {
|
|
117
|
+
if (group.guid != null) {
|
|
118
|
+
expect(await group.$deleteSkipAC()).toEqual(true);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it("doesn't allow two default primary groups", async () => {
|
|
124
|
+
const newGroupA = await Group.factory();
|
|
125
|
+
|
|
126
|
+
newGroupA.groupname = 'new-group-a';
|
|
127
|
+
newGroupA.email = 'newgroupa@localhost';
|
|
128
|
+
newGroupA.name = 'New Group';
|
|
129
|
+
newGroupA.defaultPrimary = true;
|
|
130
|
+
|
|
131
|
+
const newGroupB = await Group.factory();
|
|
132
|
+
|
|
133
|
+
newGroupB.groupname = 'new-group-b';
|
|
134
|
+
newGroupB.email = 'newgroupb@localhost';
|
|
135
|
+
newGroupB.name = 'New Group';
|
|
136
|
+
newGroupB.defaultPrimary = true;
|
|
137
|
+
|
|
138
|
+
const promises = [newGroupA.$saveSkipAC(), newGroupB.$saveSkipAC()];
|
|
139
|
+
|
|
140
|
+
try {
|
|
141
|
+
await Promise.all(promises);
|
|
142
|
+
|
|
143
|
+
throw new Error("Shouldn't get here because of unique constraint.");
|
|
144
|
+
} catch (e: any) {
|
|
145
|
+
expect(e).toBeInstanceOf(EntityUniqueConstraintError);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
await Promise.allSettled(promises);
|
|
149
|
+
|
|
150
|
+
for (const group of [newGroupA, newGroupB]) {
|
|
151
|
+
if (group.guid != null) {
|
|
152
|
+
expect(await group.$deleteSkipAC()).toEqual(true);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
});
|
|
58
156
|
});
|