| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- sinon = require('sinon')
- chai = require('chai')
- assert = require("assert")
- should = chai.should()
- modulePath = "../../../../app/js/Features/User/UserCreator.js"
- SandboxedModule = require('sandboxed-module')
- describe "UserCreator", ->
- beforeEach ->
- self = @
- @user = {_id:"12390i", ace: {}}
- @user.save = sinon.stub().callsArgWith(0)
- @UserModel = class Project
- constructor: ->
- return self.user
- @UserGetter =
- getUserByMainEmail: sinon.stub()
- @addAffiliation = sinon.stub().yields()
- @UserCreator = SandboxedModule.require modulePath, requires:
- "../../models/User": User:@UserModel
- "logger-sharelatex":{ log: sinon.stub(), err: sinon.stub() }
- 'metrics-sharelatex': {timeAsyncMethod: ()->}
- "../Institutions/InstitutionsAPI": addAffiliation: @addAffiliation
- @email = "bob.oswald@gmail.com"
- describe "createNewUser", ->
- it "should take the opts and put them in the model", (done)->
- opts =
- email:@email
- holdingAccount:true
- @UserCreator.createNewUser opts, (err, user)=>
- assert.equal user.email, @email
- assert.equal user.holdingAccount, true
- assert.equal user.first_name, "bob.oswald"
- done()
- it "should use the start of the email if the first name is empty string", (done)->
- opts =
- email:@email
- holdingAccount:true
- first_name:""
- @UserCreator.createNewUser opts, (err, user)=>
- assert.equal user.email, @email
- assert.equal user.holdingAccount, true
- assert.equal user.first_name, "bob.oswald"
- done()
- it "should use the first name if passed", (done)->
- opts =
- email:@email
- holdingAccount:true
- first_name:"fiiirstname"
- @UserCreator.createNewUser opts, (err, user)=>
- assert.equal user.email, @email
- assert.equal user.holdingAccount, true
- assert.equal user.first_name, "fiiirstname"
- done()
- it "should use the last name if passed", (done)->
- opts =
- email:@email
- holdingAccount:true
- last_name:"lastNammmmeee"
- @UserCreator.createNewUser opts, (err, user)=>
- assert.equal user.email, @email
- assert.equal user.holdingAccount, true
- assert.equal user.last_name, "lastNammmmeee"
- done()
- it "should set emails attribute", (done)->
- @UserCreator.createNewUser email: @email, (err, user)=>
- user.email.should.equal @email
- user.emails.length.should.equal 1
- user.emails[0].email.should.equal @email
- user.emails[0].createdAt.should.be.a 'date'
- done()
- it "should add affiliation in background", (done)->
- @UserCreator.createNewUser email: @email, (err, user) =>
- # addaffiliation should not be called before the callback but only after
- # a tick of the event loop
- sinon.assert.notCalled(@addAffiliation)
- process.nextTick () =>
- sinon.assert.calledWith(@addAffiliation, user._id, user.email)
- done()
- it "should not add affiliation if skipping", (done)->
- attributes = email: @email
- options = skip_affiliation: true
- @UserCreator.createNewUser attributes, options, (err, user) =>
- process.nextTick () =>
- sinon.assert.notCalled(@addAffiliation)
- done()
|