Skip to content

Commit

Permalink
Added android tests for iap
Browse files Browse the repository at this point in the history
  • Loading branch information
crookedneighbor committed Jun 14, 2015
1 parent 1ea7193 commit bb2f97e
Show file tree
Hide file tree
Showing 2 changed files with 116 additions and 8 deletions.
121 changes: 115 additions & 6 deletions test/api/inAppPurchases.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,124 @@ iapMock = { }
inApp.__set__('iap', iapMock)

describe 'In-App Purchases', ->
describe 'Android', ->
req = {
body: {
transaction: {
reciept: 'foo'
signature: 'sig'
}
}
}
res = {
locals: { user: { _id: 'user' } }
json: sinon.spy()
}
next = -> true
paymentSpy = sinon.spy()

before ->
inApp.__set__('payments.buyGems', paymentSpy)

afterEach ->
paymentSpy.reset()
res.json.reset()

context 'successful app purchase', ->
before ->
iapMock.setup = (cb)-> return cb(null)
iapMock.validate = (iapGoogle, iapBodyReciept, cb)-> return cb(null, true)
iapMock.isValidated = (googleRes)-> return googleRes
iapMock.GOOGLE = 'google'

it 'calls res.json with succesful result object', ->
expectedResObj = {
ok: true
data: true
}

inApp.androidVerify(req, res, next)

expect(res.json).to.be.calledOnce
expect(res.json).to.be.calledWith(expectedResObj)

it 'calls payments.buyGems function', ->
inApp.androidVerify(req, res, next)

expect(paymentSpy).to.be.calledOnce
expect(paymentSpy).to.be.calledWith({user: res.locals.user, paymentMethod:'IAP GooglePlay'})

context 'error in setup', ->
before ->
iapMock.setup = (cb)-> return cb("error in setup")

it 'calls res.json with setup error object', ->
expectedResObj = {
ok: false
data: 'IAP Error'
}

inApp.androidVerify(req, res, next)

expect(res.json).to.be.calledOnce
expect(res.json).to.be.calledWith(expectedResObj)

it 'does not calls payments.buyGems function', ->
inApp.androidVerify(req, res, next)

expect(paymentSpy).to.not.be.called

context 'error in validation', ->
before ->
iapMock.setup = (cb)-> return cb(null)
iapMock.validate = (iapGoogle, iapBodyReciept, cb)-> return cb('error in validation', true)

it 'calls res.json with validation error object', ->
expectedResObj = {
ok: false
data: {
code: 6778001
message: 'error in validation'
}
}

inApp.androidVerify(req, res, next)

expect(res.json).to.be.calledOnce
expect(res.json).to.be.calledWith(expectedResObj)

it 'does not calls payments.buyGems function', ->
inApp.androidVerify(req, res, next)

expect(paymentSpy).to.not.be.called

context 'iap is not valid', ->
before ->
iapMock.setup = (cb)-> return cb(null)
iapMock.validate = (iapGoogle, iapBodyReciept, cb)-> return cb(null, false)
iapMock.isValidated = (googleRes)-> return googleRes

it 'does not call res.json', ->
inApp.androidVerify(req, res, next)

expect(res.json).to.not.be.called

it 'does not calls payments.buyGems function', ->
inApp.androidVerify(req, res, next)

expect(paymentSpy).to.not.be.called

describe 'iOS', ->
req = { body: { transaction: { reciept: 'foo' } } }
res = {
locals: { user: { _id: 'user' } }
res = {
locals: { user: { _id: 'user' } }
json: sinon.spy()
}
next = -> true
paymentSpy = sinon.spy()
inApp.__set__('payments.buyGems', paymentSpy)

before ->
inApp.__set__('payments.buyGems', paymentSpy)

afterEach ->
paymentSpy.reset()
Expand All @@ -27,7 +136,7 @@ describe 'In-App Purchases', ->
iapMock.setup = (cb)-> return cb(null)
iapMock.validate = (iapApple, iapBodyReciept, cb)-> return cb(null, true)
iapMock.isValidated = (appleRes)-> return appleRes
iapMock.getPurchaseData = (appleRes)->
iapMock.getPurchaseData = (appleRes)->
return [{ productId: 'com.habitrpg.ios.Habitica.20gems' }]
iapMock.APPLE = 'apple'

Expand Down Expand Up @@ -113,7 +222,7 @@ describe 'In-App Purchases', ->
iapMock.setup = (cb)-> return cb(null)
iapMock.validate = (iapApple, iapBodyReciept, cb)-> return cb(null, true)
iapMock.isValidated = (appleRes)-> return appleRes
iapMock.getPurchaseData = (appleRes)->
iapMock.getPurchaseData = (appleRes)->
return []
iapMock.APPLE = 'apple'

Expand Down Expand Up @@ -141,7 +250,7 @@ describe 'In-App Purchases', ->
iapMock.setup = (cb)-> return cb(null)
iapMock.validate = (iapApple, iapBodyReciept, cb)-> return cb(null, true)
iapMock.isValidated = (appleRes)-> return appleRes
iapMock.getPurchaseData = (appleRes)->
iapMock.getPurchaseData = (appleRes)->
return [{ productId: 'com.another.company' }]
iapMock.APPLE = 'apple'

Expand Down
3 changes: 1 addition & 2 deletions website/src/controllers/payments/iap.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,7 @@ exports.androidVerify = function(req, res, next) {

payments.buyGems({user:user, paymentMethod:'IAP GooglePlay'});

// yay good!
res.json(resObj);
return res.json(resObj);
}
});
});
Expand Down

0 comments on commit bb2f97e

Please sign in to comment.