project.coffee 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. define [
  2. "libs/chai"
  3. "models/Project"
  4. "models/ProjectMemberList"
  5. "models/User"
  6. "tests/unit/helpers"
  7. "libs/sinon"
  8. ], (chai, Project, ProjectMemberList, User, Helpers) ->
  9. should = chai.should()
  10. describe "Project", ->
  11. beforeEach ->
  12. @socket = new Helpers.SocketIoMock()
  13. describe "parsing", ->
  14. beforeEach ->
  15. @socket.on "setProjectName", @setProjectName = sinon.spy()
  16. @socket.on "setPublicAccessLevel", @setPublicAccessLevel = sinon.spy()
  17. @socket.on "setCompiler", @setCompiler = sinon.spy()
  18. @socket.on "setRootDoc", @setRootDoc = sinon.spy()
  19. @project = new Project {
  20. _id : "project-1"
  21. rootDoc_id : "root-doc-id"
  22. name : "Project Name"
  23. publicAccesLevel : "readOnly"
  24. owner:
  25. _id : 1
  26. email : "owner@example.com"
  27. privileges : "owner"
  28. members : [{
  29. _id : 2
  30. email : "readonly@example.com"
  31. privileges : "readOnly"
  32. },
  33. {
  34. _id : 3
  35. email : "readwrite@example.com"
  36. privileges : "readAndWrite"
  37. }]
  38. features:
  39. versioning: true
  40. collaborators: 3
  41. rootFolder: [
  42. _id: "root-folder-id"
  43. name: "root-folder"
  44. docs: []
  45. folders: []
  46. fileRefs: []
  47. ]
  48. }, {
  49. parse: true
  50. }
  51. @project.set "ide", socket: @socket
  52. it "should set the id", ->
  53. @project.id.should.equal "project-1"
  54. it "should set the name without calling socket.setProjectName", ->
  55. @project.get("name").should.equal "Project Name"
  56. @setProjectName.called.should.equal false
  57. it "should set the public access level without called socket.setPublicAccessLevel", ->
  58. @project.get("publicAccesLevel").should.equal "readOnly"
  59. @setPublicAccessLevel.called.should.equal false
  60. it "should create a collection of collaborators", ->
  61. should.exist @project.get("members")
  62. (@project.get("members") instanceof ProjectMemberList).should.equal true
  63. members = @project.get("members").models
  64. members[0].id.should.equal 1
  65. members[0].get("email").should.equal "owner@example.com"
  66. members[0].get("privileges").should.equal "owner"
  67. members[1].id.should.equal 2
  68. members[1].get("email").should.equal "readonly@example.com"
  69. members[1].get("privileges").should.equal "readOnly"
  70. members[2].id.should.equal 3
  71. members[2].get("email").should.equal "readwrite@example.com"
  72. members[2].get("privileges").should.equal "readAndWrite"
  73. it "should create an owner model", ->
  74. should.exist @project.get("owner")
  75. (@project.get("owner") instanceof User).should.equal true
  76. @project.get("owner").get("privileges").should.equal "owner"
  77. it "should include the features", ->
  78. @project.get("features").should.deep.equal
  79. versioning: true
  80. collaborators: 3
  81. it "should set the rootDoc_id without calling socket.setRootDoc", ->
  82. @project.get("rootDoc_id").should.equal "root-doc-id"
  83. @setRootDoc.called.should.equal false
  84. describe "updating the root document", ->
  85. beforeEach ->
  86. @project = new Project
  87. id: "project-1",
  88. rootDoc_id: "old-root-doc-id"
  89. @project.set "ide", socket: @socket
  90. it "should call socket.setRootDoc when the root doc is changed", ->
  91. @socket.on "setRootDoc", @setRootDoc = sinon.spy()
  92. @project.set("rootDoc_id", "new-root-doc-id")
  93. @setRootDoc.calledWith("new-root-doc-id").should.equal true
  94. it "should update the root doc when socket.rootDocUpdated is called", ->
  95. @socket.emit "rootDocUpdated", "new-root-doc-id"
  96. @project.get("rootDoc_id").should.equal "new-root-doc-id"
  97. describe "updating the compiler the project uses", ->
  98. beforeEach ->
  99. @project = new Project
  100. id : "project-1",
  101. compiler : "latex"
  102. @project.set "ide", socket: @socket
  103. it "should call socket.setCompiler when the compiler is changed", ->
  104. @socket.on "setCompiler", @setCompiler = sinon.spy()
  105. @project.set("compiler", "xetex")
  106. @setCompiler.calledWith("xetex").should.equal true
  107. it "should update the compiler when socket.compilerUpdated is called", ->
  108. @socket.emit "compilerUpdated", "xetex"
  109. @project.get("compiler").should.equal "xetex"
  110. describe "updating the project's name", ->
  111. beforeEach ->
  112. @project = new Project
  113. id : "project-1",
  114. name : "Old Name"
  115. @project.set "ide", socket: @socket
  116. it "should call socket.setProjectName when the name is changed", ->
  117. @socket.on "setProjectName", @setProjectName = sinon.spy()
  118. @project.set("name", "New Name")
  119. @setProjectName.calledWith(window.window_id, "New Name").should.equal true
  120. it "should update the name when socket.projectNameUpdated is called", ->
  121. @socket.emit "projectNameUpdated", "window-id-2", "New Name"
  122. @project.get("name").should.equal "New Name"
  123. describe "updating the project's public access level", ->
  124. beforeEach ->
  125. @project = new Project
  126. id : "project-1",
  127. publicAccesLevel : "readOnly"
  128. @project.set "ide", socket: @socket
  129. it "should call socket.setPublicAccessLevel when the level is changed", ->
  130. @socket.on "setPublicAccessLevel", @setPublicAccessLevel = sinon.spy()
  131. @project.set("publicAccesLevel", "readAndWrite")
  132. @setPublicAccessLevel.calledWith("readAndWrite").should.equal true
  133. it "should update the level when socket.publicAccessLevelUpdated is called", ->
  134. @socket.emit "publicAccessLevelUpdated", "readAndWrite"
  135. @project.get("publicAccesLevel").should.equal "readAndWrite"