ProjectDetailsHandlerTests.coffee 4.1 KB

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