LeaveProjectTests.coffee 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. RealTimeClient = require "./helpers/RealTimeClient"
  2. MockDocUpdaterServer = require "./helpers/MockDocUpdaterServer"
  3. FixturesManager = require "./helpers/FixturesManager"
  4. async = require "async"
  5. describe "leaveProject", ->
  6. before (done) ->
  7. MockDocUpdaterServer.run done
  8. describe "with other clients in the project", ->
  9. before (done) ->
  10. async.series [
  11. (cb) =>
  12. FixturesManager.setUpProject {
  13. privilegeLevel: "owner"
  14. project: {
  15. name: "Test Project"
  16. }
  17. }, (e, {@project_id, @user_id}) => cb()
  18. (cb) =>
  19. @clientA = RealTimeClient.connect()
  20. @clientA.on "connectionAccepted", cb
  21. (cb) =>
  22. @clientB = RealTimeClient.connect()
  23. @clientB.on "connectionAccepted", cb
  24. @clientBDisconnectMessages = []
  25. @clientB.on "clientTracking.clientDisconnected", (data) =>
  26. @clientBDisconnectMessages.push data
  27. (cb) =>
  28. @clientA.emit "joinProject", project_id: @project_id, (error, @project, @privilegeLevel, @protocolVersion) =>
  29. cb(error)
  30. (cb) =>
  31. @clientB.emit "joinProject", project_id: @project_id, (error, @project, @privilegeLevel, @protocolVersion) =>
  32. cb(error)
  33. (cb) =>
  34. # leaveProject is called when the client disconnects
  35. @clientA.on "disconnect", () -> cb()
  36. @clientA.disconnect()
  37. (cb) =>
  38. # The API waits a little while before flushing changes
  39. setTimeout done, 1000
  40. ], done
  41. it "should emit a disconnect message to the room", ->
  42. @clientBDisconnectMessages.should.deep.equal [@clientA.socket.sessionid]
  43. it "should no longer list the client in connected users", (done) ->
  44. @clientB.emit "clientTracking.getConnectedUsers", (error, users) =>
  45. for user in users
  46. if user.client_id == @clientA.socket.sessionid
  47. throw "Expected clientA to not be listed in connected users"
  48. return done()
  49. it "should not flush the project to the document updater", ->
  50. MockDocUpdaterServer.deleteProject
  51. .calledWith(@project_id)
  52. .should.equal false
  53. describe "with no other clients in the project", ->
  54. before (done) ->
  55. async.series [
  56. (cb) =>
  57. FixturesManager.setUpProject {
  58. privilegeLevel: "owner"
  59. project: {
  60. name: "Test Project"
  61. }
  62. }, (e, {@project_id, @user_id}) => cb()
  63. (cb) =>
  64. @clientA = RealTimeClient.connect()
  65. @clientA.on "connect", cb
  66. (cb) =>
  67. @clientA.emit "joinProject", project_id: @project_id, (error, @project, @privilegeLevel, @protocolVersion) =>
  68. cb(error)
  69. (cb) =>
  70. # leaveProject is called when the client disconnects
  71. @clientA.on "disconnect", () -> cb()
  72. @clientA.disconnect()
  73. (cb) =>
  74. # The API waits a little while before flushing changes
  75. setTimeout done, 1000
  76. ], done
  77. it "should flush the project to the document updater", ->
  78. MockDocUpdaterServer.deleteProject
  79. .calledWith(@project_id)
  80. .should.equal true