Skip to content

Commit

Permalink
Add tests to verify. Fix error reporting in verify.
Browse files Browse the repository at this point in the history
  • Loading branch information
j3k0 committed Oct 29, 2014
1 parent 4c035c8 commit c4c1dac
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 8 deletions.
27 changes: 22 additions & 5 deletions src/js/product.js
Original file line number Diff line number Diff line change
Expand Up @@ -147,20 +147,20 @@ store.Product.prototype.verify = function() {
else {
store.log.debug("verify -> error: " + JSON.stringify(data));
var msg = (data && data.error && data.error.message ? data.error.message : '');
var err = new Error({
var err = new store.Error({
code: store.ERR_VERIFICATION_FAILED,
message: "Transaction verification failed: " + msg
});
if (data.code === store.PURCHASE_EXPIRED) {
err = new Error({
err = new store.Error({
code: store.ERR_PAYMENT_EXPIRED,
message: "Transaction expired: " + msg
});
}
store.error(err);
store.utils.callExternal('verify.error', errorCb, err);
store.utils.callExternal('verify.done', doneCb, that);
if (data.code === store.PURCHASE_EXPIRED) {
store.error(err);
store.utils.callExternal('verify.error', errorCb, err);
store.utils.callExternal('verify.done', doneCb, that);
that.trigger("expired");
that.set("state", store.VALID);
store.utils.callExternal('verify.expired', expiredCb, that);
Expand All @@ -171,12 +171,29 @@ store.Product.prototype.verify = function() {
delay(this, tryValidation, 1000 * nRetry * nRetry);
}
else {
store.log.debug("validation failed 5 times, stop retrying, trigger an error");
store.error(err);
store.utils.callExternal('verify.error', errorCb, err);
store.utils.callExternal('verify.done', doneCb, that);
that.trigger("unverified");
}
}
});
};

defer(this, function() {
if (that.state !== store.APPROVED) {
var err = new store.Error({
code: store.ERR_VERIFICATION_FAILED,
message: "Product isn't in the APPROVED state"
});
store.error(err);
store.utils.callExternal('verify.error', errorCb, err);
store.utils.callExternal('verify.done', doneCb, that);
return;
}
});

// For some reason, the appStoreReceipt isn't always immediately available.
delay(this, tryValidation, 1000);

Expand Down
2 changes: 1 addition & 1 deletion src/js/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ store.utils = {
/// ```
callExternal: function(name, callback) {
try {
store.log.debug("calling " + name);
var args = Array.prototype.slice.call(arguments, 2);
// store.log.debug("calling " + name + "(" + JSON.stringify(args2) + ")");
if (callback) callback.apply(this, args);
}
catch (e) {
Expand Down
57 changes: 55 additions & 2 deletions test/js/test-verify.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,22 +37,75 @@ describe('Verify', function() {
step1();
function step1() {
p.set('state', store.VALID);
p.verify();
var doneCalled = 0;
var errorCalled = 0;
p.verify().error(function(err) {
assert.equal(store.ERR_VERIFICATION_FAILED, err.code);
errorCalled ++;
}).done(function() {
doneCalled ++;
});
setTimeout(function() {
assert.equal(0, nCalls);
assert.equal(1, doneCalled, "done should be called");
assert.equal(1, errorCalled, "error should be called");
step2();
}, 1500);
}

function step2() {
p.set('state', store.APPROVED);
p.verify();
var successCalled = 0;
var doneCalled = 0;
p.verify().success(function() {
successCalled ++;
}).done(function() {
doneCalled ++;
});
setTimeout(function() {
assert.equal(1, nCalls);
assert.equal(1, successCalled, "success should be called");
assert.equal(1, doneCalled, "done should be called");
done();
}, 1500);
}
});

it('should retry 5 times when validator fails', function(done) {
var p = store.get("pf-consumable");
var nCalls = 0;
store.validator = function(product, callback) {
nCalls++;
callback(false, {});
};
p.set('state', store.APPROVED);
helper.setTimeoutFactor(4000);
step();

function step() {
var successCalled = 0;
var errorCalled = 0;
var doneCalled = 0;
p.verify().
success(function() {
successCalled ++;
}).
error(function(err) {
assert.equal(store.ERR_VERIFICATION_FAILED, err.code);
errorCalled ++;
}).
done(function() {
doneCalled ++;
});
setTimeout(function() {
assert.equal(5, nCalls);
assert.equal(0, successCalled, "success should be called");
assert.equal(1, errorCalled, "error should be called");
assert.equal(1, doneCalled, "done should be called");
done();
}, 200000);
}
});
});
});

0 comments on commit c4c1dac

Please sign in to comment.