codecombat/spec/server/functional/trial_request.spec.coffee

172 lines
6.7 KiB
CoffeeScript

require '../common'
describe 'Trial Requests', ->
URL = getURL('/db/trial.request')
ownURL = getURL('/db/trial.request/-/own')
createTrialRequest = (user, type, properties, done) ->
requestBody =
type: type
properties: properties
request.post {uri: URL, json: requestBody }, (err, res, body) ->
expect(err).toBeNull()
expect(res.statusCode).toBe(200)
expect(body.type).toEqual(type)
expect(body.properties).toEqual(properties)
expect(body.applicant).toEqual(user.id)
expect(body.status).toEqual('submitted')
TrialRequest.findById body._id, (err, doc) ->
expect(err).toBeNull()
expect(doc.get('type')).toEqual(type)
expect(doc.get('properties')).toEqual(properties)
expect(doc.get('applicant')).toEqual(user._id)
expect(doc.get('status')).toEqual('submitted')
done(doc)
it 'Clear database', (done) ->
clearModels [User, TrialRequest], (err) ->
throw err if err
done()
it 'Create trial request', (done) ->
loginNewUser (user) ->
properties =
email: user.get('email')
location: 'SF, CA'
age: '14-17'
numStudents: 14
heardAbout: 'magical interwebs'
createTrialRequest user, 'subscription', properties, (trialRequest) ->
done()
it 'Get trial requests, non-admin', (done) ->
loginNewUser (user) ->
properties =
email: user.get('email')
location: 'SF, CA'
age: '14-17'
numStudents: 14
heardAbout: 'magical interwebs'
createTrialRequest user, 'subscription', properties, (trialRequest) ->
request.get URL, (err, res, body) ->
expect(res.statusCode).toEqual(403)
done()
it 'Get trial requests, admin', (done) ->
loginNewUser (user) ->
properties =
email: user.get('email')
location: 'SF, CA'
age: '14-17'
numStudents: 14
heardAbout: 'magical interwebs'
createTrialRequest user, 'subscription', properties, (trialRequest) ->
loginNewUser (admin) ->
admin.set('permissions', ['admin'])
admin.save (err, user) ->
request.get URL, (err, res, body) ->
expect(res.statusCode).toEqual(200)
expect(body.length).toBeGreaterThan(0)
done()
it 'Get own trial requests', (done) ->
loginNewUser (user) ->
properties =
email: user.get('email')
location: 'SF, CA'
age: '14-17'
numStudents: 14
heardAbout: 'magical interwebs'
createTrialRequest user, 'subscription', properties, (trialRequest) ->
request.get ownURL, (err, res, body) ->
expect(res.statusCode).toEqual(200)
ownRequests = JSON.parse(body)
expect(ownRequests.length).toEqual(1)
expect(ownRequests[0]._id).toEqual(trialRequest.id)
done()
it 'Get non-owned trial request, non-admin', (done) ->
loginNewUser (user) ->
properties =
email: user.get('email')
location: 'SF, CA'
age: '14-17'
numStudents: 14
heardAbout: 'magical interwebs'
createTrialRequest user, 'subscription', properties, (trialRequest) ->
loginNewUser (user2) ->
request.get URL + "/#{trialRequest.id}", (err, res, body) ->
expect(res.statusCode).toEqual(403)
done()
it 'Approve trial request', (done) ->
loginNewUser (user) ->
properties =
email: user.get('email')
location: 'SF, CA'
age: '14-17'
numStudents: 14
heardAbout: 'magical interwebs'
createTrialRequest user, 'subscription', properties, (trialRequest) ->
loginNewUser (admin) ->
admin.set('permissions', ['admin'])
admin.save (err, admin) ->
requestBody = trialRequest.toObject()
requestBody.status = 'approved'
request.put {uri: URL, json: requestBody }, (err, res, body) ->
expect(err).toBeNull()
expect(res.statusCode).toBe(200)
expect(body.status).toEqual('approved')
expect(body.reviewDate).toBeDefined()
expect(new Date(body.reviewDate)).toBeLessThan(new Date())
expect(body.reviewer).toEqual(admin.id)
TrialRequest.findById body._id, (err, doc) ->
expect(err).toBeNull()
expect(doc.get('status')).toEqual('approved')
expect(doc.get('reviewDate')).toBeDefined()
expect(new Date(doc.get('reviewDate'))).toBeLessThan(new Date())
expect(doc.get('reviewer')).toEqual(admin._id)
Prepaid.find {'properties.trialRequestID': doc.get('_id')}, (err, prepaids) ->
expect(err).toBeNull()
return done(err) if err
expect(prepaids.length).toEqual(1)
prepaid = prepaids[0]
expect(prepaid.get('type')).toEqual('course')
expect(prepaid.get('creator')).toEqual(user.get('_id'))
expect(prepaid.get('maxRedeemers')).toEqual(2)
User.findById user._id, (err, user) =>
expect(err).toBeNull()
return done(err) if err
expect(user.get('emails')?.teacherNews?.enabled).toEqual(true)
done()
it 'Deny trial request', (done) ->
loginNewUser (user) ->
properties =
email: user.get('email')
location: 'SF, CA'
age: '14-17'
numStudents: 14
heardAbout: 'magical interwebs'
createTrialRequest user, 'subscription', properties, (trialRequest) ->
loginNewUser (admin) ->
admin.set('permissions', ['admin'])
admin.save (err, user) ->
requestBody = trialRequest.toObject()
requestBody.status = 'denied'
request.put {uri: URL, json: requestBody }, (err, res, body) ->
expect(err).toBeNull()
expect(res.statusCode).toBe(200)
expect(body.status).toEqual('denied')
expect(body.reviewDate).toBeDefined()
expect(new Date(body.reviewDate)).toBeLessThan(new Date())
expect(body.reviewer).toEqual(admin.id)
expect(body.prepaidCode).not.toBeDefined()
TrialRequest.findById body._id, (err, doc) ->
expect(err).toBeNull()
expect(doc.get('status')).toEqual('denied')
expect(doc.get('reviewDate')).toBeDefined()
expect(new Date(doc.get('reviewDate'))).toBeLessThan(new Date())
expect(doc.get('reviewer')).toEqual(admin._id)
expect(doc.get('prepaidCode')).not.toBeDefined()
done()