diff --git a/packages/spacecat-shared-tier-client/src/tier-client.js b/packages/spacecat-shared-tier-client/src/tier-client.js index f4ce92113..c7d000225 100644 --- a/packages/spacecat-shared-tier-client/src/tier-client.js +++ b/packages/spacecat-shared-tier-client/src/tier-client.js @@ -148,8 +148,9 @@ class TierClient { if (existing.entitlement) { const currentTier = existing.entitlement.getTier(); - // If currentTier doesn't match with given tier and is not PAID, update it - if (currentTier !== tier && currentTier !== ENTITLEMENT_TIERS.PAID) { + // Only upgrade the tier when the customer is becoming PAID; otherwise keep as-is. + // Tiers: PRE_ONBOARD, PLG, FREE_TRIAL, PAID. + if (tier === ENTITLEMENT_TIERS.PAID && currentTier !== ENTITLEMENT_TIERS.PAID) { existing.entitlement.setTier(tier); await existing.entitlement.save(); } diff --git a/packages/spacecat-shared-tier-client/test/tier-client.test.js b/packages/spacecat-shared-tier-client/test/tier-client.test.js index 1b55d9844..516e9c151 100644 --- a/packages/spacecat-shared-tier-client/test/tier-client.test.js +++ b/packages/spacecat-shared-tier-client/test/tier-client.test.js @@ -486,7 +486,7 @@ describe('TierClient', () => { }); }); - it('should upgrade PLG entitlement to FREE_TRIAL (PLG is not PAID, so tier updates)', async () => { + it('should NOT change tier when upgrading PLG to FREE_TRIAL (only PAID upgrades are applied)', async () => { const mockPlgEntitlement = { ...mockEntitlement, getTier: () => 'PLG', @@ -500,8 +500,8 @@ describe('TierClient', () => { const result = await tierClient.createEntitlement('FREE_TRIAL'); - expect(mockPlgEntitlement.setTier).to.have.been.calledWith('FREE_TRIAL'); - expect(mockPlgEntitlement.save).to.have.been.called; + expect(mockPlgEntitlement.setTier).to.not.have.been.called; + expect(mockPlgEntitlement.save).to.not.have.been.called; expect(result).to.deep.equal({ entitlement: mockPlgEntitlement, siteEnrollment: mockSiteEnrollment, @@ -550,7 +550,7 @@ describe('TierClient', () => { }); }); - it('should upgrade PRE_ONBOARD entitlement to PLG (PRE_ONBOARD is not PAID, so tier updates)', async () => { + it('should NOT change tier when upgrading PRE_ONBOARD to PLG (only PAID upgrades are applied)', async () => { const mockPreOnboardEntitlement = { ...mockEntitlement, getTier: () => 'PRE_ONBOARD', @@ -564,8 +564,8 @@ describe('TierClient', () => { const result = await tierClient.createEntitlement('PLG'); - expect(mockPreOnboardEntitlement.setTier).to.have.been.calledWith('PLG'); - expect(mockPreOnboardEntitlement.save).to.have.been.called; + expect(mockPreOnboardEntitlement.setTier).to.not.have.been.called; + expect(mockPreOnboardEntitlement.save).to.not.have.been.called; expect(result).to.deep.equal({ entitlement: mockPreOnboardEntitlement, siteEnrollment: mockSiteEnrollment,