mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-02-20 03:26:39 -05:00
Remove courses from purchasing course prepaids
This commit is contained in:
parent
6b5e13501e
commit
b7843b59c8
3 changed files with 24 additions and 71 deletions
|
@ -135,40 +135,30 @@ PrepaidHandler = class PrepaidHandler extends Handler
|
||||||
@sendSuccess(res, prepaid.toObject())
|
@sendSuccess(res, prepaid.toObject())
|
||||||
|
|
||||||
else if req.body.type is 'course'
|
else if req.body.type is 'course'
|
||||||
courseID = req.body.courseID
|
|
||||||
|
|
||||||
maxRedeemers = parseInt(req.body.maxRedeemers)
|
maxRedeemers = parseInt(req.body.maxRedeemers)
|
||||||
timestamp = req.body.stripe?.timestamp
|
timestamp = req.body.stripe?.timestamp
|
||||||
token = req.body.stripe?.token
|
token = req.body.stripe?.token
|
||||||
|
|
||||||
return @sendBadInputError(res) unless isNaN(maxRedeemers) is false and maxRedeemers > 0
|
return @sendBadInputError(res) unless isNaN(maxRedeemers) is false and maxRedeemers > 0
|
||||||
|
|
||||||
query = if courseID? then {_id: courseID} else {}
|
@purchasePrepaidCourse req.user, maxRedeemers, timestamp, token, (err, prepaid) =>
|
||||||
Course.find query, (err, courses) =>
|
# TODO: this badinput detection is fragile, in course instance handler as well
|
||||||
if err
|
return @sendBadInputError(res, err) if err is 'Missing required Stripe token'
|
||||||
@logError(user, "Find courses error: #{JSON.stringify(err)}")
|
return @sendDatabaseError(res, err) if err
|
||||||
return done(err)
|
@sendSuccess(res, prepaid.toObject())
|
||||||
|
|
||||||
@purchasePrepaidCourse req.user, courses, maxRedeemers, timestamp, token, (err, prepaid) =>
|
|
||||||
# TODO: this badinput detection is fragile, in course instance handler as well
|
|
||||||
return @sendBadInputError(res, err) if err is 'Missing required Stripe token'
|
|
||||||
return @sendDatabaseError(res, err) if err
|
|
||||||
@sendSuccess(res, prepaid.toObject())
|
|
||||||
else
|
else
|
||||||
@sendForbiddenError(res)
|
@sendForbiddenError(res)
|
||||||
|
|
||||||
purchasePrepaidCourse: (user, courses, maxRedeemers, timestamp, token, done) ->
|
purchasePrepaidCourse: (user, maxRedeemers, timestamp, token, done) ->
|
||||||
type = 'course'
|
type = 'course'
|
||||||
|
|
||||||
courseIDs = (c.get('_id') for c in courses)
|
amount = maxRedeemers * 200 # TODO: Actual price
|
||||||
coursePrices = (c.get('pricePerSeat') for c in courses)
|
|
||||||
amount = utils.getCourseBundlePrice(coursePrices, maxRedeemers)
|
|
||||||
if amount > 0 and not (token or user.isAdmin())
|
if amount > 0 and not (token or user.isAdmin())
|
||||||
@logError(user, "Purchase prepaid courses missing required Stripe token #{amount}")
|
@logError(user, "Purchase prepaid courses missing required Stripe token #{amount}")
|
||||||
return done('Missing required Stripe token')
|
return done('Missing required Stripe token')
|
||||||
|
|
||||||
if amount is 0 or user.isAdmin()
|
if amount is 0 or user.isAdmin()
|
||||||
@createPrepaid(user, type, maxRedeemers, courseIDs: courseIDs, done)
|
@createPrepaid(user, type, maxRedeemers, {}, done)
|
||||||
|
|
||||||
else
|
else
|
||||||
StripeUtils.getCustomer user, token, (err, customer) =>
|
StripeUtils.getCustomer user, token, (err, customer) =>
|
||||||
|
@ -180,10 +170,8 @@ PrepaidHandler = class PrepaidHandler extends Handler
|
||||||
type: type
|
type: type
|
||||||
userID: user.id
|
userID: user.id
|
||||||
timestamp: parseInt(timestamp)
|
timestamp: parseInt(timestamp)
|
||||||
description: if courses.length is 1 then courses[0].get('name') else 'All Courses'
|
|
||||||
maxRedeemers: maxRedeemers
|
maxRedeemers: maxRedeemers
|
||||||
productID: "prepaid #{type}"
|
productID: "prepaid #{type}"
|
||||||
courseIDs: courseIDs
|
|
||||||
|
|
||||||
StripeUtils.createCharge user, amount, metadata, (err, charge) =>
|
StripeUtils.createCharge user, amount, metadata, (err, charge) =>
|
||||||
if err
|
if err
|
||||||
|
@ -194,9 +182,9 @@ PrepaidHandler = class PrepaidHandler extends Handler
|
||||||
if err
|
if err
|
||||||
@logError(user, "createPayment error: #{JSON.stringify(err)}")
|
@logError(user, "createPayment error: #{JSON.stringify(err)}")
|
||||||
return done(err)
|
return done(err)
|
||||||
msg = "Prepaid code purchased: #{type} seats=#{maxRedeemers} courseIDs=#{courseIDs} #{user.get('email')}"
|
msg = "Prepaid code purchased: #{type} seats=#{maxRedeemers} #{user.get('email')}"
|
||||||
hipchat.sendHipChatMessage msg, ['tower']
|
hipchat.sendHipChatMessage msg, ['tower']
|
||||||
@createPrepaid(user, type, maxRedeemers, courseIDs: courseIDs, done)
|
@createPrepaid(user, type, maxRedeemers, {}, done)
|
||||||
|
|
||||||
purchasePrepaidTerminalSubscription: (user, description, maxRedeemers, months, timestamp, token, done) ->
|
purchasePrepaidTerminalSubscription: (user, description, maxRedeemers, months, timestamp, token, done) ->
|
||||||
type = 'terminal_subscription'
|
type = 'terminal_subscription'
|
||||||
|
|
|
@ -164,8 +164,6 @@ GLOBAL.purchasePrepaid = (type, properties, maxRedeemers, token, done) ->
|
||||||
options.json.stripe.token = token if token?
|
options.json.stripe.token = token if token?
|
||||||
if type is 'terminal_subscription'
|
if type is 'terminal_subscription'
|
||||||
options.json.months = properties.months
|
options.json.months = properties.months
|
||||||
else if type is 'course'
|
|
||||||
options.json.courseID = properties.courseID if properties?.courseID
|
|
||||||
request.post options, done
|
request.post options, done
|
||||||
|
|
||||||
GLOBAL.subscribeWithPrepaid = (ppc, done) =>
|
GLOBAL.subscribeWithPrepaid = (ppc, done) =>
|
||||||
|
|
|
@ -19,7 +19,6 @@ describe '/db/prepaid', ->
|
||||||
expect(prepaid.type).toEqual('course')
|
expect(prepaid.type).toEqual('course')
|
||||||
expect(prepaid.maxRedeemers).toBeGreaterThan(0)
|
expect(prepaid.maxRedeemers).toBeGreaterThan(0)
|
||||||
expect(prepaid.code).toMatch(/^\w{8}$/)
|
expect(prepaid.code).toMatch(/^\w{8}$/)
|
||||||
expect(prepaid.properties?.courseIDs?.length).toBeGreaterThan(0)
|
|
||||||
done()
|
done()
|
||||||
|
|
||||||
verifySubscriptionPrepaid = (user, prepaid, done) ->
|
verifySubscriptionPrepaid = (user, prepaid, done) ->
|
||||||
|
@ -229,68 +228,36 @@ describe '/db/prepaid', ->
|
||||||
done() unless found
|
done() unless found
|
||||||
|
|
||||||
describe 'Purchase course', ->
|
describe 'Purchase course', ->
|
||||||
it 'Standard user purchases a prepaid for one course, 0 seats', (done) ->
|
it 'Standard user purchases a prepaid for 0 seats', (done) ->
|
||||||
stripe.tokens.create {
|
stripe.tokens.create {
|
||||||
card: { number: '4242424242424242', exp_month: 12, exp_year: 2020, cvc: '123' }
|
card: { number: '4242424242424242', exp_month: 12, exp_year: 2020, cvc: '123' }
|
||||||
}, (err, token) ->
|
}, (err, token) ->
|
||||||
loginNewUser (user1) ->
|
loginNewUser (user1) ->
|
||||||
createCourse 700, (err, course) ->
|
purchasePrepaid 'course', {}, 0, token.id, (err, res, prepaid) ->
|
||||||
expect(err).toBeNull()
|
expect(err).toBeNull()
|
||||||
purchasePrepaid 'course', courseID: course.id, 0, token.id, (err, res, prepaid) ->
|
expect(res.statusCode).toBe(422)
|
||||||
expect(err).toBeNull()
|
done()
|
||||||
expect(res.statusCode).toBe(422)
|
|
||||||
done()
|
it 'Standard user purchases a prepaid for 1 seat', (done) ->
|
||||||
it 'Standard user purchases a prepaid for one course, 1 seat', (done) ->
|
|
||||||
stripe.tokens.create {
|
stripe.tokens.create {
|
||||||
card: { number: '4242424242424242', exp_month: 12, exp_year: 2020, cvc: '123' }
|
card: { number: '4242424242424242', exp_month: 12, exp_year: 2020, cvc: '123' }
|
||||||
}, (err, token) ->
|
}, (err, token) ->
|
||||||
loginNewUser (user1) ->
|
loginNewUser (user1) ->
|
||||||
createCourse 700, (err, course) ->
|
purchasePrepaid 'course', {}, 1, token.id, (err, res, prepaid) ->
|
||||||
expect(err).toBeNull()
|
expect(err).toBeNull()
|
||||||
purchasePrepaid 'course', courseID: course.id, 1, token.id, (err, res, prepaid) ->
|
expect(res.statusCode).toBe(200)
|
||||||
expect(err).toBeNull()
|
verifyCoursePrepaid(user1, prepaid, done)
|
||||||
expect(res.statusCode).toBe(200)
|
|
||||||
verifyCoursePrepaid(user1, prepaid, done)
|
|
||||||
it 'Standard user purchases a prepaid for one course, 3 seats', (done) ->
|
|
||||||
stripe.tokens.create {
|
|
||||||
card: { number: '4242424242424242', exp_month: 12, exp_year: 2020, cvc: '123' }
|
|
||||||
}, (err, token) ->
|
|
||||||
loginNewUser (user1) ->
|
|
||||||
createCourse 700, (err, course) ->
|
|
||||||
expect(err).toBeNull()
|
|
||||||
purchasePrepaid 'course', courseID: course.id, 3, token.id, (err, res, prepaid) ->
|
|
||||||
expect(err).toBeNull()
|
|
||||||
expect(res.statusCode).toBe(200)
|
|
||||||
verifyCoursePrepaid(user1, prepaid, done)
|
|
||||||
it 'Standard user purchases a prepaid for all courses, 10 seats', (done) ->
|
|
||||||
clearModels [Course, CourseInstance, Payment, Prepaid, User], (err) ->
|
|
||||||
throw err if err
|
|
||||||
stripe.tokens.create {
|
|
||||||
card: { number: '4242424242424242', exp_month: 12, exp_year: 2020, cvc: '123' }
|
|
||||||
}, (err, token) ->
|
|
||||||
loginNewUser (user1) ->
|
|
||||||
createCourse 700, (err, course) ->
|
|
||||||
expect(err).toBeNull()
|
|
||||||
createCourse 700, (err, course) ->
|
|
||||||
expect(err).toBeNull()
|
|
||||||
purchasePrepaid 'course', null, 10, token.id, (err, res, prepaid) ->
|
|
||||||
expect(err).toBeNull()
|
|
||||||
expect(res.statusCode).toBe(200)
|
|
||||||
expect(prepaid.properties?.courseIDs?.length).toEqual(2)
|
|
||||||
verifyCoursePrepaid(user1, prepaid, done)
|
|
||||||
|
|
||||||
it 'Standard user purchases a prepaid course for 3', (done) ->
|
it 'Standard user purchases a prepaid for 3 seats', (done) ->
|
||||||
stripe.tokens.create {
|
stripe.tokens.create {
|
||||||
card: { number: '4242424242424242', exp_month: 12, exp_year: 2020, cvc: '123' }
|
card: { number: '4242424242424242', exp_month: 12, exp_year: 2020, cvc: '123' }
|
||||||
}, (err, token) ->
|
}, (err, token) ->
|
||||||
loginNewUser (user1) ->
|
loginNewUser (user1) ->
|
||||||
createCourse 700, (err, course) ->
|
purchasePrepaid 'course', {}, 3, token.id, (err, res, prepaid) ->
|
||||||
expect(err).toBeNull()
|
expect(err).toBeNull()
|
||||||
purchasePrepaid 'course', courseID: course.id, 3, token.id, (err, res, prepaid) ->
|
expect(res.statusCode).toBe(200)
|
||||||
expect(err).toBeNull()
|
verifyCoursePrepaid(user1, prepaid, done)
|
||||||
expect(res.statusCode).toBe(200)
|
|
||||||
done()
|
|
||||||
|
|
||||||
describe 'Purchase terminal_subscription', ->
|
describe 'Purchase terminal_subscription', ->
|
||||||
it 'Anonymous submits a prepaid purchase', (done) ->
|
it 'Anonymous submits a prepaid purchase', (done) ->
|
||||||
stripe.tokens.create {
|
stripe.tokens.create {
|
||||||
|
|
Loading…
Reference in a new issue