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