@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 CHANGED
@@ -3,6 +3,12 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [1.0.0-beta.121](https://forge.sciactive.com/sciactive/nymphjs/compare/v1.0.0-beta.120...v1.0.0-beta.121) (2026-09-17)
7
+
8
+ ### Bug Fixes
9
+
10
+ - improve transaction creation on root instance, move tilmeld entity tests to exported artifacts ([9f48d27](https://forge.sciactive.com/sciactive/nymphjs/commits/9f48d279c2fba9ae188e52fe996f50e58a39d4a7))
11
+
6
12
  # [1.0.0-beta.120](https://forge.sciactive.com/sciactive/nymphjs/compare/v1.0.0-beta.119...v1.0.0-beta.120) (2026-09-01)
7
13
 
8
14
  **Note:** Version bump only for package @nymphjs/tilmeld
@@ -0,0 +1,3 @@
1
+ import { type Nymph } from '@nymphjs/nymph';
2
+ import type Tilmeld from './Tilmeld.js';
3
+ export declare function GroupTest(nymph: Nymph, tilmeld: Tilmeld, describe: (name: string, fn: () => void) => void, it: (name: string, fn: () => void) => void): void;
@@ -0,0 +1,120 @@
1
+ import { EntityUniqueConstraintError } from '@nymphjs/nymph';
2
+ import defaults from './conf/defaults.js';
3
+ export function GroupTest(nymph, tilmeld, describe, it) {
4
+ const User = tilmeld.User;
5
+ const Group = tilmeld.Group;
6
+ describe('Group', () => {
7
+ beforeAll(async () => {
8
+ // Ensure the tables exist.
9
+ try {
10
+ await User.factoryUsername('user');
11
+ await Group.factoryGroupname('group');
12
+ }
13
+ catch (e) {
14
+ // ignore
15
+ }
16
+ });
17
+ async function makeNewGroup() {
18
+ const newGroup = await Group.factory();
19
+ newGroup.groupname = 'new-group';
20
+ newGroup.email = 'newgroup@localhost';
21
+ newGroup.name = 'New Group';
22
+ return newGroup;
23
+ }
24
+ it('new group passes validation', async () => {
25
+ const validGroup = await makeNewGroup();
26
+ expect(() => {
27
+ defaults.validatorGroup({ config: defaults }, validGroup);
28
+ }).not.toThrow();
29
+ });
30
+ it("doesn't allow unknown keys", async () => {
31
+ const invalidGroup = await makeNewGroup();
32
+ // @ts-ignore: testing unknown keys
33
+ invalidGroup.unknown = 'I should cause an error.';
34
+ expect(() => {
35
+ defaults.validatorGroup({ config: defaults }, invalidGroup);
36
+ }).toThrow('Invalid Group: "unknown" is not allowed');
37
+ });
38
+ it("doesn't allow duplicate groupnames", async () => {
39
+ class NoGroupnameCheckGroup extends Group {
40
+ async $checkGroupname() {
41
+ return {
42
+ result: true,
43
+ message: 'No problem here!',
44
+ };
45
+ }
46
+ }
47
+ const newGroupA = await NoGroupnameCheckGroup.factory();
48
+ newGroupA.groupname = 'new-group';
49
+ newGroupA.email = 'newgroupa@localhost';
50
+ newGroupA.name = 'New Group';
51
+ await newGroupA.$saveSkipAC();
52
+ const newGroupB = await NoGroupnameCheckGroup.factory();
53
+ newGroupB.groupname = 'new-group';
54
+ newGroupB.email = 'newgroupb@localhost';
55
+ newGroupB.name = 'New Group';
56
+ try {
57
+ await newGroupB.$saveSkipAC();
58
+ throw new Error("Shouldn't get here because of unique constraint.");
59
+ }
60
+ catch (e) {
61
+ expect(e).toBeInstanceOf(EntityUniqueConstraintError);
62
+ }
63
+ expect(await newGroupA.$deleteSkipAC()).toEqual(true);
64
+ });
65
+ it("doesn't allow duplicate emails", async () => {
66
+ class NoEmailCheckGroup extends Group {
67
+ async $checkEmail() {
68
+ return {
69
+ result: true,
70
+ message: 'No problem here!',
71
+ };
72
+ }
73
+ }
74
+ const newGroupA = await NoEmailCheckGroup.factory();
75
+ newGroupA.groupname = 'new-group-a';
76
+ newGroupA.email = 'newgroup@localhost';
77
+ newGroupA.name = 'New Group';
78
+ await newGroupA.$saveSkipAC();
79
+ const newGroupB = await NoEmailCheckGroup.factory();
80
+ newGroupB.groupname = 'new-group-b';
81
+ newGroupB.email = 'newgroup@localhost';
82
+ newGroupB.name = 'New Group';
83
+ try {
84
+ await newGroupB.$saveSkipAC();
85
+ throw new Error("Shouldn't get here because of unique constraint.");
86
+ }
87
+ catch (e) {
88
+ expect(e).toBeInstanceOf(EntityUniqueConstraintError);
89
+ }
90
+ expect(await newGroupA.$deleteSkipAC()).toEqual(true);
91
+ });
92
+ it("doesn't allow two default primary groups", async () => {
93
+ const newGroupA = await Group.factory();
94
+ newGroupA.groupname = 'new-group-a';
95
+ newGroupA.email = 'newgroupa@localhost';
96
+ newGroupA.name = 'New Group';
97
+ newGroupA.defaultPrimary = true;
98
+ const newGroupB = await Group.factory();
99
+ newGroupB.groupname = 'new-group-b';
100
+ newGroupB.email = 'newgroupb@localhost';
101
+ newGroupB.name = 'New Group';
102
+ newGroupB.defaultPrimary = true;
103
+ const promises = [newGroupA.$saveSkipAC(), newGroupB.$saveSkipAC()];
104
+ try {
105
+ await Promise.all(promises);
106
+ throw new Error("Shouldn't get here because of unique constraint.");
107
+ }
108
+ catch (e) {
109
+ expect(e).toBeInstanceOf(EntityUniqueConstraintError);
110
+ }
111
+ await Promise.allSettled(promises);
112
+ for (const group of [newGroupA, newGroupB]) {
113
+ if (group.guid != null) {
114
+ expect(await group.$deleteSkipAC()).toEqual(true);
115
+ }
116
+ }
117
+ });
118
+ });
119
+ }
120
+ //# sourceMappingURL=Group.testArtifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Group.testArtifacts.js","sourceRoot":"","sources":["../src/Group.testArtifacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type Nymph } from '@nymphjs/nymph';
2
+ import type Tilmeld from './Tilmeld.js';
3
+ export declare function UserTest(nymph: Nymph, tilmeld: Tilmeld, describe: (name: string, fn: () => void) => void, it: (name: string, fn: () => void) => void): void;
@@ -0,0 +1,175 @@
1
+ import { EntityUniqueConstraintError } from '@nymphjs/nymph';
2
+ import defaults from './conf/defaults.js';
3
+ import { AccessControlError } from './errors/index.js';
4
+ export function UserTest(nymph, tilmeld, describe, it) {
5
+ const User = tilmeld.User;
6
+ const Group = tilmeld.Group;
7
+ describe('User', () => {
8
+ beforeAll(async () => {
9
+ // Ensure the tables exist.
10
+ try {
11
+ await User.factoryUsername('user');
12
+ await Group.factoryGroupname('group');
13
+ }
14
+ catch (e) {
15
+ // ignore
16
+ }
17
+ });
18
+ async function makeNewUser() {
19
+ const newUser = await User.factory();
20
+ newUser.username = 'new-user';
21
+ newUser.email = 'newuser@localhost';
22
+ newUser.nameFirst = 'New';
23
+ newUser.nameLast = 'User';
24
+ newUser.name = 'New User';
25
+ newUser.$password('password');
26
+ return newUser;
27
+ }
28
+ it('new user passes validation', async () => {
29
+ const validUser = await makeNewUser();
30
+ expect(() => {
31
+ defaults.validatorUser({ config: defaults }, validUser);
32
+ }).not.toThrow();
33
+ });
34
+ it("doesn't allow unknown keys", async () => {
35
+ const invalidUser = await makeNewUser();
36
+ // @ts-ignore: testing unknown keys
37
+ invalidUser.unknown = 'I should cause an error.';
38
+ expect(() => {
39
+ defaults.validatorUser({ config: defaults }, invalidUser);
40
+ }).toThrow('Invalid User: "unknown" is not allowed');
41
+ });
42
+ it("doesn't allow duplicate usernames", async () => {
43
+ tilmeld.config.generatePrimary = false;
44
+ class NoUsernameCheckUser extends User {
45
+ async $checkUsername() {
46
+ return {
47
+ result: true,
48
+ message: 'No problem here!',
49
+ };
50
+ }
51
+ }
52
+ const newUserA = await NoUsernameCheckUser.factory();
53
+ newUserA.username = 'new-user';
54
+ newUserA.email = 'newusera@localhost';
55
+ newUserA.nameFirst = 'New';
56
+ newUserA.nameLast = 'User';
57
+ newUserA.name = 'New User';
58
+ newUserA.$password('password');
59
+ await newUserA.$saveSkipAC();
60
+ const newUserB = await NoUsernameCheckUser.factory();
61
+ newUserB.username = 'new-user';
62
+ newUserB.email = 'newuserb@localhost';
63
+ newUserB.nameFirst = 'New';
64
+ newUserB.nameLast = 'User';
65
+ newUserB.name = 'New User';
66
+ newUserB.$password('password');
67
+ try {
68
+ await newUserB.$saveSkipAC();
69
+ throw new Error("Shouldn't get here because of unique constraint.");
70
+ }
71
+ catch (e) {
72
+ expect(e).toBeInstanceOf(EntityUniqueConstraintError);
73
+ }
74
+ expect(await newUserA.$deleteSkipAC()).toEqual(true);
75
+ tilmeld.config.generatePrimary = true;
76
+ });
77
+ it("doesn't allow duplicate emails", async () => {
78
+ tilmeld.config.generatePrimary = false;
79
+ class NoEmailCheckUser extends User {
80
+ async $checkEmail() {
81
+ return {
82
+ result: true,
83
+ message: 'No problem here!',
84
+ };
85
+ }
86
+ }
87
+ const newUserA = await NoEmailCheckUser.factory();
88
+ newUserA.username = 'new-user-a';
89
+ newUserA.email = 'newuser@localhost';
90
+ newUserA.nameFirst = 'New';
91
+ newUserA.nameLast = 'User';
92
+ newUserA.name = 'New User';
93
+ newUserA.$password('password');
94
+ await newUserA.$saveSkipAC();
95
+ const newUserB = await NoEmailCheckUser.factory();
96
+ newUserB.username = 'new-user-b';
97
+ newUserB.email = 'newuser@localhost';
98
+ newUserB.nameFirst = 'New';
99
+ newUserB.nameLast = 'User';
100
+ newUserB.name = 'New User';
101
+ newUserB.$password('password');
102
+ try {
103
+ await newUserB.$saveSkipAC();
104
+ throw new Error("Shouldn't get here because of unique constraint.");
105
+ }
106
+ catch (e) {
107
+ expect(e).toBeInstanceOf(EntityUniqueConstraintError);
108
+ }
109
+ expect(await newUserA.$deleteSkipAC()).toEqual(true);
110
+ tilmeld.config.generatePrimary = true;
111
+ });
112
+ it('allows a domain user', async () => {
113
+ const domainAdmin = await User.factory();
114
+ domainAdmin.username = 'admin';
115
+ domainAdmin.email = 'admin@localhost';
116
+ domainAdmin.nameFirst = 'Admin';
117
+ domainAdmin.nameLast = 'User';
118
+ domainAdmin.name = 'Admin User';
119
+ domainAdmin.$password('password');
120
+ domainAdmin.$grant('tilmeld/domain/example.com/admin');
121
+ expect(await domainAdmin.$saveSkipAC()).toEqual(true);
122
+ // Log in the domain admin.
123
+ await tilmeld.fillSession(domainAdmin);
124
+ const domainUser = await User.factory();
125
+ domainUser.username = 'new-user@example.com';
126
+ domainUser.email = 'newuser@localhost';
127
+ domainUser.nameFirst = 'New';
128
+ domainUser.nameLast = 'User';
129
+ domainUser.name = 'New User';
130
+ domainUser.$password('password');
131
+ expect(await domainUser.$save()).toEqual(true);
132
+ tilmeld.clearSession();
133
+ for (const user of [domainAdmin, domainUser]) {
134
+ if (user.guid != null) {
135
+ expect(await user.$deleteSkipAC()).toEqual(true);
136
+ }
137
+ }
138
+ });
139
+ it('disallows a domain user with no admin permission', async () => {
140
+ const domainAdmin = await User.factory();
141
+ domainAdmin.username = 'admin';
142
+ domainAdmin.email = 'admin@localhost';
143
+ domainAdmin.nameFirst = 'Admin';
144
+ domainAdmin.nameLast = 'User';
145
+ domainAdmin.name = 'Admin User';
146
+ domainAdmin.$password('password');
147
+ domainAdmin.$grant('tilmeld/domain/example.com/admin');
148
+ expect(await domainAdmin.$saveSkipAC()).toEqual(true);
149
+ // Log in the domain admin.
150
+ await tilmeld.fillSession(domainAdmin);
151
+ const domainUser = await User.factory();
152
+ // The wrong domain name.
153
+ domainUser.username = 'new-user@example.net';
154
+ domainUser.email = 'newuser@localhost';
155
+ domainUser.nameFirst = 'New';
156
+ domainUser.nameLast = 'User';
157
+ domainUser.name = 'New User';
158
+ domainUser.$password('password');
159
+ try {
160
+ await domainUser.$save();
161
+ throw new Error("Shouldn't get here because of access control.");
162
+ }
163
+ catch (e) {
164
+ expect(e).toBeInstanceOf(AccessControlError);
165
+ }
166
+ tilmeld.clearSession();
167
+ for (const user of [domainAdmin, domainUser]) {
168
+ if (user.guid != null) {
169
+ expect(await user.$deleteSkipAC()).toEqual(true);
170
+ }
171
+ }
172
+ });
173
+ });
174
+ }
175
+ //# sourceMappingURL=User.testArtifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"User.testArtifacts.js","sourceRoot":"","sources":["../src/User.testArtifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAGzE,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,UAAU,QAAQ,CACtB,KAAY,EACZ,OAAgB,EAChB,QAAgD,EAChD,EAA0C;IAE1C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAE5B,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,SAAS,CAAC,KAAK,IAAI,EAAE;YACnB,2BAA2B;YAC3B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gBACnC,MAAM,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACxC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,SAAS;YACX,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,UAAU,WAAW;YACxB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAErC,OAAO,CAAC,QAAQ,GAAG,UAAU,CAAC;YAC9B,OAAO,CAAC,KAAK,GAAG,mBAAmB,CAAC;YACpC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;YAC1B,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC;YAC1B,OAAO,CAAC,IAAI,GAAG,UAAU,CAAC;YAC1B,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAE9B,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YAC1C,MAAM,SAAS,GAAG,MAAM,WAAW,EAAE,CAAC;YAEtC,MAAM,CAAC,GAAG,EAAE;gBACV,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAa,EAAE,SAAS,CAAC,CAAC;YACrE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YAC1C,MAAM,WAAW,GAAG,MAAM,WAAW,EAAE,CAAC;YAExC,mCAAmC;YACnC,WAAW,CAAC,OAAO,GAAG,0BAA0B,CAAC;YAEjD,MAAM,CAAC,GAAG,EAAE;gBACV,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAa,EAAE,WAAW,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,OAAO,CAAC,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC;YACvC,MAAM,mBAAoB,SAAQ,IAAI;gBAC7B,KAAK,CAAC,cAAc;oBACzB,OAAO;wBACL,MAAM,EAAE,IAAI;wBACZ,OAAO,EAAE,kBAAkB;qBAC5B,CAAC;gBACJ,CAAC;aACF;YAED,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,CAAC;YAErD,QAAQ,CAAC,QAAQ,GAAG,UAAU,CAAC;YAC/B,QAAQ,CAAC,KAAK,GAAG,oBAAoB,CAAC;YACtC,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC;YAC3B,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC;YAC3B,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC;YAC3B,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAE/B,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;YAE7B,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,CAAC;YAErD,QAAQ,CAAC,QAAQ,GAAG,UAAU,CAAC;YAC/B,QAAQ,CAAC,KAAK,GAAG,oBAAoB,CAAC;YACtC,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC;YAC3B,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC;YAC3B,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC;YAC3B,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAE/B,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAE7B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACtE,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,2BAA2B,CAAC,CAAC;YACxD,CAAC;YAED,MAAM,CAAC,MAAM,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAErD,OAAO,CAAC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAC9C,OAAO,CAAC,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC;YACvC,MAAM,gBAAiB,SAAQ,IAAI;gBAC1B,KAAK,CAAC,WAAW;oBACtB,OAAO;wBACL,MAAM,EAAE,IAAI;wBACZ,OAAO,EAAE,kBAAkB;qBAC5B,CAAC;gBACJ,CAAC;aACF;YAED,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAElD,QAAQ,CAAC,QAAQ,GAAG,YAAY,CAAC;YACjC,QAAQ,CAAC,KAAK,GAAG,mBAAmB,CAAC;YACrC,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC;YAC3B,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC;YAC3B,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC;YAC3B,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAE/B,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;YAE7B,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAElD,QAAQ,CAAC,QAAQ,GAAG,YAAY,CAAC;YACjC,QAAQ,CAAC,KAAK,GAAG,mBAAmB,CAAC;YACrC,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC;YAC3B,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC;YAC3B,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC;YAC3B,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAE/B,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAE7B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACtE,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,2BAA2B,CAAC,CAAC;YACxD,CAAC;YAED,MAAM,CAAC,MAAM,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAErD,OAAO,CAAC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;YACpC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAEzC,WAAW,CAAC,QAAQ,GAAG,OAAO,CAAC;YAC/B,WAAW,CAAC,KAAK,GAAG,iBAAiB,CAAC;YACtC,WAAW,CAAC,SAAS,GAAG,OAAO,CAAC;YAChC,WAAW,CAAC,QAAQ,GAAG,MAAM,CAAC;YAC9B,WAAW,CAAC,IAAI,GAAG,YAAY,CAAC;YAChC,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAClC,WAAW,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;YAEvD,MAAM,CAAC,MAAM,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAEtD,2BAA2B;YAC3B,MAAM,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAEvC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAExC,UAAU,CAAC,QAAQ,GAAG,sBAAsB,CAAC;YAC7C,UAAU,CAAC,KAAK,GAAG,mBAAmB,CAAC;YACvC,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC;YAC7B,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC;YAC7B,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC;YAC7B,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAEjC,MAAM,CAAC,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE/C,OAAO,CAAC,YAAY,EAAE,CAAC;YAEvB,KAAK,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;gBAC7C,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;oBACtB,MAAM,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAEzC,WAAW,CAAC,QAAQ,GAAG,OAAO,CAAC;YAC/B,WAAW,CAAC,KAAK,GAAG,iBAAiB,CAAC;YACtC,WAAW,CAAC,SAAS,GAAG,OAAO,CAAC;YAChC,WAAW,CAAC,QAAQ,GAAG,MAAM,CAAC;YAC9B,WAAW,CAAC,IAAI,GAAG,YAAY,CAAC;YAChC,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAClC,WAAW,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;YAEvD,MAAM,CAAC,MAAM,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAEtD,2BAA2B;YAC3B,MAAM,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAEvC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAExC,yBAAyB;YACzB,UAAU,CAAC,QAAQ,GAAG,sBAAsB,CAAC;YAC7C,UAAU,CAAC,KAAK,GAAG,mBAAmB,CAAC;YACvC,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC;YAC7B,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC;YAC7B,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC;YAC7B,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAEjC,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;gBAEzB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YACnE,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;YAC/C,CAAC;YAED,OAAO,CAAC,YAAY,EAAE,CAAC;YAEvB,KAAK,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;gBAC7C,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;oBACtB,MAAM,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -16,4 +16,4 @@ export declare class TestModel extends Entity<TestModelData> {
16
16
  $deleteSkipAC(): Promise<boolean>;
17
17
  $tilmeldDeleteSkipAC(): boolean;
18
18
  }
19
- export declare function TilmeldTest(nymphBase: Nymph, it: (name: string, fn: () => void) => void): void;
19
+ export declare function TilmeldTest(nymphBase: Nymph, describe: (name: string, fn: () => void) => void, it: (name: string, fn: () => void) => void): void;