ProjectGetterTests.coffee 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  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. "metrics-sharelatex": timeAsyncMethod: sinon.stub()
  19. "../../models/Project": Project: @Project = {}
  20. "../Collaborators/CollaboratorsHandler": @CollaboratorsHandler = {}
  21. "../../infrastructure/LockManager": @LockManager =
  22. mongoTransactionLock:
  23. runWithLock : sinon.spy((key, runner, callback) -> runner(callback))
  24. "logger-sharelatex":
  25. err:->
  26. log:->
  27. describe "getProjectWithoutDocLines", ->
  28. beforeEach ->
  29. @project =
  30. _id: @project_id = "56d46b0a1d3422b87c5ebcb1"
  31. @ProjectGetter.getProject = sinon.stub().yields()
  32. describe "passing an id", ->
  33. beforeEach ->
  34. @ProjectGetter.getProjectWithoutDocLines @project_id, @callback
  35. it "should call find with the project id", ->
  36. @ProjectGetter.getProject
  37. .calledWith(@project_id)
  38. .should.equal true
  39. it "should exclude the doc lines", ->
  40. excludes =
  41. "rootFolder.docs.lines": 0
  42. "rootFolder.folders.docs.lines": 0
  43. "rootFolder.folders.folders.docs.lines": 0
  44. "rootFolder.folders.folders.folders.docs.lines": 0
  45. "rootFolder.folders.folders.folders.folders.docs.lines": 0
  46. "rootFolder.folders.folders.folders.folders.folders.docs.lines": 0
  47. "rootFolder.folders.folders.folders.folders.folders.folders.docs.lines": 0
  48. "rootFolder.folders.folders.folders.folders.folders.folders.folders.docs.lines": 0
  49. @ProjectGetter.getProject
  50. .calledWith(@project_id, excludes)
  51. .should.equal true
  52. it "should call the callback", ->
  53. @callback.called.should.equal true
  54. describe "getProjectWithOnlyFolders", ->
  55. beforeEach ()->
  56. @project =
  57. _id: @project_id = "56d46b0a1d3422b87c5ebcb1"
  58. @ProjectGetter.getProject = sinon.stub().yields()
  59. describe "passing an id", ->
  60. beforeEach ->
  61. @ProjectGetter.getProjectWithOnlyFolders @project_id, @callback
  62. it "should call find with the project id", ->
  63. @ProjectGetter.getProject
  64. .calledWith(@project_id)
  65. .should.equal true
  66. it "should exclude the docs and files linesaaaa", ->
  67. excludes =
  68. "rootFolder.docs": 0
  69. "rootFolder.fileRefs": 0
  70. "rootFolder.folders.docs": 0
  71. "rootFolder.folders.fileRefs": 0
  72. "rootFolder.folders.folders.docs": 0
  73. "rootFolder.folders.folders.fileRefs": 0
  74. "rootFolder.folders.folders.folders.docs": 0
  75. "rootFolder.folders.folders.folders.fileRefs": 0
  76. "rootFolder.folders.folders.folders.folders.docs": 0
  77. "rootFolder.folders.folders.folders.folders.fileRefs": 0
  78. "rootFolder.folders.folders.folders.folders.folders.docs": 0
  79. "rootFolder.folders.folders.folders.folders.folders.fileRefs": 0
  80. "rootFolder.folders.folders.folders.folders.folders.folders.docs": 0
  81. "rootFolder.folders.folders.folders.folders.folders.folders.fileRefs": 0
  82. "rootFolder.folders.folders.folders.folders.folders.folders.folders.docs": 0
  83. "rootFolder.folders.folders.folders.folders.folders.folders.folders.fileRefs": 0
  84. @ProjectGetter.getProject
  85. .calledWith(@project_id, excludes)
  86. .should.equal true
  87. it "should call the callback with the project", ->
  88. @callback.called.should.equal true
  89. describe "getProject", ->
  90. beforeEach ()->
  91. @project =
  92. _id: @project_id = "56d46b0a1d3422b87c5ebcb1"
  93. @db.projects.find = sinon.stub().callsArgWith(2, null, [@project])
  94. describe "passing an id", ->
  95. beforeEach ->
  96. @ProjectGetter.getProjectWithOnlyFolders @project_id, @callback
  97. it "should call find with the project id", ->
  98. expect(@db.projects.find.lastCall.args[0]).to.deep.equal {
  99. _id: ObjectId(@project_id)
  100. }
  101. it "should exclude the docs and files linesaaaa", ->
  102. excludes =
  103. "rootFolder.docs": 0
  104. "rootFolder.fileRefs": 0
  105. "rootFolder.folders.docs": 0
  106. "rootFolder.folders.fileRefs": 0
  107. "rootFolder.folders.folders.docs": 0
  108. "rootFolder.folders.folders.fileRefs": 0
  109. "rootFolder.folders.folders.folders.docs": 0
  110. "rootFolder.folders.folders.folders.fileRefs": 0
  111. "rootFolder.folders.folders.folders.folders.docs": 0
  112. "rootFolder.folders.folders.folders.folders.fileRefs": 0
  113. "rootFolder.folders.folders.folders.folders.folders.docs": 0
  114. "rootFolder.folders.folders.folders.folders.folders.fileRefs": 0
  115. "rootFolder.folders.folders.folders.folders.folders.folders.docs": 0
  116. "rootFolder.folders.folders.folders.folders.folders.folders.fileRefs": 0
  117. "rootFolder.folders.folders.folders.folders.folders.folders.folders.docs": 0
  118. "rootFolder.folders.folders.folders.folders.folders.folders.folders.fileRefs": 0
  119. @db.projects.find.calledWith(sinon.match.any, excludes).should.equal true
  120. it "should call the callback with the project", ->
  121. @callback.calledWith(null, @project).should.equal true
  122. describe "getProject", ->
  123. beforeEach ()->
  124. @project =
  125. _id: @project_id = "56d46b0a1d3422b87c5ebcb1"
  126. @db.projects.find = sinon.stub().callsArgWith(2, null, [@project])
  127. describe "findAllUsersProjects", ->
  128. beforeEach ->
  129. @fields = {"mock": "fields"}
  130. @Project.find = sinon.stub()
  131. @Project.find.withArgs({owner_ref: @user_id}, @fields).yields(null, ["mock-owned-projects"])
  132. @CollaboratorsHandler.getProjectsUserIsMemberOf = sinon.stub()
  133. @CollaboratorsHandler.getProjectsUserIsMemberOf.withArgs(@user_id, @fields).yields(
  134. null,
  135. {
  136. readAndWrite: ["mock-rw-projects"],
  137. readOnly: ["mock-ro-projects"],
  138. tokenReadAndWrite: ['mock-token-rw-projects'],
  139. tokenReadOnly: ['mock-token-ro-projects']
  140. }
  141. )
  142. @ProjectGetter.findAllUsersProjects @user_id, @fields, @callback
  143. it "should call the callback with all the projects", ->
  144. @callback
  145. .calledWith(null, {
  146. owned: ["mock-owned-projects"],
  147. readAndWrite: ["mock-rw-projects"],
  148. readOnly: ["mock-ro-projects"]
  149. tokenReadAndWrite: ['mock-token-rw-projects'],
  150. tokenReadOnly: ['mock-token-ro-projects']
  151. })
  152. .should.equal true