@adobe/spacecat-shared-tier-client 1.1.2 → 1.2.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 +7 -0
- package/package.json +1 -1
- package/src/tier-client.js +13 -1
- package/test/tier-client.test.js +60 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
# [@adobe/spacecat-shared-tier-client-v1.2.0](https://github.com/adobe/spacecat-shared/compare/@adobe/spacecat-shared-tier-client-v1.1.2...@adobe/spacecat-shared-tier-client-v1.2.0) (2025-10-08)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* revoke enrollment API ([#1009](https://github.com/adobe/spacecat-shared/issues/1009)) ([7617368](https://github.com/adobe/spacecat-shared/commit/7617368082375e37ee1f23a097e7f4cf6b29edd7))
|
|
7
|
+
|
|
1
8
|
# [@adobe/spacecat-shared-tier-client-v1.1.2](https://github.com/adobe/spacecat-shared/compare/@adobe/spacecat-shared-tier-client-v1.1.1...@adobe/spacecat-shared-tier-client-v1.1.2) (2025-09-24)
|
|
2
9
|
|
|
3
10
|
|
package/package.json
CHANGED
package/src/tier-client.js
CHANGED
|
@@ -16,7 +16,6 @@ import {
|
|
|
16
16
|
Entitlement as EntitlementModel,
|
|
17
17
|
Organization,
|
|
18
18
|
} from '@adobe/spacecat-shared-data-access';
|
|
19
|
-
|
|
20
19
|
/**
|
|
21
20
|
* TierClient provides methods to manage entitlements and site enrollments.
|
|
22
21
|
*/
|
|
@@ -208,6 +207,19 @@ class TierClient {
|
|
|
208
207
|
throw error;
|
|
209
208
|
}
|
|
210
209
|
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Revokes site enrollment for the current site.
|
|
213
|
+
* @returns {Promise<object>} HTTP response object.
|
|
214
|
+
*/
|
|
215
|
+
async revokeSiteEnrollment() {
|
|
216
|
+
const existing = await this.checkValidEntitlement();
|
|
217
|
+
if (existing.siteEnrollment) {
|
|
218
|
+
await existing.siteEnrollment.remove();
|
|
219
|
+
} else {
|
|
220
|
+
throw new Error('Site enrollment not found');
|
|
221
|
+
}
|
|
222
|
+
}
|
|
211
223
|
}
|
|
212
224
|
|
|
213
225
|
export default TierClient;
|
package/test/tier-client.test.js
CHANGED
|
@@ -483,4 +483,64 @@ describe('TierClient', () => {
|
|
|
483
483
|
expect(result).to.deep.equal({ entitlement: mockEntitlement });
|
|
484
484
|
});
|
|
485
485
|
});
|
|
486
|
+
|
|
487
|
+
describe('revokeSiteEnrollment', () => {
|
|
488
|
+
it('should successfully revoke site enrollment when it exists', async () => {
|
|
489
|
+
const mockSiteEnrollmentWithRemove = {
|
|
490
|
+
...mockSiteEnrollment,
|
|
491
|
+
remove: sandbox.stub().resolves(),
|
|
492
|
+
};
|
|
493
|
+
|
|
494
|
+
mockDataAccess.Entitlement.findByOrganizationIdAndProductCode.resolves(mockEntitlement);
|
|
495
|
+
mockDataAccess.SiteEnrollment.allBySiteId.resolves([mockSiteEnrollmentWithRemove]);
|
|
496
|
+
|
|
497
|
+
await tierClient.revokeSiteEnrollment();
|
|
498
|
+
|
|
499
|
+
expect(mockSiteEnrollmentWithRemove.remove.calledOnce).to.be.true;
|
|
500
|
+
});
|
|
501
|
+
|
|
502
|
+
it('should throw error when site enrollment does not exist', async () => {
|
|
503
|
+
mockDataAccess.Entitlement.findByOrganizationIdAndProductCode.resolves(mockEntitlement);
|
|
504
|
+
mockDataAccess.SiteEnrollment.allBySiteId.resolves([]);
|
|
505
|
+
|
|
506
|
+
await expect(tierClient.revokeSiteEnrollment()).to.be.rejectedWith('Site enrollment not found');
|
|
507
|
+
});
|
|
508
|
+
|
|
509
|
+
it('should throw error when entitlement does not exist', async () => {
|
|
510
|
+
mockDataAccess.Entitlement.findByOrganizationIdAndProductCode.resolves(null);
|
|
511
|
+
|
|
512
|
+
await expect(tierClient.revokeSiteEnrollment()).to.be.rejectedWith('Site enrollment not found');
|
|
513
|
+
});
|
|
514
|
+
|
|
515
|
+
it('should handle database errors during revocation', async () => {
|
|
516
|
+
const mockSiteEnrollmentWithRemove = {
|
|
517
|
+
...mockSiteEnrollment,
|
|
518
|
+
remove: sandbox.stub().rejects(new Error('Database error')),
|
|
519
|
+
};
|
|
520
|
+
|
|
521
|
+
mockDataAccess.Entitlement.findByOrganizationIdAndProductCode.resolves(mockEntitlement);
|
|
522
|
+
mockDataAccess.SiteEnrollment.allBySiteId.resolves([mockSiteEnrollmentWithRemove]);
|
|
523
|
+
|
|
524
|
+
await expect(tierClient.revokeSiteEnrollment()).to.be.rejectedWith('Database error');
|
|
525
|
+
});
|
|
526
|
+
|
|
527
|
+
it('should handle errors when checking valid entitlement', async () => {
|
|
528
|
+
mockDataAccess.Entitlement.findByOrganizationIdAndProductCode.rejects(new Error('Database error'));
|
|
529
|
+
|
|
530
|
+
await expect(tierClient.revokeSiteEnrollment()).to.be.rejectedWith('Database error');
|
|
531
|
+
});
|
|
532
|
+
|
|
533
|
+
it('should throw error with organization-only client (no site)', async () => {
|
|
534
|
+
const orgOnlyClient = new TierClient(
|
|
535
|
+
mockContext,
|
|
536
|
+
organizationInstance,
|
|
537
|
+
null,
|
|
538
|
+
productCode,
|
|
539
|
+
);
|
|
540
|
+
|
|
541
|
+
mockDataAccess.Entitlement.findByOrganizationIdAndProductCode.resolves(mockEntitlement);
|
|
542
|
+
|
|
543
|
+
await expect(orgOnlyClient.revokeSiteEnrollment()).to.be.rejectedWith('Site enrollment not found');
|
|
544
|
+
});
|
|
545
|
+
});
|
|
486
546
|
});
|