mirror of
https://github.com/overleaf/overleaf.git
synced 2024-12-04 21:14:40 -05:00
451 lines
13 KiB
CoffeeScript
451 lines
13 KiB
CoffeeScript
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
|