@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.
Files changed (57) hide show
  1. package/CHANGELOG.md +364 -0
  2. package/README.md +14 -1
  3. package/dist/AbleObject.d.ts +15 -0
  4. package/dist/AbleObject.js +16 -1
  5. package/dist/AbleObject.js.map +1 -1
  6. package/dist/Group.d.ts +130 -10
  7. package/dist/Group.js +311 -129
  8. package/dist/Group.js.map +1 -1
  9. package/dist/Group.test.js +77 -2
  10. package/dist/Group.test.js.map +1 -1
  11. package/dist/Tilmeld.d.ts +237 -9
  12. package/dist/Tilmeld.js +569 -201
  13. package/dist/Tilmeld.js.map +1 -1
  14. package/dist/User.d.ts +344 -16
  15. package/dist/User.js +979 -313
  16. package/dist/User.js.map +1 -1
  17. package/dist/User.test.js +63 -2
  18. package/dist/User.test.js.map +1 -1
  19. package/dist/conf/d.d.ts +250 -3
  20. package/dist/conf/defaults.js +146 -98
  21. package/dist/conf/defaults.js.map +1 -1
  22. package/dist/enforceTilmeld.d.ts +3 -0
  23. package/dist/enforceTilmeld.js +22 -0
  24. package/dist/enforceTilmeld.js.map +1 -0
  25. package/dist/errors/AccessControlError.d.ts +2 -1
  26. package/dist/errors/AccessControlError.js +3 -2
  27. package/dist/errors/AccessControlError.js.map +1 -1
  28. package/dist/errors/BadDataError.d.ts +2 -1
  29. package/dist/errors/BadDataError.js +3 -2
  30. package/dist/errors/BadDataError.js.map +1 -1
  31. package/dist/errors/BadEmailError.d.ts +2 -1
  32. package/dist/errors/BadEmailError.js +3 -2
  33. package/dist/errors/BadEmailError.js.map +1 -1
  34. package/dist/errors/BadUsernameError.d.ts +2 -1
  35. package/dist/errors/BadUsernameError.js +3 -2
  36. package/dist/errors/BadUsernameError.js.map +1 -1
  37. package/dist/index.d.ts +1 -0
  38. package/dist/index.js +1 -0
  39. package/dist/index.js.map +1 -1
  40. package/package.json +30 -26
  41. package/src/AbleObject.ts +2 -2
  42. package/src/Group.test.ts +102 -4
  43. package/src/Group.ts +274 -158
  44. package/src/Tilmeld.ts +383 -249
  45. package/src/User.test.ts +80 -4
  46. package/src/User.ts +1061 -382
  47. package/src/conf/d.ts +26 -13
  48. package/src/conf/defaults.ts +151 -104
  49. package/src/enforceTilmeld.ts +20 -0
  50. package/src/errors/AccessControlError.ts +4 -2
  51. package/src/errors/BadDataError.ts +4 -2
  52. package/src/errors/BadEmailError.ts +4 -2
  53. package/src/errors/BadUsernameError.ts +4 -2
  54. package/src/index.ts +2 -0
  55. package/src/tilmeldJoiProps.ts +9 -9
  56. package/tsconfig.json +3 -3
  57. 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
  });