@adobe/spacecat-shared-tier-client 1.3.16 → 1.4.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.
- package/CHANGELOG.md +6 -0
- package/package.json +2 -2
- package/test/tier-client.test.js +80 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [@adobe/spacecat-shared-tier-client-v1.4.0](https://github.com/adobe/spacecat-shared/compare/@adobe/spacecat-shared-tier-client-v1.3.16...@adobe/spacecat-shared-tier-client-v1.4.0) (2026-04-01)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* add PLG tier to entitlement model and bump mysticat types ([#1487](https://github.com/adobe/spacecat-shared/issues/1487)) ([7f9c6fc](https://github.com/adobe/spacecat-shared/commit/7f9c6fcb6d3672269081176ebf643151fb512e99))
|
|
6
|
+
|
|
1
7
|
## [@adobe/spacecat-shared-tier-client-v1.3.16](https://github.com/adobe/spacecat-shared/compare/@adobe/spacecat-shared-tier-client-v1.3.15...@adobe/spacecat-shared-tier-client-v1.3.16) (2026-03-21)
|
|
2
8
|
|
|
3
9
|
### Bug Fixes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adobe/spacecat-shared-tier-client",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "Shared modules of the Spacecat Services - Tier Client",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@adobe/spacecat-shared-utils": "1.81.1",
|
|
39
|
-
"@mysticat/data-service-types": "git+https://github.com/adobe/mysticat-data-service.git#types-ts-v1.
|
|
39
|
+
"@mysticat/data-service-types": "git+https://github.com/adobe/mysticat-data-service.git#types-ts-v1.42.0"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"c8": "10.1.3",
|
package/test/tier-client.test.js
CHANGED
|
@@ -467,6 +467,70 @@ describe('TierClient', () => {
|
|
|
467
467
|
|
|
468
468
|
await expect(tierClient.createEntitlement('FREE_TRIAL')).to.be.rejectedWith('Database error');
|
|
469
469
|
});
|
|
470
|
+
|
|
471
|
+
it('should create entitlement with PLG tier when nothing exists', async () => {
|
|
472
|
+
const mockPlgEntitlement = { ...mockEntitlement, getTier: () => 'PLG' };
|
|
473
|
+
mockDataAccess.Entitlement.findByOrganizationIdAndProductCode.resolves(null);
|
|
474
|
+
mockDataAccess.Entitlement.create.resolves(mockPlgEntitlement);
|
|
475
|
+
mockDataAccess.SiteEnrollment.create.resolves(mockSiteEnrollment);
|
|
476
|
+
|
|
477
|
+
const result = await tierClient.createEntitlement('PLG');
|
|
478
|
+
|
|
479
|
+
expect(result).to.deep.equal({
|
|
480
|
+
entitlement: mockPlgEntitlement,
|
|
481
|
+
siteEnrollment: mockSiteEnrollment,
|
|
482
|
+
});
|
|
483
|
+
expect(mockDataAccess.Entitlement.create).to.have.been.calledWith({
|
|
484
|
+
organizationId: orgId,
|
|
485
|
+
productCode,
|
|
486
|
+
tier: 'PLG',
|
|
487
|
+
quotas: { llmo_trial_prompts: 200, llmo_trial_prompts_consumed: 0 },
|
|
488
|
+
});
|
|
489
|
+
});
|
|
490
|
+
|
|
491
|
+
it('should upgrade PLG entitlement to FREE_TRIAL (PLG is not PAID, so tier updates)', async () => {
|
|
492
|
+
const mockPlgEntitlement = {
|
|
493
|
+
...mockEntitlement,
|
|
494
|
+
getTier: () => 'PLG',
|
|
495
|
+
setTier: sandbox.stub().returnsThis(),
|
|
496
|
+
save: sandbox.stub().resolves(),
|
|
497
|
+
};
|
|
498
|
+
|
|
499
|
+
mockDataAccess.Entitlement
|
|
500
|
+
.findByOrganizationIdAndProductCode.resolves(mockPlgEntitlement);
|
|
501
|
+
mockDataAccess.SiteEnrollment.allBySiteId.resolves([mockSiteEnrollment]);
|
|
502
|
+
|
|
503
|
+
const result = await tierClient.createEntitlement('FREE_TRIAL');
|
|
504
|
+
|
|
505
|
+
expect(mockPlgEntitlement.setTier).to.have.been.calledWith('FREE_TRIAL');
|
|
506
|
+
expect(mockPlgEntitlement.save).to.have.been.called;
|
|
507
|
+
expect(result).to.deep.equal({
|
|
508
|
+
entitlement: mockPlgEntitlement,
|
|
509
|
+
siteEnrollment: mockSiteEnrollment,
|
|
510
|
+
});
|
|
511
|
+
});
|
|
512
|
+
|
|
513
|
+
it('should upgrade PLG entitlement to PAID (PLG is not PAID, so tier updates)', async () => {
|
|
514
|
+
const mockPlgEntitlement = {
|
|
515
|
+
...mockEntitlement,
|
|
516
|
+
getTier: () => 'PLG',
|
|
517
|
+
setTier: sandbox.stub().returnsThis(),
|
|
518
|
+
save: sandbox.stub().resolves(),
|
|
519
|
+
};
|
|
520
|
+
|
|
521
|
+
mockDataAccess.Entitlement
|
|
522
|
+
.findByOrganizationIdAndProductCode.resolves(mockPlgEntitlement);
|
|
523
|
+
mockDataAccess.SiteEnrollment.allBySiteId.resolves([mockSiteEnrollment]);
|
|
524
|
+
|
|
525
|
+
const result = await tierClient.createEntitlement('PAID');
|
|
526
|
+
|
|
527
|
+
expect(mockPlgEntitlement.setTier).to.have.been.calledWith('PAID');
|
|
528
|
+
expect(mockPlgEntitlement.save).to.have.been.called;
|
|
529
|
+
expect(result).to.deep.equal({
|
|
530
|
+
entitlement: mockPlgEntitlement,
|
|
531
|
+
siteEnrollment: mockSiteEnrollment,
|
|
532
|
+
});
|
|
533
|
+
});
|
|
470
534
|
});
|
|
471
535
|
|
|
472
536
|
describe('Edge Cases', () => {
|
|
@@ -603,6 +667,22 @@ describe('TierClient', () => {
|
|
|
603
667
|
expect(mockPaidEntitlement.remove).to.not.have.been.called;
|
|
604
668
|
});
|
|
605
669
|
|
|
670
|
+
it('should successfully revoke PLG-tier entitlement (PLG is not PAID, revoke is allowed)', async () => {
|
|
671
|
+
const mockPlgEntitlement = {
|
|
672
|
+
...mockEntitlement,
|
|
673
|
+
getTier: () => 'PLG',
|
|
674
|
+
remove: sandbox.stub().resolves(),
|
|
675
|
+
};
|
|
676
|
+
|
|
677
|
+
mockDataAccess.Entitlement
|
|
678
|
+
.findByOrganizationIdAndProductCode.resolves(mockPlgEntitlement);
|
|
679
|
+
mockDataAccess.SiteEnrollment.allBySiteId.resolves([]);
|
|
680
|
+
|
|
681
|
+
await tierClient.revokeEntitlement();
|
|
682
|
+
|
|
683
|
+
expect(mockPlgEntitlement.remove.calledOnce).to.be.true;
|
|
684
|
+
});
|
|
685
|
+
|
|
606
686
|
it('should throw error when entitlement does not exist', async () => {
|
|
607
687
|
mockDataAccess.Entitlement.findByOrganizationIdAndProductCode.resolves(null);
|
|
608
688
|
mockDataAccess.SiteEnrollment.allBySiteId.resolves([]);
|