GettingADocumentTests.coffee 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. sinon = require "sinon"
  2. chai = require("chai")
  3. chai.should()
  4. MockWebApi = require "./helpers/MockWebApi"
  5. DocUpdaterClient = require "./helpers/DocUpdaterClient"
  6. describe "Getting a document", ->
  7. describe "when the document is not loaded", ->
  8. before (done) ->
  9. [@project_id, @doc_id] = [DocUpdaterClient.randomId(), DocUpdaterClient.randomId()]
  10. MockWebApi.insertDoc @project_id, @doc_id, {
  11. lines: @lines = ["one", "two", "three"]
  12. }
  13. sinon.spy MockWebApi, "getDocument"
  14. DocUpdaterClient.getDoc @project_id, @doc_id, (error, res, @returnedDoc) => done()
  15. after ->
  16. MockWebApi.getDocument.restore()
  17. it "should load the document from the web API", ->
  18. MockWebApi.getDocument
  19. .calledWith(@project_id, @doc_id)
  20. .should.equal true
  21. it "should return the document lines", ->
  22. @returnedDoc.lines.should.deep.equal @lines
  23. it "should return the document at version 0", ->
  24. @returnedDoc.version.should.equal 0
  25. describe "when the document is already loaded", ->
  26. before (done) ->
  27. [@project_id, @doc_id] = [DocUpdaterClient.randomId(), DocUpdaterClient.randomId()]
  28. MockWebApi.insertDoc @project_id, @doc_id, {
  29. lines: @lines = ["one", "two", "three"]
  30. }
  31. DocUpdaterClient.preloadDoc @project_id, @doc_id, (error) =>
  32. throw error if error?
  33. sinon.spy MockWebApi, "getDocument"
  34. DocUpdaterClient.getDoc @project_id, @doc_id, (error, res, @returnedDoc) => done()
  35. after ->
  36. MockWebApi.getDocument.restore()
  37. it "should not load the document from the web API", ->
  38. MockWebApi.getDocument.called.should.equal false
  39. it "should return the document lines", ->
  40. @returnedDoc.lines.should.deep.equal @lines
  41. describe "when the request asks for some recent ops", ->
  42. before (done) ->
  43. [@project_id, @doc_id] = [DocUpdaterClient.randomId(), DocUpdaterClient.randomId()]
  44. MockWebApi.insertDoc @project_id, @doc_id, {
  45. lines: @lines = ["one", "two", "three"]
  46. }
  47. @updates = for v in [0..99]
  48. doc_id: @doc_id,
  49. op: [i: v.toString(), p: 0]
  50. v: v
  51. DocUpdaterClient.sendUpdates @project_id, @doc_id, @updates, (error) =>
  52. throw error if error?
  53. sinon.spy MockWebApi, "getDocument"
  54. DocUpdaterClient.getDocAndRecentOps @project_id, @doc_id, 90, (error, res, @returnedDoc) => done()
  55. after ->
  56. MockWebApi.getDocument.restore()
  57. it "should return the recent ops", ->
  58. @returnedDoc.ops.length.should.equal 10
  59. for update, i in @updates.slice(90, -1)
  60. @returnedDoc.ops[i].op.should.deep.equal update.op
  61. describe "when the document does not exist", ->
  62. before (done) ->
  63. [@project_id, @doc_id] = [DocUpdaterClient.randomId(), DocUpdaterClient.randomId()]
  64. DocUpdaterClient.getDoc @project_id, @doc_id, (error, res, doc) =>
  65. @statusCode = res.statusCode
  66. done()
  67. it "should return 404", ->
  68. @statusCode.should.equal 404
  69. describe "when the web api returns an error", ->
  70. before (done) ->
  71. [@project_id, @doc_id] = [DocUpdaterClient.randomId(), DocUpdaterClient.randomId()]
  72. sinon.stub MockWebApi, "getDocument", (project_id, doc_id, callback = (error, doc) ->) ->
  73. callback new Error("oops")
  74. DocUpdaterClient.getDoc @project_id, @doc_id, (error, res, doc) =>
  75. @statusCode = res.statusCode
  76. done()
  77. after ->
  78. MockWebApi.getDocument.restore()
  79. it "should return 500", ->
  80. @statusCode.should.equal 500