@lilaquadrat/studio 11.4.2 → 12.0.0

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 (62) hide show
  1. package/lib/services.d.ts +2 -1
  2. package/lib/services.js +2 -1
  3. package/lib/services.js.map +1 -1
  4. package/lib/src/Immutable.class.d.ts +5 -1
  5. package/lib/src/Immutable.class.js +16 -1
  6. package/lib/src/Immutable.class.js.map +1 -1
  7. package/lib/src/helpers/cacheHelper.js +4 -0
  8. package/lib/src/helpers/cacheHelper.js.map +1 -1
  9. package/lib/src/interfaces/Participant.d.ts +1 -1
  10. package/lib/src/interfaces/Participant.js +1 -1
  11. package/lib/src/interfaces/Participant.js.map +1 -1
  12. package/lib/src/models/customers.model.js +17 -0
  13. package/lib/src/models/customers.model.js.map +1 -1
  14. package/lib/src/models/history.model.js +25 -6
  15. package/lib/src/models/history.model.js.map +1 -1
  16. package/lib/src/models/license.model.js +5 -25
  17. package/lib/src/models/license.model.js.map +1 -1
  18. package/lib/src/models/lists.model.js +2 -0
  19. package/lib/src/models/lists.model.js.map +1 -1
  20. package/lib/src/models/listsParticipants.model.js +13 -3
  21. package/lib/src/models/listsParticipants.model.js.map +1 -1
  22. package/lib/src/services/customers.service.d.ts +2 -1
  23. package/lib/src/services/customers.service.js +33 -1
  24. package/lib/src/services/customers.service.js.map +1 -1
  25. package/lib/src/services/history.service.d.ts +4 -4
  26. package/lib/src/services/history.service.js +50 -53
  27. package/lib/src/services/history.service.js.map +1 -1
  28. package/lib/src/services/license.service.d.ts +11 -0
  29. package/lib/src/services/license.service.js +28 -0
  30. package/lib/src/services/license.service.js.map +1 -0
  31. package/lib/src/services/listParticipants.service.d.ts +16 -1
  32. package/lib/src/services/listParticipants.service.js +69 -10
  33. package/lib/src/services/listParticipants.service.js.map +1 -1
  34. package/lib/src/services/lists.service.js +4 -4
  35. package/lib/src/services/lists.service.js.map +1 -1
  36. package/lib/src/services/structures.service.d.ts +4 -0
  37. package/lib/src/services/structures.service.js +4 -1
  38. package/lib/src/services/structures.service.js.map +1 -1
  39. package/lib/tests/cacheHelper.spec.js +4 -0
  40. package/lib/tests/cacheHelper.spec.js.map +1 -1
  41. package/lib/tests/customersServiceUpdateMe.spec.d.ts +1 -0
  42. package/lib/tests/customersServiceUpdateMe.spec.js +276 -0
  43. package/lib/tests/customersServiceUpdateMe.spec.js.map +1 -0
  44. package/lib/tests/immutableClass.spec.d.ts +1 -0
  45. package/lib/tests/immutableClass.spec.js +552 -0
  46. package/lib/tests/immutableClass.spec.js.map +1 -0
  47. package/lib/tests/licenseModel.spec.d.ts +1 -0
  48. package/lib/tests/licenseModel.spec.js +43 -0
  49. package/lib/tests/licenseModel.spec.js.map +1 -0
  50. package/lib/tests/licenseService.spec.d.ts +1 -0
  51. package/lib/tests/licenseService.spec.js +47 -0
  52. package/lib/tests/licenseService.spec.js.map +1 -0
  53. package/lib/tests/listParticipantsHistory.spec.d.ts +1 -0
  54. package/lib/tests/listParticipantsHistory.spec.js +90 -0
  55. package/lib/tests/listParticipantsHistory.spec.js.map +1 -0
  56. package/lib/tests/listParticipantsMembersSelfService.spec.d.ts +1 -0
  57. package/lib/tests/listParticipantsMembersSelfService.spec.js +241 -0
  58. package/lib/tests/listParticipantsMembersSelfService.spec.js.map +1 -0
  59. package/lib/tests/listParticipantsServiceGetMyLists.spec.d.ts +1 -0
  60. package/lib/tests/listParticipantsServiceGetMyLists.spec.js +55 -0
  61. package/lib/tests/listParticipantsServiceGetMyLists.spec.js.map +1 -0
  62. package/package.json +2 -2
