ProjectDetailsHandlerTests.coffee 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. should = require('chai').should()
  2. modulePath = "../../../../app/js/Features/Project/ProjectDetailsHandler"
  3. SandboxedModule = require('sandboxed-module')
  4. sinon = require('sinon')
  5. assert = require("chai").assert
  6. require('chai').should()
  7. describe 'Project details handler', ->
  8. beforeEach ->
  9. @project_id = "321l3j1kjkjl"
  10. @user_id = "user-id-123"
  11. @project =
  12. name: "project"
  13. description: "this is a great project"
  14. something:"should not exist"
  15. compiler: "latexxxxxx"
  16. owner_ref: @user_id
  17. @user =
  18. features: "mock-features"
  19. @ProjectGetter =
  20. getProjectWithoutDocLines: sinon.stub().callsArgWith(1, null, @project)
  21. getProject: sinon.stub().callsArgWith(2, null, @project)
  22. @ProjectModel =
  23. update: sinon.stub()
  24. findOne: sinon.stub()
  25. @UserGetter =
  26. getUser: sinon.stub().callsArgWith(1, null, @user)
  27. @tpdsUpdateSender =
  28. moveEntity:sinon.stub().callsArgWith 1
  29. @handler = SandboxedModule.require modulePath, requires:
  30. "./ProjectGetter":@ProjectGetter
  31. '../../models/Project': Project:@ProjectModel
  32. "../User/UserGetter": @UserGetter
  33. '../ThirdPartyDataStore/TpdsUpdateSender':@tpdsUpdateSender
  34. 'logger-sharelatex':
  35. log:->
  36. err:->
  37. describe "getDetails", ->
  38. it "should find the project and owner", (done)->
  39. @handler.getDetails @project_id, (err, details)=>
  40. details.name.should.equal @project.name
  41. details.description.should.equal @project.description
  42. details.compiler.should.equal @project.compiler
  43. details.features.should.equal @user.features
  44. assert.equal(details.something, undefined)
  45. done()
  46. it "should return the error", (done)->
  47. error = "some error"
  48. @ProjectGetter.getProjectWithoutDocLines.callsArgWith(1, error)
  49. @handler.getDetails @project_id, (err)=>
  50. err.should.equal error
  51. done()
  52. describe "getProjectDescription", ->
  53. it "should make a call to mongo just for the description", (done)->
  54. @ProjectModel.findOne.callsArgWith(2)
  55. @handler.getProjectDescription @project_id, (err, description)=>
  56. @ProjectModel.findOne.calledWith({_id:@project_id}, "description").should.equal true
  57. done()
  58. it "should return what the mongo call returns", (done)->
  59. err = "error"
  60. description = "cool project"
  61. @ProjectModel.findOne.callsArgWith(2, err, {description:description})
  62. @handler.getProjectDescription @project_id, (returnedErr, returnedDescription)=>
  63. err.should.equal returnedErr
  64. description.should.equal returnedDescription
  65. done()
  66. describe "setProjectDescription", ->
  67. beforeEach ->
  68. @description = "updated teh description"
  69. it "should update the project detials", (done)->
  70. @ProjectModel.update.callsArgWith(2)
  71. @handler.setProjectDescription @project_id, @description, =>
  72. @ProjectModel.update.calledWith({_id:@project_id}, {description:@description}).should.equal true
  73. done()
  74. describe "renameProject", ->
  75. beforeEach ->
  76. @ProjectModel.update.callsArgWith(2)
  77. @newName = "new name here"
  78. it "should update the project with the new name", (done)->
  79. newName = "new name here"
  80. @handler.renameProject @project_id, @newName, =>
  81. @ProjectModel.update.calledWith({_id: @project_id}, {name: @newName}).should.equal true
  82. done()
  83. it "should tell the tpdsUpdateSender", (done)->
  84. @handler.renameProject @project_id, @newName, =>
  85. @tpdsUpdateSender.moveEntity.calledWith({project_id:@project_id, project_name:@project.name, newProjectName:@newName}).should.equal true
  86. done()
  87. describe "setPublicAccessLevel", ->
  88. beforeEach ->
  89. @ProjectModel.update.callsArgWith(2)
  90. @accessLevel = "readOnly"
  91. it "should update the project with the new level", (done)->
  92. @handler.setPublicAccessLevel @project_id, @accessLevel, =>
  93. @ProjectModel.update.calledWith({_id: @project_id}, {publicAccesLevel: @accessLevel}).should.equal true
  94. done()