overleaf/services/web/test/acceptance/coffee/ProjectDuplicateNameTests.coffee
2018-04-09 12:05:08 +01:00

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