RestoringFilesTest.coffee 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. async = require "async"
  2. expect = require("chai").expect
  3. _ = require 'underscore'
  4. ProjectGetter = require "../../../app/js/Features/Project/ProjectGetter.js"
  5. User = require "./helpers/User"
  6. MockProjectHistoryApi = require "./helpers/MockProjectHistoryApi"
  7. MockDocstoreApi = require "./helpers/MockDocstoreApi"
  8. MockFileStoreApi = require "./helpers/MockFileStoreApi"
  9. describe "RestoringFiles", ->
  10. before (done) ->
  11. @owner = new User()
  12. @owner.login (error) =>
  13. throw error if error?
  14. @owner.createProject "example-project", {template: "example"}, (error, @project_id) =>
  15. throw error if error?
  16. done()
  17. describe "restoring a text file", ->
  18. beforeEach (done) ->
  19. MockProjectHistoryApi.addOldFile(@project_id, 42, "foo.tex", "hello world, this is foo.tex!")
  20. @owner.request {
  21. method: "POST",
  22. url: "/project/#{@project_id}/restore_file",
  23. json:
  24. pathname: "foo.tex"
  25. version: 42
  26. }, (error, response, body) ->
  27. throw error if error?
  28. expect(response.statusCode).to.equal 204
  29. done()
  30. it "should have created a doc", (done) ->
  31. @owner.getProject @project_id, (error, project) =>
  32. throw error if error?
  33. doc = _.find project.rootFolder[0].docs, (doc) ->
  34. doc.name == 'foo.tex'
  35. doc = MockDocstoreApi.docs[@project_id][doc._id]
  36. expect(doc.lines).to.deep.equal [
  37. "hello world, this is foo.tex!"
  38. ]
  39. done()
  40. describe "restoring a binary file", ->
  41. beforeEach (done) ->
  42. MockProjectHistoryApi.addOldFile(@project_id, 42, "image.png", "Mock image.png content")
  43. @owner.request {
  44. method: "POST",
  45. url: "/project/#{@project_id}/restore_file",
  46. json:
  47. pathname: "image.png"
  48. version: 42
  49. }, (error, response, body) ->
  50. throw error if error?
  51. expect(response.statusCode).to.equal 204
  52. done()
  53. it "should have created a file", (done) ->
  54. @owner.getProject @project_id, (error, project) =>
  55. throw error if error?
  56. file = _.find project.rootFolder[0].fileRefs, (file) ->
  57. file.name == 'image.png'
  58. file = MockFileStoreApi.files[@project_id][file._id]
  59. expect(file.content).to.equal "Mock image.png content"
  60. done()
  61. describe "restoring to a directory that exists", ->
  62. beforeEach (done) ->
  63. MockProjectHistoryApi.addOldFile(@project_id, 42, "foldername/foo2.tex", "hello world, this is foo-2.tex!")
  64. @owner.request.post {
  65. uri: "project/#{@project_id}/folder",
  66. json:
  67. name: 'foldername'
  68. }, (error, response, body) =>
  69. throw error if error?
  70. expect(response.statusCode).to.equal 200
  71. @owner.request {
  72. method: "POST",
  73. url: "/project/#{@project_id}/restore_file",
  74. json:
  75. pathname: "foldername/foo2.tex"
  76. version: 42
  77. }, (error, response, body) ->
  78. throw error if error?
  79. expect(response.statusCode).to.equal 204
  80. done()
  81. it "should have created the doc in the named folder", (done) ->
  82. @owner.getProject @project_id, (error, project) =>
  83. throw error if error?
  84. folder = _.find project.rootFolder[0].folders, (folder) ->
  85. folder.name == 'foldername'
  86. doc = _.find folder.docs, (doc) ->
  87. doc.name == 'foo2.tex'
  88. doc = MockDocstoreApi.docs[@project_id][doc._id]
  89. expect(doc.lines).to.deep.equal [
  90. "hello world, this is foo-2.tex!"
  91. ]
  92. done()
  93. describe "restoring to a directory that no longer exists", ->
  94. beforeEach (done) ->
  95. MockProjectHistoryApi.addOldFile(@project_id, 42, "nothere/foo3.tex", "hello world, this is foo-3.tex!")
  96. @owner.request {
  97. method: "POST",
  98. url: "/project/#{@project_id}/restore_file",
  99. json:
  100. pathname: "nothere/foo3.tex"
  101. version: 42
  102. }, (error, response, body) ->
  103. throw error if error?
  104. expect(response.statusCode).to.equal 204
  105. done()
  106. it "should have created the doc in the root folder", (done) ->
  107. @owner.getProject @project_id, (error, project) =>
  108. throw error if error?
  109. doc = _.find project.rootFolder[0].docs, (doc) ->
  110. doc.name == 'foo3.tex'
  111. doc = MockDocstoreApi.docs[@project_id][doc._id]
  112. expect(doc.lines).to.deep.equal [
  113. "hello world, this is foo-3.tex!"
  114. ]
  115. done()
  116. describe "restoring to a filename that already exists", ->
  117. it "should have created the file with a timestamp appended", ->
  118. beforeEach (done) ->
  119. MockProjectHistoryApi.addOldFile(@project_id, 42, "main.tex", "hello world, this is main.tex!")
  120. @owner.request {
  121. method: "POST",
  122. url: "/project/#{@project_id}/restore_file",
  123. json:
  124. pathname: "main.tex"
  125. version: 42
  126. }, (error, response, body) ->
  127. throw error if error?
  128. expect(response.statusCode).to.equal 204
  129. done()
  130. it "should have created the doc in the root folder", (done) ->
  131. @owner.getProject @project_id, (error, project) =>
  132. throw error if error?
  133. doc = _.find project.rootFolder[0].docs, (doc) ->
  134. doc.name.match(/main \(Restored on/)
  135. expect(doc).to.exist
  136. doc = MockDocstoreApi.docs[@project_id][doc._id]
  137. expect(doc.lines).to.deep.equal [
  138. "hello world, this is main.tex!"
  139. ]
  140. done()