ProjectGetterTests.coffee 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. sinon = require('sinon')
  2. chai = require('chai')
  3. should = chai.should()
  4. expect = chai.expect
  5. modulePath = "../../../../app/js/Features/Project/ProjectGetter.js"
  6. SandboxedModule = require('sandboxed-module')
  7. ObjectId = require("mongojs").ObjectId
  8. assert = require("chai").assert
  9. describe "ProjectGetter", ->
  10. beforeEach ->
  11. @callback = sinon.stub()
  12. @ProjectGetter = SandboxedModule.require modulePath, requires:
  13. "../../infrastructure/mongojs":
  14. db: @db =
  15. projects: {}
  16. users: {}
  17. ObjectId: ObjectId
  18. "logger-sharelatex":
  19. err:->
  20. log:->
  21. describe "getProjectWithoutDocLines", ->
  22. beforeEach ->
  23. @project =
  24. _id: @project_id = "56d46b0a1d3422b87c5ebcb1"
  25. @db.projects.find = sinon.stub().callsArgWith(2, null, [@project])
  26. describe "passing an id", ->
  27. beforeEach ->
  28. @ProjectGetter.getProjectWithoutDocLines @project_id, @callback
  29. it "should call find with the project id", ->
  30. @db.projects.find.calledWith(_id: ObjectId(@project_id)).should.equal true
  31. it "should exclude the doc lines", ->
  32. excludes =
  33. "rootFolder.docs.lines": 0
  34. "rootFolder.folder.docs.lines": 0
  35. "rootFolder.folder.folder.docs.lines": 0
  36. "rootFolder.folder.folder.folder.docs.lines": 0
  37. "rootFolder.folder.folder.folder.folder.docs.lines": 0
  38. "rootFolder.folder.folder.folder.folder.folder.docs.lines": 0
  39. "rootFolder.folder.folder.folder.folder.folder.folder.docs.lines": 0
  40. "rootFolder.folder.folder.folder.folder.folder.folder.folder.docs.lines": 0
  41. @db.projects.find.calledWith(sinon.match.any, excludes)
  42. .should.equal true
  43. it "should call the callback with the project", ->
  44. @callback.calledWith(null, @project).should.equal true
  45. describe "getProjectWithOnlyFolders", ->
  46. beforeEach ()->
  47. @project =
  48. _id: @project_id = "56d46b0a1d3422b87c5ebcb1"
  49. @db.projects.find = sinon.stub().callsArgWith(2, null, [@project])
  50. describe "passing an id", ->
  51. beforeEach ->
  52. @ProjectGetter.getProjectWithOnlyFolders @project_id, @callback
  53. it "should call find with the project id", ->
  54. @db.projects.find.calledWith(_id: ObjectId(@project_id)).should.equal true
  55. it "should exclude the docs and files linesaaaa", ->
  56. excludes =
  57. "rootFolder.docs": 0
  58. "rootFolder.fileRefs": 0
  59. "rootFolder.folder.docs": 0
  60. "rootFolder.folder.fileRefs": 0
  61. "rootFolder.folder.folder.docs": 0
  62. "rootFolder.folder.folder.fileRefs": 0
  63. "rootFolder.folder.folder.folder.docs": 0
  64. "rootFolder.folder.folder.folder.fileRefs": 0
  65. "rootFolder.folder.folder.folder.folder.docs": 0
  66. "rootFolder.folder.folder.folder.folder.fileRefs": 0
  67. "rootFolder.folder.folder.folder.folder.folder.docs": 0
  68. "rootFolder.folder.folder.folder.folder.folder.fileRefs": 0
  69. "rootFolder.folder.folder.folder.folder.folder.folder.docs": 0
  70. "rootFolder.folder.folder.folder.folder.folder.folder.fileRefs": 0
  71. "rootFolder.folder.folder.folder.folder.folder.folder.folder.docs": 0
  72. "rootFolder.folder.folder.folder.folder.folder.folder.folder.fileRefs": 0
  73. @db.projects.find.calledWith(sinon.match.any, excludes).should.equal true
  74. it "should call the callback with the project", ->
  75. @callback.calledWith(null, @project).should.equal true
  76. describe "getProject", ->
  77. beforeEach ()->
  78. @project =
  79. _id: @project_id = "56d46b0a1d3422b87c5ebcb1"
  80. @db.projects.find = sinon.stub().callsArgWith(2, null, [@project])
  81. describe "passing an id", ->
  82. beforeEach ->
  83. @ProjectGetter.getProjectWithOnlyFolders @project_id, @callback
  84. it "should call find with the project id", ->
  85. @db.projects.find.calledWith(_id: ObjectId(@project_id)).should.equal true
  86. it "should exclude the docs and files linesaaaa", ->
  87. excludes =
  88. "rootFolder.docs": 0
  89. "rootFolder.fileRefs": 0
  90. "rootFolder.folder.docs": 0
  91. "rootFolder.folder.fileRefs": 0
  92. "rootFolder.folder.folder.docs": 0
  93. "rootFolder.folder.folder.fileRefs": 0
  94. "rootFolder.folder.folder.folder.docs": 0
  95. "rootFolder.folder.folder.folder.fileRefs": 0
  96. "rootFolder.folder.folder.folder.folder.docs": 0
  97. "rootFolder.folder.folder.folder.folder.fileRefs": 0
  98. "rootFolder.folder.folder.folder.folder.folder.docs": 0
  99. "rootFolder.folder.folder.folder.folder.folder.fileRefs": 0
  100. "rootFolder.folder.folder.folder.folder.folder.folder.docs": 0
  101. "rootFolder.folder.folder.folder.folder.folder.folder.fileRefs": 0
  102. "rootFolder.folder.folder.folder.folder.folder.folder.folder.docs": 0
  103. "rootFolder.folder.folder.folder.folder.folder.folder.folder.fileRefs": 0
  104. @db.projects.find.calledWith(sinon.match.any, excludes).should.equal true
  105. it "should call the callback with the project", ->
  106. @callback.calledWith(null, @project).should.equal true
  107. describe "getProject", ->
  108. beforeEach ()->
  109. @project =
  110. _id: @project_id = "56d46b0a1d3422b87c5ebcb1"
  111. @db.projects.find = sinon.stub().callsArgWith(2, null, [@project])
  112. it "should call find with the project id when string id is passed", (done)->
  113. @ProjectGetter.getProject @project_id, (err, project)=>
  114. @db.projects.find.calledWith(_id: ObjectId(@project_id)).should.equal true
  115. assert.deepEqual @project, project
  116. done()
  117. it "should call find with the project id when object id is passed", (done)->
  118. @ProjectGetter.getProject ObjectId(@project_id), (err, project)=>
  119. @db.projects.find.calledWith(_id: ObjectId(@project_id)).should.equal true
  120. assert.deepEqual @project, project
  121. done()
  122. it "should call the db when a mongoose objectid is used", (done)->
  123. mongooseID = require('mongoose').Types.ObjectId(@project_id)
  124. @ProjectGetter.getProject mongooseID, (err, project)=>
  125. @db.projects.find.calledWith(_id: ObjectId(@project_id)).should.equal true
  126. assert.deepEqual @project, project
  127. done()
  128. describe "populateProjectWithUsers", ->
  129. beforeEach ->
  130. @users = []
  131. @user_lookup = {}
  132. for i in [0..4]
  133. @users[i] = _id: ObjectId.createPk()
  134. @user_lookup[@users[i]._id.toString()] = @users[i]
  135. @project =
  136. _id: ObjectId.createPk()
  137. owner_ref: @users[0]._id
  138. readOnly_refs: [@users[1]._id, @users[2]._id]
  139. collaberator_refs: [@users[3]._id, @users[4]._id]
  140. @db.users.find = (query, callback) =>
  141. callback null, [@user_lookup[query._id.toString()]]
  142. sinon.spy @db.users, "find"
  143. @ProjectGetter.populateProjectWithUsers @project, (err, project)=>
  144. @callback err, project
  145. it "should look up each user", ->
  146. for user in @users
  147. @db.users.find.calledWith(_id: user._id).should.equal true
  148. it "should set the owner_ref to the owner", ->
  149. @project.owner_ref.should.equal @users[0]
  150. it "should set the readOnly_refs to the read only users", ->
  151. expect(@project.readOnly_refs).to.deep.equal [@users[1], @users[2]]
  152. it "should set the collaberator_refs to the collaborators", ->
  153. expect(@project.collaberator_refs).to.deep.equal [@users[3], @users[4]]
  154. it "should call the callback", ->
  155. assert.deepEqual @callback.args[0][1], @project