ProjectEditorHandlerTests.coffee 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. chai = require('chai')
  2. should = chai.should()
  3. modulePath = "../../../../app/js/Features/Project/ProjectEditorHandler"
  4. SandboxedModule = require('sandboxed-module')
  5. describe "ProjectEditorHandler", ->
  6. beforeEach ->
  7. @project =
  8. _id : "project-id"
  9. name : "Project Name"
  10. rootDoc_id : "file-id"
  11. publicAccesLevel : "private"
  12. deletedByExternalDataSource: false
  13. rootFolder : [{
  14. _id : "root-folder-id"
  15. name : ""
  16. docs : []
  17. fileRefs : []
  18. folders : [{
  19. _id : "sub-folder-id"
  20. name : "folder"
  21. docs : [{
  22. _id : "doc-id"
  23. name : "main.tex"
  24. lines : @lines = [
  25. "line 1"
  26. "line 2"
  27. "line 3"
  28. ]
  29. }]
  30. fileRefs : [{
  31. _id : "file-id"
  32. name : "image.png"
  33. created : new Date()
  34. size : 1234
  35. }]
  36. folders : []
  37. }]
  38. }]
  39. deletedDocs: [{
  40. _id: "deleted-doc-id"
  41. name: "main.tex"
  42. }]
  43. @members = [{
  44. user: @owner = {
  45. _id: "owner-id"
  46. first_name : "Owner"
  47. last_name : "ShareLaTeX"
  48. email : "owner@sharelatex.com"
  49. },
  50. privilegeLevel: "owner"
  51. },{
  52. user: {
  53. _id: "read-only-id"
  54. first_name : "Read"
  55. last_name : "Only"
  56. email : "read-only@sharelatex.com"
  57. },
  58. privilegeLevel: "readOnly"
  59. },{
  60. user: {
  61. _id: "read-write-id"
  62. first_name : "Read"
  63. last_name : "Write"
  64. email : "read-write@sharelatex.com"
  65. },
  66. privilegeLevel: "readAndWrite"
  67. }]
  68. @invites = [
  69. {_id: "invite_one", email: "user-one@example.com", privileges: "readOnly", projectId: @project._id}
  70. {_id: "invite_two", email: "user-two@example.com", privileges: "readOnly", projectId: @project._id}
  71. ]
  72. @handler = SandboxedModule.require modulePath
  73. describe "buildProjectModelView", ->
  74. describe "with owner and members included", ->
  75. beforeEach ->
  76. @result = @handler.buildProjectModelView @project, @members, @invites
  77. it "should include the id", ->
  78. should.exist @result._id
  79. @result._id.should.equal "project-id"
  80. it "should include the name", ->
  81. should.exist @result.name
  82. @result.name.should.equal "Project Name"
  83. it "should include the root doc id", ->
  84. should.exist @result.rootDoc_id
  85. @result.rootDoc_id.should.equal "file-id"
  86. it "should include the public access level", ->
  87. should.exist @result.publicAccesLevel
  88. @result.publicAccesLevel.should.equal "private"
  89. it "should include the owner", ->
  90. should.exist @result.owner
  91. @result.owner._id.should.equal "owner-id"
  92. @result.owner.email.should.equal "owner@sharelatex.com"
  93. @result.owner.first_name.should.equal "Owner"
  94. @result.owner.last_name.should.equal "ShareLaTeX"
  95. @result.owner.privileges.should.equal "owner"
  96. it "should include the deletedDocs", ->
  97. should.exist @result.deletedDocs
  98. @result.deletedDocs.should.equal @project.deletedDocs
  99. it "should gather readOnly_refs and collaberators_refs into a list of members", ->
  100. findMember = (id) =>
  101. for member in @result.members
  102. return member if member._id == id
  103. return null
  104. @result.members.length.should.equal 2
  105. should.exist findMember("read-only-id")
  106. findMember("read-only-id").privileges.should.equal "readOnly"
  107. findMember("read-only-id").first_name.should.equal "Read"
  108. findMember("read-only-id").last_name.should.equal "Only"
  109. findMember("read-only-id").email.should.equal "read-only@sharelatex.com"
  110. should.exist findMember("read-write-id")
  111. findMember("read-write-id").privileges.should.equal "readAndWrite"
  112. findMember("read-write-id").first_name.should.equal "Read"
  113. findMember("read-write-id").last_name.should.equal "Write"
  114. findMember("read-write-id").email.should.equal "read-write@sharelatex.com"
  115. it "should include folders in the project", ->
  116. @result.rootFolder[0]._id.should.equal "root-folder-id"
  117. @result.rootFolder[0].name.should.equal ""
  118. @result.rootFolder[0].folders[0]._id.should.equal "sub-folder-id"
  119. @result.rootFolder[0].folders[0].name.should.equal "folder"
  120. it "should not duplicate folder contents", ->
  121. @result.rootFolder[0].docs.length.should.equal 0
  122. @result.rootFolder[0].fileRefs.length.should.equal 0
  123. it "should include files in the project", ->
  124. @result.rootFolder[0].folders[0].fileRefs[0]._id.should.equal "file-id"
  125. @result.rootFolder[0].folders[0].fileRefs[0].name.should.equal "image.png"
  126. should.not.exist @result.rootFolder[0].folders[0].fileRefs[0].created
  127. should.not.exist @result.rootFolder[0].folders[0].fileRefs[0].size
  128. it "should include docs in the project but not the lines", ->
  129. @result.rootFolder[0].folders[0].docs[0]._id.should.equal "doc-id"
  130. @result.rootFolder[0].folders[0].docs[0].name.should.equal "main.tex"
  131. should.not.exist @result.rootFolder[0].folders[0].docs[0].lines
  132. it 'should include invites', ->
  133. should.exist @result.invites
  134. @result.invites.should.deep.equal @invites
  135. describe "deletedByExternalDataSource", ->
  136. it "should set the deletedByExternalDataSource flag to false when it is not there", ->
  137. delete @project.deletedByExternalDataSource
  138. result = @handler.buildProjectModelView @project, @members
  139. result.deletedByExternalDataSource.should.equal false
  140. it "should set the deletedByExternalDataSource flag to false when it is false", ->
  141. result = @handler.buildProjectModelView @project, @members
  142. result.deletedByExternalDataSource.should.equal false
  143. it "should set the deletedByExternalDataSource flag to true when it is true", ->
  144. @project.deletedByExternalDataSource = true
  145. result = @handler.buildProjectModelView @project, @members
  146. result.deletedByExternalDataSource.should.equal true
  147. describe "features", ->
  148. beforeEach ->
  149. @owner.features =
  150. versioning: true
  151. collaborators: 3
  152. compileGroup:"priority"
  153. compileTimeout: 96
  154. @result = @handler.buildProjectModelView @project, @members
  155. it "should copy the owner features to the project", ->
  156. @result.features.versioning.should.equal @owner.features.versioning
  157. @result.features.collaborators.should.equal @owner.features.collaborators
  158. @result.features.compileGroup.should.equal @owner.features.compileGroup
  159. @result.features.compileTimeout.should.equal @owner.features.compileTimeout