mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-12-04 21:01:06 -05:00
80 lines
2.1 KiB
CoffeeScript
80 lines
2.1 KiB
CoffeeScript
nock = require('nock')
|
|
nockBack = nock.back
|
|
nockBack.fixtures = 'spec/fixtures/'
|
|
Promise = require 'bluebird'
|
|
|
|
module.exports.setupNock = (fixtureFilename, options, done) ->
|
|
if _.isFunction(options)
|
|
done = options
|
|
options = {}
|
|
|
|
keep = {
|
|
has_more: true
|
|
email: true
|
|
subscription: true
|
|
description: true
|
|
current_period_end: true
|
|
current_period_start: true
|
|
cancel_at_period_end: true
|
|
productID: true
|
|
amount: true
|
|
customer: true
|
|
gems: true
|
|
id: true
|
|
product_id: true
|
|
proration: true
|
|
paid: true
|
|
quantity: true
|
|
timestamp: true
|
|
total: true
|
|
transaction_id: true
|
|
type: true
|
|
months: true
|
|
}
|
|
|
|
if options.keep
|
|
_.extend(keep, options.keep)
|
|
|
|
afterRecord = (scopes) ->
|
|
scopes = _.filter scopes, (scope) -> not _.contains(scope.scope, '//localhost:')
|
|
for scope in scopes
|
|
delete scope['body']
|
|
delete scope['headers']
|
|
clean(scope.response)
|
|
return scopes
|
|
|
|
clean = (obj) ->
|
|
for key, value of obj
|
|
unless keep[key] or _.isArray(value) or _.isObject(value)
|
|
delete obj[key]
|
|
if _.isNull(value)
|
|
delete obj[key]
|
|
if _.isArray(value)
|
|
for child in value
|
|
clean(child)
|
|
if _.isEmpty(value)
|
|
delete obj[key]
|
|
if _.isObject(value)
|
|
clean(value)
|
|
if _.isEmpty(value)
|
|
delete obj[key]
|
|
|
|
nockBack.setMode('record')
|
|
nockBack fixtureFilename, {afterRecord: afterRecord, before: before}, (nockDone) ->
|
|
nock.enableNetConnect('localhost')
|
|
done(null, nockDone)
|
|
|
|
module.exports.teardownNock = ->
|
|
nockBack.setMode('wild')
|
|
nock.cleanAll()
|
|
|
|
# payment.spec.coffee needs this, because each test creates new Users with new _ids which
|
|
# are sent to Stripe as metadata. This messes up the tests which expect inputs to be
|
|
# uniform. This scope-preprocessor makes nock ignore body for matching requests.
|
|
# Ideally we would not do this; perhaps a better system would be to figure out a way
|
|
# to create users with consistent _id values.
|
|
|
|
before = (scope) ->
|
|
scope.body = (body) -> true
|
|
|
|
Promise.promisifyAll(module.exports)
|