@@ -0,0 +1,276 @@
1
+ import { afterAll, beforeAll, beforeEach, describe, expect, it, jest } from '@jest/globals';
2
+ import mongodb from 'mongo-mock';
3
+ import { ObjectId } from 'mongodb';
4
+ import Models from '../src/classes/models.class.js';
5
+ import CustomersModel from '../src/models/customers.model.js';
6
+ import HistoryModel from '../src/models/history.model.js';
7
+ import StructureModel from '../src/models/structure.model.js';
8
+ import CustomersService from '../src/services/customers.service.js';
9
+ import HistoryService from '../src/services/history.service.js';
10
+ import StructureService from '../src/services/structures.service.js';
11
+ const customerId = new ObjectId();
12
+ const options = { user: 'member-account', app: 'member-app', company: 'company', project: 'project' };
13
+ const customer = {
14
+ _id: customerId,
15
+ id: 'customer-1',
16
+ type: 'person',
17
+ company: options.company,
18
+ prename: 'Anna',
19
+ name: 'Müller',
20
+ street: 'Old Street',
21
+ streetNumber: '12',
22
+ zipcode: '12345',
23
+ city: 'Berlin',
24
+ country: 'DE',
25
+ phone: '0123456789',
26
+ email: 'member@example.org',
27
+ emailConfirmed: true,
28
+ emailConfirmationCode: 'private-code',
29
+ note: 'Internal note',
30
+ tags: ['internal'],
31
+ accounts: [{ account: options.user, app: options.app, project: options.project }],
32
+ history: { source: 'public-app', version: 0 },
33
+ };
34
+ const structures = [
35
+ {
36
+ _id: new ObjectId(),
37
+ id: 's-string-1',
38
+ model: 'customers',
39
+ company: options.company,
40
+ type: 'string',
41
+ question: 'Favorite color',
42
+ max: 20,
43
+ },
44
+ {
45
+ _id: new ObjectId(),
46
+ id: 's-select-1',
47
+ model: 'customers',
48
+ company: options.company,
49
+ type: 'select',
50
+ question: 'Choice',
51
+ options: [{ value: 'a', text: 'A' }, { value: 'b', text: 'B' }],
52
+ },
53
+ {
54
+ _id: new ObjectId(),
55
+ id: 's-bool-1',
56
+ model: 'customers',
57
+ company: options.company,
58
+ type: 'boolean',
59
+ question: 'Newsletter',
60
+ },
61
+ {
62
+ _id: new ObjectId(),
63
+ id: 's-number-1',
64
+ model: 'customers',
65
+ company: options.company,
66
+ type: 'number',
67
+ question: 'Seats',
68
+ },
69
+ // customer structures are company scoped and intentionally have no project
70
+ ];
71
+ describe('member profile updates', () => {
72
+ let client;
73
+ beforeAll(async () => {
74
+ mongodb.max_delay = 0;
75
+ client = await mongodb.MongoClient.connect('mongodb://localhost:27017/member-profile-tests');
76
+ const models = new Models();
77
+ models.register('customers', CustomersModel);
78
+ models.register('history', HistoryModel);
79
+ models.register('structures', StructureModel);
80
+ await Promise.all(models.injectDatabaseConnection(client, undefined, true));
81
+ // studio-api injects the configured Ajv instance at startup; mirror that here for structure validation.
82
+ StructureService.injectAjv(models.ajv);
83
+ const collection = CustomersModel.db;
84
+ // mongo-mock returns the old driver result wrapper; production MongoDB returns the document.
85
+ jest.spyOn(collection, 'findOneAndUpdate').mockImplementation((async (filter, update) => {
86
+ await collection.updateOne(filter, update);
87
+ return collection.findOne(filter);
88
+ }));
89
+ });
90
+ beforeEach(async () => {
91
+ // mongo-mock's deleteMany compares cloned ObjectIds by identity and leaves documents behind.
92
+ for (const collection of [CustomersModel.db, HistoryModel.db, StructureModel.db]) {
93
+ while (await collection.countDocuments({}))
94
+ await collection.deleteOne({});
95
+ }
96
+ await CustomersModel.db.insertOne({ ...structuredClone(customer), _id: customerId });
97
+ for (const structure of structures) {
98
+ await StructureModel.db.insertOne({ ...structure });
99
+ }
100
+ });
101
+ afterAll(async () => {
102
+ jest.restoreAllMocks();
103
+ await client.close();
104
+ });
105
+ it('replaces the member editable fields and records the authenticated member and origin', async () => {
106
+ const profile = await CustomersService.updateMe({ street: 'New Street', phone: '0987654321' }, options);
107
+ const saved = await CustomersModel.db.findOne({ _id: customerId });
108
+ const history = await HistoryModel.db.findOne({ 'history.parent': customerId });
109
+ expect(saved).toMatchObject({
110
+ street: 'New Street',
111
+ phone: '0987654321',
112
+ email: customer.email,
113
+ emailConfirmed: true,
114
+ note: customer.note,
115
+ tags: customer.tags,
116
+ accounts: customer.accounts,
117
+ history: { version: 1, source: 'public-app' },
118
+ });
119
+ // editable fields omitted from the PUT are removed
120
+ for (const removed of ['prename', 'name', 'addressAddition', 'streetNumber', 'zipcode', 'city', 'country', 'osm_id']) {
121
+ expect(saved).not.toHaveProperty(removed);
122
+ }
123
+ expect(saved?.history).not.toHaveProperty('origin');
124
+ expect(history).toMatchObject({
125
+ street: 'New Street',
126
+ phone: '0987654321',
127
+ history: {
128
+ origin: 'member',
129
+ user: options.user,
130
+ app: options.app,
131
+ reason: 'change',
132
+ model: 'customers',
133
+ version: 1,
134
+ source: 'public-app',
135
+ },
136
+ });
137
+ expect(history?.history.date).toBeInstanceOf(Date);
138
+ expect(profile).toMatchObject({ street: 'New Street', phone: '0987654321', email: customer.email });
139
+ expect(profile).not.toHaveProperty('emailConfirmationCode');
140
+ expect(profile).not.toHaveProperty('accounts');
141
+ expect(profile).not.toHaveProperty('note');
142
+ });
143
+ it('removes submitted empty and omitted editable fields', async () => {
144
+ await CustomersService.updateMe({ phone: '', addressAddition: '' }, options);
145
+ const saved = await CustomersModel.db.findOne({ _id: customerId });
146
+ expect(saved).toMatchObject({
147
+ email: customer.email,
148
+ note: customer.note,
149
+ tags: customer.tags,
150
+ });
151
+ for (const removed of ['phone', 'addressAddition', 'street', 'streetNumber', 'zipcode', 'city', 'country', 'prename', 'name']) {
152
+ expect(saved).not.toHaveProperty(removed);
153
+ }
154
+ });
155
+ it.each([
156
+ { email: 'different@example.org' },
157
+ { emailConfirmed: false },
158
+ { emailConfirmationCode: 'forged' },
159
+ { company: 'other-company' },
160
+ { accounts: [] },
161
+ { note: 'forged' },
162
+ { tags: [] },
163
+ { type: 'company' },
164
+ { id: 'other-customer' },
165
+ { _id: new ObjectId() },
166
+ { origin: 'member' },
167
+ { history: { origin: 'member' } },
168
+ ])('rejects administrative fields: %j', async (data) => {
169
+ await expect(CustomersService.updateMe({ phone: '123', ...data }, options)).rejects.toThrow('VALIDATION_FAILED');
170
+ expect(await HistoryModel.db.countDocuments({})).toBe(0);
171
+ expect(await CustomersModel.db.findOne({ _id: customerId })).toMatchObject({ phone: customer.phone });
172
+ });
173
+ it.each([
174
+ {},
175
+ { name: '' },
176
+ { name: null },
177
+ { prename: 123 },
178
+ { city: 'x'.repeat(21) },
179
+ { phone: 'x'.repeat(51) },
180
+ { country: 'Germany' },
181
+ { osm_id: 'invalid' },
182
+ null,
183
+ [],
184
+ ])('rejects invalid profile input: %j', async (data) => {
185
+ await expect(CustomersService.updateMe(data, options)).rejects.toThrow('VALIDATION_FAILED');
186
+ expect(await HistoryModel.db.countDocuments({})).toBe(0);
187
+ });
188
+ it.each([
189
+ { user: 'different-member' },
190
+ { company: 'different-company' },
191
+ { app: 'different-app' },
192
+ { project: 'different-project' },
193
+ ])('rejects edits outside the account and tenant scope: %j', async (scope) => {
194
+ await expect(CustomersService.updateMe({ name: 'Changed' }, { ...options, ...scope })).rejects.toThrow('DOCUMENT_FOR_UPDATE_MISSING');
195
+ expect(await HistoryModel.db.countDocuments({})).toBe(0);
196
+ expect(await CustomersModel.db.findOne({ _id: customerId })).toMatchObject({ name: customer.name });
197
+ });
198
+ it('uses a single account link for both updates and profile reads', async () => {
199
+ // mongo-mock's sift incorrectly allows $elemMatch conditions to match different elements.
200
+ const update = jest.spyOn(CustomersModel.db, 'updateOne').mockResolvedValueOnce({
201
+ acknowledged: true, matchedCount: 0, modifiedCount: 0, upsertedCount: 0, upsertedId: null,
202
+ });
203
+ const filter = expect.objectContaining({
204
+ company: options.company,
205
+ accounts: { $elemMatch: { account: options.user, app: options.app, project: options.project } },
206
+ });
207
+ await expect(CustomersService.updateMe({ name: 'Changed' }, options)).rejects.toThrow('DOCUMENT_FOR_UPDATE_MISSING');
208
+ expect(update).toHaveBeenLastCalledWith(filter, expect.anything());
209
+ const read = jest.spyOn(CustomersModel.db, 'findOne').mockResolvedValueOnce(null);
210
+ expect(await CustomersService.getMe(options.user, options.company, options)).toBeNull();
211
+ expect(read).toHaveBeenLastCalledWith(filter, expect.anything());
212
+ expect(await HistoryModel.db.countDocuments({})).toBe(0);
213
+ });
214
+ it('requires a verified email before allowing a member edit', async () => {
215
+ await CustomersModel.db.updateOne({ _id: customerId }, { $set: { emailConfirmed: false } });
216
+ await expect(CustomersService.updateMe({ name: 'Changed' }, options)).rejects.toThrow('DOCUMENT_FOR_UPDATE_MISSING');
217
+ expect(await HistoryModel.db.countDocuments({})).toBe(0);
218
+ });
219
+ it('does not create history when the database reports no change', async () => {
220
+ jest.spyOn(CustomersModel.db, 'updateOne').mockResolvedValueOnce({
221
+ acknowledged: true, matchedCount: 1, modifiedCount: 0, upsertedCount: 0, upsertedId: null,
222
+ });
223
+ await CustomersService.updateMe({ name: customer.name }, options);
224
+ expect(await HistoryModel.db.countDocuments({})).toBe(0);
225
+ });
226
+ it('omits origin on a normal edit following a member edit', async () => {
227
+ await CustomersService.updateMe({ name: 'Member' }, options);
228
+ await CustomersService.updateWithType(customerId, {
229
+ type: 'person', company: options.company, name: 'Administrator', email: customer.email,
230
+ }, { ...options, user: 'studio-account', app: 'editor-app' });
231
+ const entries = await HistoryModel.db.find({}).sort({ 'history.version': 1 }).toArray();
232
+ expect(entries).toHaveLength(2);
233
+ expect(entries[0].history).toMatchObject({ origin: 'member', user: options.user });
234
+ expect(entries[1].history).toMatchObject({ user: 'studio-account', version: 2 });
235
+ expect(entries[1].history).not.toHaveProperty('origin');
236
+ });
237
+ it('does not inherit origin from a supplied history snapshot', async () => {
238
+ await CustomersService.updateMe({ name: 'Member' }, options);
239
+ const previous = await HistoryModel.db.findOne({});
240
+ if (!previous)
241
+ throw new Error('HISTORY_MISSING');
242
+ await HistoryService.create(previous, 'studio-account', 'change', 'editor-app', 'customers');
243
+ const entry = await HistoryModel.db.findOne({ 'history.user': 'studio-account' });
244
+ expect(entry?.history).not.toHaveProperty('origin');
245
+ });
246
+ it('persists a company structure value and returns it from getMe', async () => {
247
+ const profile = await CustomersService.updateMe({ 's-string-1': 'blue' }, options);
248
+ const saved = await CustomersModel.db.findOne({ _id: customerId });
249
+ expect(saved).toMatchObject({ 's-string-1': 'blue' });
250
+ expect(profile).toMatchObject({ 's-string-1': 'blue' });
251
+ expect(profile).not.toHaveProperty('note');
252
+ });
253
+ it('rejects structure keys that are not part of the company structures', async () => {
254
+ await expect(CustomersService.updateMe({ 's-unknown-1': 'x' }, options)).rejects.toThrow('VALIDATION_FAILED');
255
+ expect(await HistoryModel.db.countDocuments({})).toBe(0);
256
+ expect(await CustomersModel.db.findOne({ _id: customerId })).toMatchObject({ name: customer.name });
257
+ });
258
+ it('rejects structure values that violate their validated type', async () => {
259
+ await expect(CustomersService.updateMe({ 's-select-1': 'z' }, options)).rejects.toThrow('VALIDATION_FAILED');
260
+ await expect(CustomersService.updateMe({ 's-string-1': 'x'.repeat(21) }, options)).rejects.toThrow('VALIDATION_FAILED');
261
+ expect(await HistoryModel.db.countDocuments({})).toBe(0);
262
+ });
263
+ it('removes a previously set structure when it is omitted', async () => {
264
+ await CustomersService.updateMe({ 's-string-1': 'blue' }, options);
265
+ expect(await CustomersModel.db.findOne({ _id: customerId })).toMatchObject({ 's-string-1': 'blue' });
266
+ await CustomersService.updateMe({ name: 'Anna' }, options);
267
+ expect(await CustomersModel.db.findOne({ _id: customerId })).not.toHaveProperty('s-string-1');
268
+ });
269
+ it('does not store falsy structure values', async () => {
270
+ await CustomersService.updateMe({ 's-bool-1': false, 's-number-1': 0 }, options);
271
+ const saved = await CustomersModel.db.findOne({ _id: customerId });
272
+ expect(saved).not.toHaveProperty('s-bool-1');
273
+ expect(saved).not.toHaveProperty('s-number-1');
274
+ });
275
+ });
276
+ //# sourceMappingURL=customersServiceUpdateMe.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customersServiceUpdateMe.spec.js","sourceRoot":"","sources":["../../tests/customersServiceUpdateMe.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};