diff --git a/server/models/TrialRequest.coffee b/server/models/TrialRequest.coffee index 536fa0984..ca0c6622d 100644 --- a/server/models/TrialRequest.coffee +++ b/server/models/TrialRequest.coffee @@ -10,62 +10,20 @@ User = require './User' TrialRequestSchema = new mongoose.Schema {}, {strict: false, minimize: false, read:config.mongo.readpref} -TrialRequestSchema.pre 'save', (next) -> - return next() unless @get('status') is 'approved' - - # Add 2 course headcount - prepaid = new Prepaid - creator: @get('applicant') - type: 'course' - maxRedeemers: 2 - properties: - trialRequestID: @get('_id') - prepaid.save (err) => - if err - log.error "Trial request prepaid creation error: #{err}" - next() - TrialRequestSchema.post 'save', (doc) -> - if doc.get('status') is 'approved' - unless trialProperties = doc.get('properties') - log.error "Saving approved trial request #{doc.id} with no properties!" + # Subscribe to teacher news group + User.findById doc.get('applicant'), (err, user) => + if err + log.error "Trial request user find error: #{err}" return - - User.findById doc.get('applicant'), (err, user) => + emails = _.cloneDeep(user.get('emails') ? {}) + emails.teacherNews ?= {} + emails.teacherNews.enabled = true + user.update {$set: {emails: emails}}, {}, (err) => if err - log.error "Trial request user find error: #{err}" + log.error "Trial request user update error: #{err}" return - # Send trial approved email - email = trialProperties.email ? user.get('emailLower') - emailParams = - recipient: - address: email - email_id: sendwithus.templates.teacher_request_demo - email_data: - account_exists: user?.get('anonymous') is false - classes_exist: false - if user?.get('anonymous') is false - Classroom.findOne {ownerID: user.get('_id')}, (err, classroom) => - if err - log.error "Trial request classroom find error: #{err}" - return - emailParams.email_data.classes_exist = classroom? - sendwithus.api.send emailParams, (err, result) => - log.error "sendwithus trial request approved error: #{err}, result: #{result}" if err - else - sendwithus.api.send emailParams, (err, result) => - log.error "sendwithus trial request approved error: #{err}, result: #{result}" if err - - # Subscribe to teacher news group - emails = _.cloneDeep(user.get('emails') ? {}) - emails.teacherNews ?= {} - emails.teacherNews.enabled = true - user.update {$set: {emails: emails}}, {}, (err) => - if err - log.error "Trial request user update error: #{err}" - return - TrialRequestSchema.statics.privateProperties = [] TrialRequestSchema.statics.editableProperties = [ 'created' diff --git a/spec/server/functional/trial_request.spec.coffee b/spec/server/functional/trial_request.spec.coffee index 4482378d4..9e65c85fc 100644 --- a/spec/server/functional/trial_request.spec.coffee +++ b/spec/server/functional/trial_request.spec.coffee @@ -64,7 +64,7 @@ describe 'POST /db/trial.request', -> [res, body] = yield request.postAsync(getURL('/db/trial.request'), { json: true }) expect(res.statusCode).toBe(422) done() - + it 'updates an existing TrialRequest if there is one', utils.wrap (done) -> yield utils.clearModels([User, TrialRequest]) @user = yield utils.initUser() @@ -98,7 +98,7 @@ describe 'GET /db/trial.request', -> [res, body] = yield request.postAsync(getURL('/db/trial.request'), { json: fixture }) @trialRequest = yield TrialRequest.findById(body._id) done() - + it 'returns 403 to non-admins', utils.wrap (done) -> [res, body] = yield request.getAsync(getURL('/db/trial.request')) expect(res.statusCode).toEqual(403) @@ -130,13 +130,13 @@ describe 'GET /db/trial.request?applicant=:userID', -> expect(body.length).toBe(1) expect(body[0]._id).toBe(@trialRequest1.id) done() - + it 'returns 403 when non-admins request other people\'s trial requests', utils.wrap (done) -> [res, body] = yield request.getAsync(getURL('/db/trial.request?applicant='+@user2.id), { json: true }) expect(res.statusCode).toEqual(403) done() - + describe 'PUT /db/trial.request/:handle', -> putURL = null @@ -149,14 +149,14 @@ describe 'PUT /db/trial.request/:handle', -> @trialRequest = yield TrialRequest.findById(body._id) putURL = getURL('/db/trial.request/'+@trialRequest.id) done() - + it 'returns 403 to non-admins', -> [res, body] = yield request.putAsync(getURL("/db/trial.request/#{@trialRequest.id}")) expect(res.statusCode).toEqual(403) done() - + describe 'set status to "approved"', -> - + beforeEach utils.wrap (done) -> @admin = yield utils.initAdmin() yield utils.loginUser(@admin) @@ -164,23 +164,14 @@ describe 'PUT /db/trial.request/:handle', -> expect(res.statusCode).toBe(200) expect(body.status).toBe('approved') setTimeout done, 10 # let changes propagate - + it 'sets reviewDate and reviewer', utils.wrap (done) -> trialRequest = yield TrialRequest.findById(@trialRequest.id) expect(trialRequest.get('reviewDate')).toBeDefined() expect(trialRequest.get('reviewer').equals(@admin._id)) expect(new Date(trialRequest.get('reviewDate'))).toBeLessThan(new Date()) done() - - it 'gives the user two enrollments', utils.wrap (done) -> - prepaids = yield Prepaid.find({'properties.trialRequestID': @trialRequest._id}) - 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) - done() - + it 'enables teacherNews for the user', utils.wrap (done) -> user = yield User.findById(@user._id) expect(user.get('emails')?.teacherNews?.enabled).toEqual(true) @@ -202,8 +193,4 @@ describe 'PUT /db/trial.request/:handle', -> expect(trialRequest.get('reviewer').equals(@admin._id)) expect(new Date(trialRequest.get('reviewDate'))).toBeLessThan(new Date()) done() - - it 'does not give the user two enrollments', utils.wrap (done) -> - prepaids = yield Prepaid.find({'properties.trialRequestID': @trialRequest._id}) - expect(prepaids.length).toEqual(0) - done() +