diff --git a/package-lock.json b/package-lock.json index fcc17953c1..54f010a62b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "habitica", - "version": "4.222.1", + "version": "4.222.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 738c8384d8..98dcaf51f2 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "habitica", "description": "A habit tracker app which treats your goals like a Role Playing Game.", - "version": "4.222.1", + "version": "4.222.2", "main": "./website/server/index.js", "dependencies": { "@babel/core": "^7.17.5", diff --git a/test/api/unit/libs/payments/google.test.js b/test/api/unit/libs/payments/google.test.js index 266abf04b3..3cf40b0a4e 100644 --- a/test/api/unit/libs/payments/google.test.js +++ b/test/api/unit/libs/payments/google.test.js @@ -256,7 +256,7 @@ describe('Google Payments', () => { expirationDate, }); iapGetPurchaseDataStub = sinon.stub(iap, 'getPurchaseData') - .returns([{ expirationDate: expirationDate.toDate() }]); + .returns([{ expirationDate: expirationDate.toDate(), autoRenewing: false }]); iapIsValidatedStub = sinon.stub(iap, 'isValidated') .returns(true); @@ -325,5 +325,26 @@ describe('Google Payments', () => { headers, }); }); + + it('should not cancel a user subscription with autorenew', async () => { + iap.getPurchaseData.restore(); + iapGetPurchaseDataStub = sinon.stub(iap, 'getPurchaseData') + .returns([{ autoRenewing: true }]); + await googlePayments.cancelSubscribe(user, headers); + + expect(iapSetupStub).to.be.calledOnce; + expect(iapValidateStub).to.be.calledOnce; + expect(iapValidateStub).to.be.calledWith(iap.GOOGLE, { + data: receipt, + signature, + }); + expect(iapIsValidatedStub).to.be.calledOnce; + expect(iapIsValidatedStub).to.be.calledWith({ + expirationDate, + }); + expect(iapGetPurchaseDataStub).to.be.calledOnce; + + expect(paymentCancelSubscriptionSpy).to.not.be.called; + }); }); }); diff --git a/website/server/libs/payments/google.js b/website/server/libs/payments/google.js index b6c734cf55..86f0967213 100644 --- a/website/server/libs/payments/google.js +++ b/website/server/libs/payments/google.js @@ -246,7 +246,7 @@ api.cancelSubscribe = async function cancelSubscribe (user, headers) { if (purchases.length === 0) throw new NotAuthorized(this.constants.RESPONSE_INVALID_RECEIPT); const subscriptionData = purchases[0]; // Check to make sure the sub isn't active anymore. - if (subscriptionData.autoRenews) return; + if (subscriptionData.autoRenewing !== false) return; dateTerminated = new Date(Number(subscriptionData.expirationDate)); } catch (err) {