UserCreatorTests.coffee 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. sinon = require('sinon')
  2. chai = require('chai')
  3. assert = require("assert")
  4. should = chai.should()
  5. modulePath = "../../../../app/js/Features/User/UserCreator.js"
  6. SandboxedModule = require('sandboxed-module')
  7. describe "UserCreator", ->
  8. beforeEach ->
  9. self = @
  10. @user = {_id:"12390i"}
  11. @user.save = sinon.stub().callsArgWith(0)
  12. @UserModel = class Project
  13. constructor: ->
  14. return self.user
  15. @UserLocator =
  16. findByEmail: sinon.stub()
  17. @UserCreator = SandboxedModule.require modulePath, requires:
  18. "../../models/User": User:@UserModel
  19. "./UserLocator":@UserLocator
  20. @email = "bob.oswald@gmail.com"
  21. describe "getUserOrCreateHoldingAccount", ->
  22. it "should immediately return the user if found", (done)->
  23. @UserLocator.findByEmail.callsArgWith(1, null, @user)
  24. @UserCreator.getUserOrCreateHoldingAccount @email, (err, returnedUser)=>
  25. assert.deepEqual returnedUser, @user
  26. done()
  27. it "should create new holding account if the user is not found", (done)->
  28. @UserLocator.findByEmail.callsArgWith(1)
  29. @UserCreator.createNewUser = sinon.stub().callsArgWith(1, null, @user)
  30. @UserCreator.getUserOrCreateHoldingAccount @email, (err, returnedUser)=>
  31. @UserCreator.createNewUser.calledWith(email:@email, holdingAccount:true).should.equal true
  32. assert.deepEqual returnedUser, @user
  33. done()
  34. describe "createNewUser", ->
  35. it "should take the opts and put them in the model", (done)->
  36. opts =
  37. email:@email
  38. holdingAccount:true
  39. @UserCreator.createNewUser opts, (err, user)=>
  40. assert.equal user.email, @email
  41. assert.equal user.holdingAccount, true
  42. done()