| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451 |
- async = require "async"
- expect = require("chai").expect
- sinon = require "sinon"
- mkdirp = require "mkdirp"
- ObjectId = require("mongojs").ObjectId
- Path = require "path"
- fs = require "fs"
- Settings = require "settings-sharelatex"
- _ = require "underscore"
- ProjectGetter = require "../../../app/js/Features/Project/ProjectGetter.js"
- MockDocStoreApi = require './helpers/MockDocstoreApi'
- MockFileStoreApi = require './helpers/MockFileStoreApi'
- request = require "./helpers/request"
- User = require "./helpers/User"
- describe "ProjectDuplicateNames", ->
- before (done) ->
- @owner = new User()
- @owner.login done
- @project = {}
- @callback = sinon.stub()
- describe "creating a project from the example template", ->
- before (done) ->
- @owner.createProject "example-project", {template: "example"}, (error, project_id) =>
- throw error if error?
- @example_project_id = project_id
- @owner.getProject project_id, (error, project) =>
- @project = project
- @mainTexDoc = _.find(project.rootFolder[0].docs, (doc) -> doc.name is 'main.tex')
- @refBibDoc = _.find(project.rootFolder[0].docs, (doc) -> doc.name is 'references.bib')
- @imageFile = _.find(project.rootFolder[0].fileRefs, (file) -> file.name is 'universe.jpg')
- @rootFolderId = project.rootFolder[0]._id.toString()
- # create a folder called 'testfolder'
- @owner.request.post {
- uri: "/project/#{@example_project_id}/folder"
- json:
- name: "testfolder"
- parent_folder_id: @rootFolderId
- }, (err, res, body) =>
- @testFolderId = body._id
- done()
- it "should create a project", ->
- expect(@project.rootFolder[0].docs.length).to.equal(2)
- expect(@project.rootFolder[0].fileRefs.length).to.equal(1)
- it "should create two docs in the docstore", ->
- docs = MockDocStoreApi.docs[@example_project_id]
- expect(Object.keys(docs).length).to.equal(2)
- it "should create one file in the filestore", ->
- files = MockFileStoreApi.files[@example_project_id]
- expect(Object.keys(files).length).to.equal(1)
- describe "for an existing doc", ->
- describe "trying to add a doc with the same name", ->
- before (done) ->
- @owner.request.post {
- uri: "/project/#{@example_project_id}/doc"
- json:
- name: "main.tex"
- parent_folder_id: @rootFolderId
- }, (err, res, body) =>
- @res = res
- done()
- it "should respond with 400 error status", ->
- expect(@res.statusCode).to.equal 400
- describe "trying to add a folder with the same name", ->
- before (done) ->
- @owner.request.post {
- uri: "/project/#{@example_project_id}/folder"
- json:
- name: "main.tex"
- parent_folder_id: @rootFolderId
- }, (err, res, body) =>
- @res = res
- done()
- it "should respond with 400 error status", ->
- expect(@res.statusCode).to.equal 400
- describe "trying to upload a file with the same name", ->
- before (done) ->
- @owner.request.post
- uri: "/project/#{@example_project_id}/upload"
- json: true
- qs:
- folder_id: @rootFolderId
- qqfilename: "main.tex"
- formData:
- qqfile:
- value: fs.createReadStream Path.resolve(__dirname + '/../files/1pixel.png')
- options:
- filename: 'main.tex',
- contentType: 'image/png'
- , (err, res, body) =>
- @body = body
- done()
- it "should respond with failure status", ->
- expect(@body.success).to.equal false
- describe "trying to add a folder with the same name", ->
- before (done) ->
- @owner.request.post {
- uri: "/project/#{@example_project_id}/folder"
- json:
- name: "main.tex"
- parent_folder_id: @rootFolderId
- }, (err, res, body) =>
- @res = res
- done()
- it "should respond with 400 error status", ->
- expect(@res.statusCode).to.equal 400
- describe "trying to upload a file with the same name", ->
- before (done) ->
- @owner.request.post
- uri: "/project/#{@example_project_id}/upload"
- json: true
- qs:
- folder_id: @rootFolderId
- qqfilename: "main.tex"
- formData:
- qqfile:
- value: fs.createReadStream Path.resolve(__dirname + '/../files/1pixel.png')
- options:
- filename: 'main.tex',
- contentType: 'image/png'
- , (err, res, body) =>
- @body = body
- done()
- it "should respond with failure status", ->
- expect(@body.success).to.equal false
- describe "for an existing file", ->
- describe "trying to add a doc with the same name", ->
- before (done) ->
- @owner.request.post {
- uri: "/project/#{@example_project_id}/doc"
- json:
- name: "universe.jpg"
- parent_folder_id: @rootFolderId
- }, (err, res, body) =>
- @res = res
- done()
- it "should respond with 400 error status", ->
- expect(@res.statusCode).to.equal 400
- describe "trying to add a folder with the same name", ->
- before (done) ->
- @owner.request.post {
- uri: "/project/#{@example_project_id}/folder"
- json:
- name: "universe.jpg"
- parent_folder_id: @rootFolderId
- }, (err, res, body) =>
- @res = res
- done()
- it "should respond with 400 error status", ->
- expect(@res.statusCode).to.equal 400
- describe "trying to upload a file with the same name", ->
- before (done) ->
- @owner.request.post
- uri: "/project/#{@example_project_id}/upload"
- json: true
- qs:
- folder_id: @rootFolderId
- qqfilename: "universe.jpg"
- formData:
- qqfile:
- value: fs.createReadStream Path.resolve(__dirname + '/../files/1pixel.png')
- options:
- filename: 'universe.jpg',
- contentType: 'image/jpeg'
- , (err, res, body) =>
- @body = body
- # update the image id because we have replaced the file
- @imageFile._id = @body.entity_id
- done()
- it "should succeed (overwriting the file)", ->
- expect(@body.success).to.equal true
- # at this point the @imageFile._id has changed
- describe "for an existing folder", ->
- describe "trying to add a doc with the same name", ->
- before (done) ->
- @owner.request.post {
- uri: "/project/#{@example_project_id}/doc"
- json:
- name: "testfolder"
- parent_folder_id: @rootFolderId
- }, (err, res, body) =>
- @res = res
- done()
- it "should respond with 400 error status", ->
- expect(@res.statusCode).to.equal 400
- describe "trying to add a folder with the same name", ->
- before (done) ->
- @owner.request.post {
- uri: "/project/#{@example_project_id}/folder"
- json:
- name: "testfolder"
- parent_folder_id: @rootFolderId
- }, (err, res, body) =>
- @res = res
- done()
- it "should respond with 400 error status", ->
- expect(@res.statusCode).to.equal 400
- describe "trying to upload a file with the same name", ->
- before (done) ->
- @owner.request.post
- uri: "/project/#{@example_project_id}/upload"
- json: true
- qs:
- folder_id: @rootFolderId
- qqfilename: "universe.jpg"
- formData:
- qqfile:
- value: fs.createReadStream Path.resolve(__dirname + '/../files/1pixel.png')
- options:
- filename: 'testfolder',
- contentType: 'image/jpeg'
- , (err, res, body) =>
- @body = body
- done()
- it "should respond with failure status", ->
- expect(@body.success).to.equal false
- describe "for an existing doc", ->
- describe "trying to rename a doc to the same name", ->
- before (done) ->
- @owner.request.post {
- uri: "/project/#{@example_project_id}/doc/#{@refBibDoc._id}/rename"
- json:
- name: "main.tex"
- }, (err, res, body) =>
- @res = res
- done()
- it "should respond with 400 error status", ->
- expect(@res.statusCode).to.equal 400
- describe "trying to rename a folder to the same name", ->
- before (done) ->
- @owner.request.post {
- uri: "/project/#{@example_project_id}/folder/#{@testFolderId}/rename"
- json:
- name: "main.tex"
- }, (err, res, body) =>
- @res = res
- done()
- it "should respond with 400 error status", ->
- expect(@res.statusCode).to.equal 400
- describe "trying to rename a file to the same name", ->
- before (done) ->
- @owner.request.post {
- uri: "/project/#{@example_project_id}/file/#{@imageFile._id}/rename"
- json:
- name: "main.tex"
- }, (err, res, body) =>
- @res = res
- done()
- it "should respond with failure status", ->
- expect(@res.statusCode).to.equal 400
- describe "for an existing file", ->
- describe "trying to rename a doc to the same name", ->
- before (done) ->
- @owner.request.post {
- uri: "/project/#{@example_project_id}/doc/#{@refBibDoc._id}/rename"
- json:
- name: "universe.jpg"
- }, (err, res, body) =>
- @res = res
- done()
- it "should respond with 400 error status", ->
- expect(@res.statusCode).to.equal 400
- describe "trying to rename a folder to the same name", ->
- before (done) ->
- @owner.request.post {
- uri: "/project/#{@example_project_id}/folder/#{@testFolderId}/rename"
- json:
- name: "universe.jpg"
- }, (err, res, body) =>
- @res = res
- done()
- it "should respond with 400 error status", ->
- expect(@res.statusCode).to.equal 400
- describe "trying to rename a file to the same name", ->
- before (done) ->
- @owner.request.post {
- uri: "/project/#{@example_project_id}/file/#{@imageFile._id}/rename"
- json:
- name: "universe.jpg"
- }, (err, res, body) =>
- @res = res
- done()
- it "should respond with failure status", ->
- expect(@res.statusCode).to.equal 400
- describe "for an existing folder", ->
- describe "trying to rename a doc to the same name", ->
- before (done) ->
- @owner.request.post {
- uri: "/project/#{@example_project_id}/doc/#{@refBibDoc._id}/rename"
- json:
- name: "testfolder"
- }, (err, res, body) =>
- @res = res
- done()
- it "should respond with 400 error status", ->
- expect(@res.statusCode).to.equal 400
- describe "trying to rename a folder to the same name", ->
- before (done) ->
- @owner.request.post {
- uri: "/project/#{@example_project_id}/folder/#{@testFolderId}/rename"
- json:
- name: "testfolder"
- }, (err, res, body) =>
- @res = res
- done()
- it "should respond with 400 error status", ->
- expect(@res.statusCode).to.equal 400
- describe "trying to rename a file to the same name", ->
- before (done) ->
- @owner.request.post {
- uri: "/project/#{@example_project_id}/file/#{@imageFile._id}/rename"
- json:
- name: "testfolder"
- }, (err, res, body) =>
- @res = res
- done()
- it "should respond with failure status", ->
- expect(@res.statusCode).to.equal 400
- describe "for an existing folder with a file with the same name", ->
- before (done) ->
- @owner.request.post {
- uri: "/project/#{@example_project_id}/doc"
- json:
- name: "main.tex"
- parent_folder_id: @testFolderId
- }, (err, res, body) =>
- @owner.request.post {
- uri: "/project/#{@example_project_id}/doc"
- json:
- name: "universe.jpg"
- parent_folder_id: @testFolderId
- }, (err, res, body) =>
- @owner.request.post {
- uri: "/project/#{@example_project_id}/folder"
- json:
- name: "otherFolder"
- parent_folder_id: @testFolderId
- }, (err, res, body) =>
- @subFolderId = body._id
- @owner.request.post {
- uri: "/project/#{@example_project_id}/folder"
- json:
- name: "otherFolder"
- parent_folder_id: @rootFolderId
- }, (err, res, body) =>
- @otherFolderId = body._id
- done()
- describe "trying to move a doc into the folder", ->
- before (done) ->
- @owner.request.post {
- uri: "/project/#{@example_project_id}/doc/#{@mainTexDoc._id}/move"
- json:
- folder_id: @testFolderId
- }, (err, res, body) =>
- @res = res
- done()
- it "should respond with 400 error status", ->
- expect(@res.statusCode).to.equal 400
- describe "trying to move a file into the folder", ->
- before (done) ->
- @owner.request.post {
- uri: "/project/#{@example_project_id}/file/#{@imageFile._id}/move"
- json:
- folder_id: @testFolderId
- }, (err, res, body) =>
- @res = res
- done()
- it "should respond with 400 error status", ->
- expect(@res.statusCode).to.equal 400
- describe "trying to move a folder into the folder", ->
- before (done) ->
- @owner.request.post {
- uri: "/project/#{@example_project_id}/folder/#{@otherFolderId}/move"
- json:
- folder_id: @testFolderId
- }, (err, res, body) =>
- @res = res
- done()
- it "should respond with 400 error status", ->
- expect(@res.statusCode).to.equal 400
- describe "trying to move a folder into a subfolder of itself", ->
- before (done) ->
- @owner.request.post {
- uri: "/project/#{@example_project_id}/folder/#{@testFolderId}/move"
- json:
- folder_id: @subFolderId
- }, (err, res, body) =>
- @res = res
- done()
- it "should respond with 400 error status", ->
- expect(@res.statusCode).to.equal 400
|