@lilaquadrat/studio 11.4.2 → 11.5.2
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/lib/services.d.ts +2 -1
- package/lib/services.js +2 -1
- package/lib/services.js.map +1 -1
- package/lib/src/models/license.model.js +5 -25
- package/lib/src/models/license.model.js.map +1 -1
- package/lib/src/services/license.service.d.ts +11 -0
- package/lib/src/services/license.service.js +28 -0
- package/lib/src/services/license.service.js.map +1 -0
- package/lib/tests/licenseModel.spec.d.ts +1 -0
- package/lib/tests/licenseModel.spec.js +43 -0
- package/lib/tests/licenseModel.spec.js.map +1 -0
- package/lib/tests/licenseService.spec.d.ts +1 -0
- package/lib/tests/licenseService.spec.js +47 -0
- package/lib/tests/licenseService.spec.js.map +1 -0
- package/package.json +2 -2
package/lib/services.d.ts
CHANGED
|
@@ -38,4 +38,5 @@ import slaService from './src/services/sla.service.js';
|
|
|
38
38
|
import participantsService, { ParticipantsService } from './src/services/participants.service.js';
|
|
39
39
|
import memoryCache from './src/services/memory-cache.service.js';
|
|
40
40
|
import supportAccessService from './src/services/support-access.service.js';
|
|
41
|
-
|
|
41
|
+
import licenseService from './src/services/license.service.js';
|
|
42
|
+
export { editorService as EditorService, historyService as HistoryService, idService as IdService, publishService as PublishService, secretService as SecretService, publishMethodService as PublishMethodService, domainsService as DomainsService, confService as ConfService, hostingCommandsService as HostingCommandsService, hostingService as HostingService, hostingAdminService as HostingAdminService, customersService as CustomersService, listsService as ListsService, listParticipantsService as ListParticipantsService, spamAnalasysService as SpamAnalasysService, webhooksCallsService as WebhooksCallsService, paymentsService as PaymentsService, paymentProvidersService as PaymentProvidersService, permissionsService as PermissionsService, importService as ImportService, structuresService as StructuresService, meService, MeService, AccessService, PublishDataService, MailFromService, CartService, AiService, LoggingService, jetstreamService as JetStreamService, storageService as StorageService, uploadService as UploadService, authService as AuthService, invoicesService as InvoicesService, emailLimitService as EmailLimitService, designsService as DesignsService, supportService as SupportService, slaService as SlaService, participantsService, ParticipantsService, memoryCache as MemoryCache, supportAccessService as SupportAccessService, licenseService as LicenseService, };
|
package/lib/services.js
CHANGED
|
@@ -38,5 +38,6 @@ import slaService from './src/services/sla.service.js';
|
|
|
38
38
|
import participantsService, { ParticipantsService } from './src/services/participants.service.js';
|
|
39
39
|
import memoryCache from './src/services/memory-cache.service.js';
|
|
40
40
|
import supportAccessService from './src/services/support-access.service.js';
|
|
41
|
-
|
|
41
|
+
import licenseService from './src/services/license.service.js';
|
|
42
|
+
export { editorService as EditorService, historyService as HistoryService, idService as IdService, publishService as PublishService, secretService as SecretService, publishMethodService as PublishMethodService, domainsService as DomainsService, confService as ConfService, hostingCommandsService as HostingCommandsService, hostingService as HostingService, hostingAdminService as HostingAdminService, customersService as CustomersService, listsService as ListsService, listParticipantsService as ListParticipantsService, spamAnalasysService as SpamAnalasysService, webhooksCallsService as WebhooksCallsService, paymentsService as PaymentsService, paymentProvidersService as PaymentProvidersService, permissionsService as PermissionsService, importService as ImportService, structuresService as StructuresService, meService, MeService, AccessService, PublishDataService, MailFromService, CartService, AiService, LoggingService, jetstreamService as JetStreamService, storageService as StorageService, uploadService as UploadService, authService as AuthService, invoicesService as InvoicesService, emailLimitService as EmailLimitService, designsService as DesignsService, supportService as SupportService, slaService as SlaService, participantsService, ParticipantsService, memoryCache as MemoryCache, supportAccessService as SupportAccessService, licenseService as LicenseService, };
|
|
42
43
|
//# sourceMappingURL=services.js.map
|
package/lib/services.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.js","sourceRoot":"","sources":["../services.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAC/D,OAAO,SAAS,MAAM,8BAA8B,CAAC;AACrD,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAC/D,OAAO,oBAAoB,MAAM,yCAAyC,CAAC;AAC3E,OAAO,aAAa,MAAM,kCAAkC,CAAC;AAC7D,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAC/D,OAAO,WAAW,MAAM,gCAAgC,CAAC;AACzD,OAAO,sBAAsB,MAAM,2CAA2C,CAAC;AAC/E,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAC/D,OAAO,mBAAmB,MAAM,wCAAwC,CAAC;AACzE,OAAO,kBAAkB,MAAM,uCAAuC,CAAC;AACvE,OAAO,gBAAgB,MAAM,qCAAqC,CAAC;AACnE,OAAO,YAAY,MAAM,iCAAiC,CAAC;AAC3D,OAAO,uBAAuB,MAAM,4CAA4C,CAAC;AACjF,OAAO,mBAAmB,MAAM,wCAAwC,CAAC;AACzE,OAAO,aAAa,MAAM,kCAAkC,CAAC;AAC7D,OAAO,eAAe,MAAM,oCAAoC,CAAC;AACjE,OAAO,oBAAoB,MAAM,0CAA0C,CAAC;AAC5E,OAAO,eAAe,MAAM,oCAAoC,CAAC;AACjE,OAAO,uBAAuB,MAAM,4CAA4C,CAAC;AACjF,OAAO,kBAAkB,MAAM,uCAAuC,CAAC;AACvE,OAAO,SAAS,EAAE,EAAC,SAAS,EAAC,MAAM,8BAA8B,CAAC;AAClE,OAAO,aAAa,MAAM,kCAAkC,CAAC;AAC7D,OAAO,iBAAiB,MAAM,sCAAsC,CAAC;AACrE,OAAO,WAAW,MAAM,gCAAgC,CAAC;AACzD,OAAO,SAAS,MAAM,8BAA8B,CAAC;AACrD,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAC/D,OAAO,gBAAgB,MAAM,qCAAqC,CAAC;AACnE,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAC/D,OAAO,aAAa,MAAM,kCAAkC,CAAC;AAC7D,OAAO,aAAa,MAAM,kCAAkC,CAAC;AAC7D,OAAO,WAAW,MAAM,gCAAgC,CAAC;AACzD,OAAO,eAAe,MAAM,oCAAoC,CAAC;AACjE,OAAO,iBAAiB,MAAM,sCAAsC,CAAC;AACrE,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAC/D,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAC/D,OAAO,UAAU,MAAM,+BAA+B,CAAC;AACvD,OAAO,mBAAmB,EAAE,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAClG,OAAO,WAAW,MAAM,wCAAwC,CAAC;AACjE,OAAO,oBAAoB,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"services.js","sourceRoot":"","sources":["../services.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
import Modelv2 from '../classes/modelv2.class.js';
|
|
2
2
|
const model = new Modelv2('license', 'licenses');
|
|
3
|
-
model.
|
|
4
|
-
|
|
5
|
-
'oneTimeCost',
|
|
6
|
-
'supportSla',
|
|
7
|
-
'includedApps',
|
|
8
|
-
'limits',
|
|
9
|
-
];
|
|
3
|
+
model.immutable = ['id'];
|
|
4
|
+
model.removeWhenEmpty = ['description'];
|
|
10
5
|
model.addIndex({
|
|
11
6
|
key: {
|
|
12
7
|
id: 1,
|
|
@@ -26,7 +21,7 @@ model.setSchema({
|
|
|
26
21
|
cancellationPeriodDays: { type: 'number', minimum: 0 },
|
|
27
22
|
includesSupport: { type: 'boolean' },
|
|
28
23
|
supportSla: { type: 'string', maxLength: 100 },
|
|
29
|
-
|
|
24
|
+
available: { type: 'boolean' },
|
|
30
25
|
autoExtend: { type: 'boolean' },
|
|
31
26
|
includedApps: {
|
|
32
27
|
type: 'array',
|
|
@@ -45,25 +40,10 @@ model.setSchema({
|
|
|
45
40
|
model.setSchema({
|
|
46
41
|
type: 'object',
|
|
47
42
|
properties: {
|
|
48
|
-
name: { type: 'string', minLength: 3, maxLength: 50 },
|
|
49
43
|
description: { type: 'string', maxLength: 500 },
|
|
50
|
-
|
|
51
|
-
oneTimeCost: { type: 'number', minimum: 0 },
|
|
52
|
-
minimumContractMonths: { type: 'number', minimum: 0 },
|
|
53
|
-
cancellationPeriodDays: { type: 'number', minimum: 0 },
|
|
54
|
-
includesSupport: { type: 'boolean' },
|
|
55
|
-
supportSla: { type: 'string', maxLength: 100 },
|
|
56
|
-
active: { type: 'boolean' },
|
|
57
|
-
autoExtend: { type: 'boolean' },
|
|
58
|
-
includedApps: {
|
|
59
|
-
type: 'array',
|
|
60
|
-
contains: {
|
|
61
|
-
type: 'string',
|
|
62
|
-
},
|
|
63
|
-
},
|
|
64
|
-
limits: { type: 'object' },
|
|
44
|
+
available: { type: 'boolean' },
|
|
65
45
|
},
|
|
66
|
-
required: ['
|
|
46
|
+
required: ['available'],
|
|
67
47
|
additionalProperties: false,
|
|
68
48
|
}, 'change');
|
|
69
49
|
export default model;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"license.model.js","sourceRoot":"","sources":["../../../src/models/license.model.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,6BAA6B,CAAC;AAElD,MAAM,KAAK,GAAG,IAAI,OAAO,CAAU,SAAS,EAAE,UAAU,CAAC,CAAC;AAE1D,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"license.model.js","sourceRoot":"","sources":["../../../src/models/license.model.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,6BAA6B,CAAC;AAElD,MAAM,KAAK,GAAG,IAAI,OAAO,CAAU,SAAS,EAAE,UAAU,CAAC,CAAC;AAE1D,KAAK,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC;AACzB,KAAK,CAAC,eAAe,GAAG,CAAC,aAAa,CAAC,CAAC;AAExC,KAAK,CAAC,QAAQ,CACZ;IACE,GAAG,EAAE;QACH,EAAE,EAAE,CAAC;KACN;IACD,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,gBAAgB;CACvB,EACD,CAAC,CACF,CAAC;AAEF,KAAK,CAAC,SAAS,CACb;IACE,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,EAAE;QACtD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;QACrD,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE;QAC/C,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;QAC3C,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;QAC3C,qBAAqB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;QACrD,sBAAsB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;QACtD,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACpC,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE;QAC9C,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC9B,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC/B,YAAY,EAAE;YACZ,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;aACf;SACF;QACD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC3B;IACD,QAAQ,EAAE;QACR,IAAI;QACJ,MAAM;KACP;IACD,oBAAoB,EAAE,KAAK;CAC5B,EACD,QAAQ,CACT,CAAC;AAEF,KAAK,CAAC,SAAS,CACb;IACE,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE;QAC/C,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;KAC/B;IACD,QAAQ,EAAE,CAAC,WAAW,CAAC;IACvB,oBAAoB,EAAE,KAAK;CAC5B,EACD,QAAQ,CACT,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { License } from '@lilaquadrat/interfaces';
|
|
2
|
+
import Immutable from '../Immutable.class.js';
|
|
3
|
+
declare class LicenseService extends Immutable<License> {
|
|
4
|
+
model: import("../classes/modelv2.class.js").default<License, string>;
|
|
5
|
+
single(id: string): Promise<import("mongodb").WithId<License> | null>;
|
|
6
|
+
list(): Promise<import("mongodb").WithId<License>[]>;
|
|
7
|
+
change(id: string, data: Partial<License>, user: string, app: string): Promise<import("mongodb").UpdateResult<import("bson").Document>>;
|
|
8
|
+
remove(id: string, user: string, app: string): Promise<import("mongodb").DeleteResult>;
|
|
9
|
+
}
|
|
10
|
+
declare const _default: LicenseService;
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import Immutable from '../Immutable.class.js';
|
|
2
|
+
import LicenseModel from '../models/license.model.js';
|
|
3
|
+
class LicenseService extends Immutable {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(...arguments);
|
|
6
|
+
this.model = LicenseModel;
|
|
7
|
+
}
|
|
8
|
+
single(id) {
|
|
9
|
+
return this.model.db.findOne({ id }, { projection: { history: 0 } });
|
|
10
|
+
}
|
|
11
|
+
list() {
|
|
12
|
+
return this.model.db.find().sort({ name: 1 }).toArray();
|
|
13
|
+
}
|
|
14
|
+
async change(id, data, user, app) {
|
|
15
|
+
const license = await this.single(id);
|
|
16
|
+
if (!license?._id)
|
|
17
|
+
throw new Error('LICENSE_NOT_FOUND');
|
|
18
|
+
return this.immutable(license._id, data, user, 'change', app);
|
|
19
|
+
}
|
|
20
|
+
async remove(id, user, app) {
|
|
21
|
+
const license = await this.single(id);
|
|
22
|
+
if (!license?._id)
|
|
23
|
+
throw new Error('LICENSE_NOT_FOUND');
|
|
24
|
+
return this.delete(license._id, user, app);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export default new LicenseService();
|
|
28
|
+
//# sourceMappingURL=license.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license.service.js","sourceRoot":"","sources":["../../../src/services/license.service.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,YAAY,MAAM,4BAA4B,CAAC;AAEtD,MAAM,cAAe,SAAQ,SAAkB;IAA/C;;QAEE,UAAK,GAAG,YAAY,CAAC;IAgCvB,CAAC;IA9BC,MAAM,CAAC,EAAU;QAEf,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEvE,CAAC;IAED,IAAI;QAEF,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAE1D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,IAAsB,EAAE,IAAY,EAAE,GAAW;QAExE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,EAAE,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAExD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAEhE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,IAAY,EAAE,GAAW;QAEhD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,EAAE,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAExD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAE7C,CAAC;CAEF;AAED,eAAe,IAAI,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { describe, expect, it } from '@jest/globals';
|
|
2
|
+
import Models from '../src/classes/models.class';
|
|
3
|
+
import LicenseModel from '../src/models/license.model';
|
|
4
|
+
const models = new Models();
|
|
5
|
+
models.register('license', LicenseModel);
|
|
6
|
+
const validLicense = {
|
|
7
|
+
id: 'starter',
|
|
8
|
+
name: 'Starter',
|
|
9
|
+
};
|
|
10
|
+
describe('LicenseModel', () => {
|
|
11
|
+
it('accepts a license with only id and name', () => {
|
|
12
|
+
expect(LicenseModel.validate(validLicense, 'create')).toBe(true);
|
|
13
|
+
});
|
|
14
|
+
it('accepts availability on create', () => {
|
|
15
|
+
expect(LicenseModel.validate({ ...validLicense, available: true }, 'create')).toBe(true);
|
|
16
|
+
});
|
|
17
|
+
it('requires an id and name', () => {
|
|
18
|
+
expect(LicenseModel.validate({ name: 'Starter' }, 'create')).toBe(false);
|
|
19
|
+
expect(LicenseModel.validate({ id: 'starter' }, 'create')).toBe(false);
|
|
20
|
+
});
|
|
21
|
+
it('allows only availability and description to change', () => {
|
|
22
|
+
expect(LicenseModel.validate({ available: true, description: 'updated' }, 'change')).toBe(true);
|
|
23
|
+
});
|
|
24
|
+
it('requires availability on change', () => {
|
|
25
|
+
expect(LicenseModel.validate({ description: 'updated' }, 'change')).toBe(false);
|
|
26
|
+
});
|
|
27
|
+
it('rejects edits to immutable terms and the id', () => {
|
|
28
|
+
expect(LicenseModel.validate({ available: true, monthlyCost: 5 }, 'change')).toBe(false);
|
|
29
|
+
expect(LicenseModel.validate({ available: true, id: 'other' }, 'change')).toBe(false);
|
|
30
|
+
expect(LicenseModel.validate({ available: true, includedApps: ['editor'] }, 'change')).toBe(false);
|
|
31
|
+
});
|
|
32
|
+
it('marks the id as immutable', () => {
|
|
33
|
+
expect(LicenseModel.immutable).toContain('id');
|
|
34
|
+
});
|
|
35
|
+
it('defines a unique license id', () => {
|
|
36
|
+
expect(LicenseModel.indexes).toContainEqual(expect.objectContaining({
|
|
37
|
+
key: { id: 1 },
|
|
38
|
+
unique: true,
|
|
39
|
+
name: 'license_unique-v1',
|
|
40
|
+
}));
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=licenseModel.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"licenseModel.spec.js","sourceRoot":"","sources":["../../tests/licenseModel.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it, jest } from '@jest/globals';
|
|
2
|
+
import { ObjectId } from 'mongodb';
|
|
3
|
+
import LicenseModel from '../src/models/license.model';
|
|
4
|
+
import LicenseService from '../src/services/license.service';
|
|
5
|
+
describe('LicenseService', () => {
|
|
6
|
+
afterEach(() => {
|
|
7
|
+
jest.restoreAllMocks();
|
|
8
|
+
});
|
|
9
|
+
it('gets a license by its unique id', async () => {
|
|
10
|
+
const findOne = jest.fn().mockResolvedValue(null);
|
|
11
|
+
jest.spyOn(LicenseModel, 'db', 'get').mockReturnValue({ findOne });
|
|
12
|
+
await LicenseService.single('free');
|
|
13
|
+
expect(findOne).toHaveBeenCalledWith({ id: 'free' }, { projection: { history: 0 } });
|
|
14
|
+
});
|
|
15
|
+
it('lists licenses sorted by name', async () => {
|
|
16
|
+
const toArray = jest.fn().mockResolvedValue([]);
|
|
17
|
+
const sort = jest.fn().mockReturnValue({ toArray });
|
|
18
|
+
const find = jest.fn().mockReturnValue({ sort });
|
|
19
|
+
jest.spyOn(LicenseModel, 'db', 'get').mockReturnValue({ find });
|
|
20
|
+
await LicenseService.list();
|
|
21
|
+
expect(find).toHaveBeenCalledWith();
|
|
22
|
+
expect(sort).toHaveBeenCalledWith({ name: 1 });
|
|
23
|
+
expect(toArray).toHaveBeenCalledWith();
|
|
24
|
+
});
|
|
25
|
+
it('changes a license by its unique id', async () => {
|
|
26
|
+
const _id = new ObjectId();
|
|
27
|
+
const findOne = jest.fn().mockResolvedValue({ _id });
|
|
28
|
+
jest.spyOn(LicenseModel, 'db', 'get').mockReturnValue({ findOne });
|
|
29
|
+
const immutable = jest.spyOn(LicenseService, 'immutable').mockResolvedValue({});
|
|
30
|
+
await LicenseService.change('free', { available: true }, 'user', 'app');
|
|
31
|
+
expect(immutable).toHaveBeenCalledWith(_id, { available: true }, 'user', 'change', 'app');
|
|
32
|
+
});
|
|
33
|
+
it('rejects changing a missing license', async () => {
|
|
34
|
+
const findOne = jest.fn().mockResolvedValue(null);
|
|
35
|
+
jest.spyOn(LicenseModel, 'db', 'get').mockReturnValue({ findOne });
|
|
36
|
+
await expect(LicenseService.change('free', { available: true }, 'user', 'app')).rejects.toThrow('LICENSE_NOT_FOUND');
|
|
37
|
+
});
|
|
38
|
+
it('removes a license by its unique id', async () => {
|
|
39
|
+
const _id = new ObjectId();
|
|
40
|
+
const findOne = jest.fn().mockResolvedValue({ _id });
|
|
41
|
+
jest.spyOn(LicenseModel, 'db', 'get').mockReturnValue({ findOne });
|
|
42
|
+
const remove = jest.spyOn(LicenseService, 'delete').mockResolvedValue({ acknowledged: true, deletedCount: 1 });
|
|
43
|
+
await LicenseService.remove('free', 'user', 'app');
|
|
44
|
+
expect(remove).toHaveBeenCalledWith(_id, 'user', 'app');
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=licenseService.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"licenseService.spec.js","sourceRoot":"","sources":["../../tests/licenseService.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lilaquadrat/studio",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.5.2",
|
|
4
4
|
"description": "classes and tools for STUDIO",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
},
|
|
119
119
|
"dependencies": {
|
|
120
120
|
"@google/genai": "^1.42.0",
|
|
121
|
-
"@lilaquadrat/interfaces": "^1.
|
|
121
|
+
"@lilaquadrat/interfaces": "^1.51.1",
|
|
122
122
|
"@lilaquadrat/storage-sdk": "^0.1.15",
|
|
123
123
|
"@nats-io/jetstream": "^3.2.0",
|
|
124
124
|
"@nats-io/transport-node": "^3.2.0",
|