ProjectGetterTests.coffee 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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. "../../models/Project": Project: @Project = {}
  19. "../Collaborators/CollaboratorsHandler": @CollaboratorsHandler = {}
  20. describe "getProjectWithoutDocLines", ->
  21. beforeEach ->
  22. @project =
  23. _id: @project_id = "0123456789abcd9876543210"
  24. @db.projects.find = sinon.stub().callsArgWith(2, null, [@project])
  25. @ProjectGetter.getProjectWithoutDocLines @project_id, @callback
  26. it "should call find with the project id", ->
  27. @db.projects.find.calledWith(_id: ObjectId(@project_id)).should.equal true
  28. it "should exclude the doc lines", ->
  29. excludes =
  30. "rootFolder.docs.lines": 0
  31. "rootFolder.folder.docs.lines": 0
  32. "rootFolder.folder.folder.docs.lines": 0
  33. "rootFolder.folder.folder.folder.docs.lines": 0
  34. "rootFolder.folder.folder.folder.folder.docs.lines": 0
  35. "rootFolder.folder.folder.folder.folder.folder.docs.lines": 0
  36. "rootFolder.folder.folder.folder.folder.folder.folder.docs.lines": 0
  37. "rootFolder.folder.folder.folder.folder.folder.folder.folder.docs.lines": 0
  38. @db.projects.find.calledWith(sinon.match.any, excludes)
  39. .should.equal true
  40. it "should call the callback with the project", ->
  41. @callback.calledWith(null, @project).should.equal true
  42. describe "getProjectWithOnlyFolders", ->
  43. beforeEach ->
  44. @project =
  45. _id: @project_id = "0123456789abcd9876543210"
  46. @db.projects.find = sinon.stub().callsArgWith(2, null, [@project])
  47. @ProjectGetter.getProjectWithOnlyFolders @project_id, @callback
  48. it "should call find with the project id", ->
  49. @db.projects.find.calledWith(_id: ObjectId(@project_id)).should.equal true
  50. it "should exclude the docs and files lines", ->
  51. excludes =
  52. "rootFolder.docs": 0
  53. "rootFolder.fileRefs": 0
  54. "rootFolder.folder.docs": 0
  55. "rootFolder.folder.fileRefs": 0
  56. "rootFolder.folder.folder.docs": 0
  57. "rootFolder.folder.folder.fileRefs": 0
  58. "rootFolder.folder.folder.folder.docs": 0
  59. "rootFolder.folder.folder.folder.fileRefs": 0
  60. "rootFolder.folder.folder.folder.folder.docs": 0
  61. "rootFolder.folder.folder.folder.folder.fileRefs": 0
  62. "rootFolder.folder.folder.folder.folder.folder.docs": 0
  63. "rootFolder.folder.folder.folder.folder.folder.fileRefs": 0
  64. "rootFolder.folder.folder.folder.folder.folder.folder.docs": 0
  65. "rootFolder.folder.folder.folder.folder.folder.folder.fileRefs": 0
  66. "rootFolder.folder.folder.folder.folder.folder.folder.folder.docs": 0
  67. "rootFolder.folder.folder.folder.folder.folder.folder.folder.fileRefs": 0
  68. @db.projects.find.calledWith(sinon.match.any, excludes)
  69. .should.equal true
  70. it "should call the callback with the project", ->
  71. @callback.calledWith(null, @project).should.equal true
  72. describe "populateProjectWithUsers", ->
  73. beforeEach ->
  74. @users = []
  75. @user_lookup = {}
  76. for i in [0..4]
  77. @users[i] = _id: ObjectId.createPk()
  78. @user_lookup[@users[i]._id.toString()] = @users[i]
  79. @project =
  80. _id: ObjectId.createPk()
  81. owner_ref: @users[0]._id
  82. readOnly_refs: [@users[1]._id, @users[2]._id]
  83. collaberator_refs: [@users[3]._id, @users[4]._id]
  84. @db.users.find = (query, callback) =>
  85. callback null, [@user_lookup[query._id.toString()]]
  86. sinon.spy @db.users, "find"
  87. @ProjectGetter.populateProjectWithUsers @project, (err, project)=>
  88. @callback err, project
  89. it "should look up each user", ->
  90. for user in @users
  91. @db.users.find.calledWith(_id: user._id).should.equal true
  92. it "should set the owner_ref to the owner", ->
  93. @project.owner_ref.should.equal @users[0]
  94. it "should set the readOnly_refs to the read only users", ->
  95. expect(@project.readOnly_refs).to.deep.equal [@users[1], @users[2]]
  96. it "should set the collaberator_refs to the collaborators", ->
  97. expect(@project.collaberator_refs).to.deep.equal [@users[3], @users[4]]
  98. it "should call the callback", ->
  99. assert.deepEqual @callback.args[0][1], @project
  100. describe "findAllUsersProjects", ->
  101. beforeEach ->
  102. @fields = {"mock": "fields"}
  103. @Project.find = sinon.stub()
  104. @Project.find.withArgs({owner_ref: @user_id}, @fields).yields(null, ["mock-owned-projects"])
  105. @CollaboratorsHandler.getProjectsUserIsMemberOf = sinon.stub()
  106. @CollaboratorsHandler.getProjectsUserIsMemberOf.withArgs(@user_id, @fields).yields(null, ["mock-rw-projects"], ["mock-ro-projects"])
  107. @ProjectGetter.findAllUsersProjects @user_id, @fields, @callback
  108. it "should call the callback with all the projects", ->
  109. @callback
  110. .calledWith(null, ["mock-owned-projects"], ["mock-rw-projects"], ["mock-ro-projects"])
  111. .should.equal true