@nymphjs/tilmeld 1.0.0-beta.7 → 1.0.0-beta.71

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 +330 -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/User.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 User = tilmeld.User;
@@ -44,7 +44,7 @@ describe('User', () => {
44
44
  const validUser = await makeNewUser();
45
45
 
46
46
  expect(() => {
47
- defaults.validatorUser(validUser);
47
+ defaults.validatorUser({ config: defaults } as Tilmeld, validUser);
48
48
  }).not.toThrow();
49
49
  });
50
50
 
@@ -55,7 +55,83 @@ describe('User', () => {
55
55
  invalidUser.unknown = 'I should cause an error.';
56
56
 
57
57
  expect(() => {
58
- defaults.validatorUser(invalidUser);
58
+ defaults.validatorUser({ config: defaults } as Tilmeld, invalidUser);
59
59
  }).toThrow('Invalid User: "unknown" is not allowed');
60
60
  });
61
+
62
+ it("doesn't allow duplicate usernames", async () => {
63
+ const newUserA = await User.factory();
64
+
65
+ newUserA.username = 'new-user';
66
+ newUserA.email = 'newusera@localhost';
67
+ newUserA.nameFirst = 'New';
68
+ newUserA.nameLast = 'User';
69
+ newUserA.name = 'New User';
70
+ newUserA.$password('password');
71
+
72
+ const newUserB = await User.factory();
73
+
74
+ newUserB.username = 'new-user';
75
+ newUserB.email = 'newuserb@localhost';
76
+ newUserB.nameFirst = 'New';
77
+ newUserB.nameLast = 'User';
78
+ newUserB.name = 'New User';
79
+ newUserB.$password('password');
80
+
81
+ const promises = [newUserA.$saveSkipAC(), newUserB.$saveSkipAC()];
82
+
83
+ try {
84
+ await Promise.all(promises);
85
+
86
+ throw new Error("Shouldn't get here because of unique constraint.");
87
+ } catch (e: any) {
88
+ expect(e).toBeInstanceOf(EntityUniqueConstraintError);
89
+ }
90
+
91
+ await Promise.allSettled(promises);
92
+
93
+ for (const user of [newUserA, newUserB]) {
94
+ if (user.guid != null) {
95
+ expect(await user.$deleteSkipAC()).toEqual(true);
96
+ }
97
+ }
98
+ });
99
+
100
+ it("doesn't allow duplicate emails", async () => {
101
+ const newUserA = await User.factory();
102
+
103
+ newUserA.username = 'new-user-a';
104
+ newUserA.email = 'newuser@localhost';
105
+ newUserA.nameFirst = 'New';
106
+ newUserA.nameLast = 'User';
107
+ newUserA.name = 'New User';
108
+ newUserA.$password('password');
109
+
110
+ const newUserB = await User.factory();
111
+
112
+ newUserB.username = 'new-user-b';
113
+ newUserB.email = 'newuser@localhost';
114
+ newUserB.nameFirst = 'New';
115
+ newUserB.nameLast = 'User';
116
+ newUserB.name = 'New User';
117
+ newUserB.$password('password');
118
+
119
+ const promises = [newUserA.$saveSkipAC(), newUserB.$saveSkipAC()];
120
+
121
+ try {
122
+ await Promise.all(promises);
123
+
124
+ throw new Error("Shouldn't get here because of unique constraint.");
125
+ } catch (e: any) {
126
+ expect(e).toBeInstanceOf(EntityUniqueConstraintError);
127
+ }
128
+
129
+ await Promise.allSettled(promises);
130
+
131
+ for (const user of [newUserA, newUserB]) {
132
+ if (user.guid != null) {
133
+ expect(await user.$deleteSkipAC()).toEqual(true);
134
+ }
135
+ }
136
+ });
61
137
  });