DeletingADocumentTests.coffee 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. sinon = require "sinon"
  2. chai = require("chai")
  3. chai.should()
  4. MockTrackChangesApi = require "./helpers/MockTrackChangesApi"
  5. MockProjectHistoryApi = require "./helpers/MockProjectHistoryApi"
  6. MockWebApi = require "./helpers/MockWebApi"
  7. DocUpdaterClient = require "./helpers/DocUpdaterClient"
  8. DocUpdaterApp = require "./helpers/DocUpdaterApp"
  9. describe "Deleting a document", ->
  10. before (done) ->
  11. @lines = ["one", "two", "three"]
  12. @version = 42
  13. @update =
  14. doc: @doc_id
  15. op: [{
  16. i: "one and a half\n"
  17. p: 4
  18. }]
  19. v: @version
  20. @result = ["one", "one and a half", "two", "three"]
  21. sinon.spy MockTrackChangesApi, "flushDoc"
  22. sinon.spy MockProjectHistoryApi, "flushProject"
  23. DocUpdaterApp.ensureRunning(done)
  24. after ->
  25. MockTrackChangesApi.flushDoc.restore()
  26. MockProjectHistoryApi.flushProject.restore()
  27. describe "when the updated doc exists in the doc updater", ->
  28. before (done) ->
  29. [@project_id, @doc_id] = [DocUpdaterClient.randomId(), DocUpdaterClient.randomId()]
  30. sinon.spy MockWebApi, "setDocument"
  31. sinon.spy MockWebApi, "getDocument"
  32. MockWebApi.insertDoc @project_id, @doc_id, {lines: @lines, version: @version}
  33. DocUpdaterClient.preloadDoc @project_id, @doc_id, (error) =>
  34. throw error if error?
  35. DocUpdaterClient.sendUpdate @project_id, @doc_id, @update, (error) =>
  36. throw error if error?
  37. setTimeout () =>
  38. DocUpdaterClient.deleteDoc @project_id, @doc_id, (error, res, body) =>
  39. @statusCode = res.statusCode
  40. setTimeout done, 200
  41. , 200
  42. after ->
  43. MockWebApi.setDocument.restore()
  44. MockWebApi.getDocument.restore()
  45. it "should return a 204 status code", ->
  46. @statusCode.should.equal 204
  47. it "should send the updated document and version to the web api", ->
  48. MockWebApi.setDocument
  49. .calledWith(@project_id, @doc_id, @result, @version + 1)
  50. .should.equal true
  51. it "should need to reload the doc if read again", (done) ->
  52. MockWebApi.getDocument.called.should.equal.false
  53. DocUpdaterClient.getDoc @project_id, @doc_id, (error, res, doc) =>
  54. MockWebApi.getDocument
  55. .calledWith(@project_id, @doc_id)
  56. .should.equal true
  57. done()
  58. it "should flush track changes", ->
  59. MockTrackChangesApi.flushDoc.calledWith(@doc_id).should.equal true
  60. it "should flush project history", ->
  61. MockProjectHistoryApi.flushProject.calledWith(@project_id).should.equal true
  62. describe "when the doc is not in the doc updater", ->
  63. before (done) ->
  64. [@project_id, @doc_id] = [DocUpdaterClient.randomId(), DocUpdaterClient.randomId()]
  65. MockWebApi.insertDoc @project_id, @doc_id, {
  66. lines: @lines
  67. }
  68. sinon.spy MockWebApi, "setDocument"
  69. sinon.spy MockWebApi, "getDocument"
  70. DocUpdaterClient.deleteDoc @project_id, @doc_id, (error, res, body) =>
  71. @statusCode = res.statusCode
  72. setTimeout done, 200
  73. after ->
  74. MockWebApi.setDocument.restore()
  75. MockWebApi.getDocument.restore()
  76. it "should return a 204 status code", ->
  77. @statusCode.should.equal 204
  78. it "should not need to send the updated document to the web api", ->
  79. MockWebApi.setDocument.called.should.equal false
  80. it "should need to reload the doc if read again", (done) ->
  81. MockWebApi.getDocument.called.should.equal.false
  82. DocUpdaterClient.getDoc @project_id, @doc_id, (error, res, doc) =>
  83. MockWebApi.getDocument
  84. .calledWith(@project_id, @doc_id)
  85. .should.equal true
  86. done()
  87. it "should flush track changes", ->
  88. MockTrackChangesApi.flushDoc.calledWith(@doc_id).should.equal true
  89. it "should flush project history", ->
  90. MockProjectHistoryApi.flushProject.calledWith(@project_id).should.equal true