@nymphjs/tilmeld 1.0.0-beta.120 → 1.0.0-beta.121

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/src/User.test.ts DELETED
@@ -1,217 +0,0 @@
1
- import { SQLite3Driver } from '@nymphjs/driver-sqlite3';
2
- import { Nymph, EntityUniqueConstraintError } from '@nymphjs/nymph';
3
-
4
- import Tilmeld from './Tilmeld.js';
5
- import defaults from './conf/defaults.js';
6
- import { AccessControlError } from './errors/index.js';
7
-
8
- const tilmeld = new Tilmeld({
9
- appName: 'My App',
10
- appUrl: 'http://localhost:8080',
11
- cookieDomain: 'localhost',
12
- cookiePath: '/',
13
- setupPath: '/user',
14
- emailUsernames: false,
15
- domainSupport: true,
16
- verifyRedirect: 'http://localhost:8080',
17
- verifyChangeRedirect: 'http://localhost:8080',
18
- cancelChangeRedirect: 'http://localhost:8080',
19
- jwtSecret: 'shhhhh',
20
- sendEmail: async (_tilmeld, _options, _user) => {
21
- return true;
22
- },
23
- });
24
- const nymph = new Nymph(
25
- {},
26
- new SQLite3Driver({
27
- filename: ':memory:',
28
- }),
29
- tilmeld,
30
- );
31
-
32
- const User = tilmeld.User;
33
-
34
- describe('User', () => {
35
- async function makeNewUser() {
36
- const newUser = await User.factory();
37
-
38
- newUser.username = 'new-user';
39
- newUser.email = 'newuser@localhost';
40
- newUser.nameFirst = 'New';
41
- newUser.nameLast = 'User';
42
- newUser.name = 'New User';
43
- newUser.$password('password');
44
-
45
- return newUser;
46
- }
47
-
48
- it('new user passes validation', async () => {
49
- const validUser = await makeNewUser();
50
-
51
- expect(() => {
52
- defaults.validatorUser({ config: defaults } as Tilmeld, validUser);
53
- }).not.toThrow();
54
- });
55
-
56
- it("doesn't allow unknown keys", async () => {
57
- const invalidUser = await makeNewUser();
58
-
59
- // @ts-ignore: testing unknown keys
60
- invalidUser.unknown = 'I should cause an error.';
61
-
62
- expect(() => {
63
- defaults.validatorUser({ config: defaults } as Tilmeld, invalidUser);
64
- }).toThrow('Invalid User: "unknown" is not allowed');
65
- });
66
-
67
- it("doesn't allow duplicate usernames", async () => {
68
- const transaction = 'duplicate-usernames';
69
- const tnymph = await nymph.startTransaction(transaction);
70
- const TUser = tnymph.getEntityClass(User.class) as typeof User;
71
- const newUserA = await TUser.factory();
72
-
73
- newUserA.username = 'new-user';
74
- newUserA.email = 'newusera@localhost';
75
- newUserA.nameFirst = 'New';
76
- newUserA.nameLast = 'User';
77
- newUserA.name = 'New User';
78
- newUserA.$password('password');
79
-
80
- const newUserB = await TUser.factory();
81
-
82
- newUserB.username = 'new-user';
83
- newUserB.email = 'newuserb@localhost';
84
- newUserB.nameFirst = 'New';
85
- newUserB.nameLast = 'User';
86
- newUserB.name = 'New User';
87
- newUserB.$password('password');
88
-
89
- const promises = [newUserA.$saveSkipAC(), newUserB.$saveSkipAC()];
90
-
91
- try {
92
- await Promise.all(promises);
93
-
94
- throw new Error("Shouldn't get here because of unique constraint.");
95
- } catch (e: any) {
96
- expect(e).toBeInstanceOf(EntityUniqueConstraintError);
97
- }
98
-
99
- await Promise.allSettled(promises);
100
- await tnymph.rollback(transaction);
101
- });
102
-
103
- it("doesn't allow duplicate emails", async () => {
104
- const transaction = 'duplicate-usernames';
105
- const tnymph = await nymph.startTransaction(transaction);
106
- const TUser = tnymph.getEntityClass(User.class) as typeof User;
107
- const newUserA = await TUser.factory();
108
-
109
- newUserA.username = 'new-user-a';
110
- newUserA.email = 'newuser@localhost';
111
- newUserA.nameFirst = 'New';
112
- newUserA.nameLast = 'User';
113
- newUserA.name = 'New User';
114
- newUserA.$password('password');
115
-
116
- const newUserB = await TUser.factory();
117
-
118
- newUserB.username = 'new-user-b';
119
- newUserB.email = 'newuser@localhost';
120
- newUserB.nameFirst = 'New';
121
- newUserB.nameLast = 'User';
122
- newUserB.name = 'New User';
123
- newUserB.$password('password');
124
-
125
- const promises = [newUserA.$saveSkipAC(), newUserB.$saveSkipAC()];
126
-
127
- try {
128
- await Promise.all(promises);
129
-
130
- throw new Error("Shouldn't get here because of unique constraint.");
131
- } catch (e: any) {
132
- expect(e).toBeInstanceOf(EntityUniqueConstraintError);
133
- }
134
-
135
- await Promise.allSettled(promises);
136
- await tnymph.rollback(transaction);
137
- });
138
-
139
- it('allows a domain user', async () => {
140
- const domainAdmin = await User.factory();
141
-
142
- domainAdmin.username = 'admin';
143
- domainAdmin.email = 'admin@localhost';
144
- domainAdmin.nameFirst = 'Admin';
145
- domainAdmin.nameLast = 'User';
146
- domainAdmin.name = 'Admin User';
147
- domainAdmin.$password('password');
148
- domainAdmin.$grant('tilmeld/domain/example.com/admin');
149
-
150
- expect(await domainAdmin.$saveSkipAC()).toEqual(true);
151
-
152
- // Log in the domain admin.
153
- await tilmeld.fillSession(domainAdmin);
154
-
155
- const domainUser = await User.factory();
156
-
157
- domainUser.username = 'new-user@example.com';
158
- domainUser.email = 'newuser@localhost';
159
- domainUser.nameFirst = 'New';
160
- domainUser.nameLast = 'User';
161
- domainUser.name = 'New User';
162
- domainUser.$password('password');
163
-
164
- expect(await domainUser.$save()).toEqual(true);
165
-
166
- tilmeld.clearSession();
167
-
168
- for (const user of [domainAdmin, domainUser]) {
169
- if (user.guid != null) {
170
- expect(await user.$deleteSkipAC()).toEqual(true);
171
- }
172
- }
173
- });
174
-
175
- it('disallows a domain user with no admin permission', async () => {
176
- const domainAdmin = await User.factory();
177
-
178
- domainAdmin.username = 'admin';
179
- domainAdmin.email = 'admin@localhost';
180
- domainAdmin.nameFirst = 'Admin';
181
- domainAdmin.nameLast = 'User';
182
- domainAdmin.name = 'Admin User';
183
- domainAdmin.$password('password');
184
- domainAdmin.$grant('tilmeld/domain/example.com/admin');
185
-
186
- expect(await domainAdmin.$saveSkipAC()).toEqual(true);
187
-
188
- // Log in the domain admin.
189
- await tilmeld.fillSession(domainAdmin);
190
-
191
- const domainUser = await User.factory();
192
-
193
- // The wrong domain name.
194
- domainUser.username = 'new-user@example.net';
195
- domainUser.email = 'newuser@localhost';
196
- domainUser.nameFirst = 'New';
197
- domainUser.nameLast = 'User';
198
- domainUser.name = 'New User';
199
- domainUser.$password('password');
200
-
201
- try {
202
- await domainUser.$save();
203
-
204
- throw new Error("Shouldn't get here because of access control.");
205
- } catch (e: any) {
206
- expect(e).toBeInstanceOf(AccessControlError);
207
- }
208
-
209
- tilmeld.clearSession();
210
-
211
- for (const user of [domainAdmin, domainUser]) {
212
- if (user.guid != null) {
213
- expect(await user.$deleteSkipAC()).toEqual(true);
214
- }
215
- }
216
- });
217
- });