Compare commits

...

4 Commits

Author SHA1 Message Date
SabreCat
4295b55339 4.222.2 2022-02-22 12:18:20 -06:00
SabreCat
08352c5f49 fix(subs): correct cancellation check logic and test 2022-02-22 11:26:15 -06:00
SabreCat
7080715bcc fix(tests): renewig typos 2022-02-22 10:13:32 -06:00
Phillip Thelen
c6d07983b2 Fix issue with validating android sub cancellation 2022-02-22 10:12:10 -06:00
4 changed files with 25 additions and 4 deletions

2
package-lock.json generated
View File

@@ -1,6 +1,6 @@
{ {
"name": "habitica", "name": "habitica",
"version": "4.222.1", "version": "4.222.2",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {

View File

@@ -1,7 +1,7 @@
{ {
"name": "habitica", "name": "habitica",
"description": "A habit tracker app which treats your goals like a Role Playing Game.", "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", "main": "./website/server/index.js",
"dependencies": { "dependencies": {
"@babel/core": "^7.16.12", "@babel/core": "^7.16.12",

View File

@@ -256,7 +256,7 @@ describe('Google Payments', () => {
expirationDate, expirationDate,
}); });
iapGetPurchaseDataStub = sinon.stub(iap, 'getPurchaseData') iapGetPurchaseDataStub = sinon.stub(iap, 'getPurchaseData')
.returns([{ expirationDate: expirationDate.toDate() }]); .returns([{ expirationDate: expirationDate.toDate(), autoRenewing: false }]);
iapIsValidatedStub = sinon.stub(iap, 'isValidated') iapIsValidatedStub = sinon.stub(iap, 'isValidated')
.returns(true); .returns(true);
@@ -325,5 +325,26 @@ describe('Google Payments', () => {
headers, 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;
});
}); });
}); });

View File

@@ -246,7 +246,7 @@ api.cancelSubscribe = async function cancelSubscribe (user, headers) {
if (purchases.length === 0) throw new NotAuthorized(this.constants.RESPONSE_INVALID_RECEIPT); if (purchases.length === 0) throw new NotAuthorized(this.constants.RESPONSE_INVALID_RECEIPT);
const subscriptionData = purchases[0]; const subscriptionData = purchases[0];
// Check to make sure the sub isn't active anymore. // 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)); dateTerminated = new Date(Number(subscriptionData.expirationDate));
} catch (err) { } catch (err) {