mirror of
https://github.com/overleaf/overleaf.git
synced 2025-04-08 12:41:13 +00:00
Merge pull request #1225 from sharelatex/spd-ensure-zip-file-project-name-valid
Ensure project names are valid when importing from zip GitOrigin-RevId: db36dde6d756e6577d7e89f9f50f76c40575a5f0
This commit is contained in:
parent
12004962fb
commit
16e1980b41
5 changed files with 31 additions and 3 deletions
services/web
app/coffee/Features
test
acceptance
unit/coffee/Uploads
|
@ -180,4 +180,4 @@ module.exports = ProjectDetailsHandler =
|
|||
return candidate unless allProjectNames.has(candidate)
|
||||
n += 1
|
||||
|
||||
return null
|
||||
return null
|
||||
|
|
|
@ -22,7 +22,7 @@ module.exports = ProjectUploadHandler =
|
|||
cb(error, _docPath, docContents)
|
||||
(_docPath, docContents, cb) ->
|
||||
docPath = _docPath
|
||||
proposedName = DocumentHelper.getTitleFromTexContent(docContents || '') || defaultName
|
||||
proposedName = ProjectDetailsHandler.fixProjectName(DocumentHelper.getTitleFromTexContent(docContents || '') || defaultName)
|
||||
ProjectDetailsHandler.generateUniqueName owner_id, proposedName, (error, name) ->
|
||||
cb(error, name)
|
||||
(name, cb) ->
|
||||
|
@ -42,7 +42,7 @@ module.exports = ProjectUploadHandler =
|
|||
], callback)
|
||||
|
||||
createProjectFromZipArchiveWithName: (owner_id, proposedName, zipPath, callback = (error, project) ->) ->
|
||||
ProjectDetailsHandler.generateUniqueName owner_id, proposedName, (error, name) =>
|
||||
ProjectDetailsHandler.generateUniqueName owner_id, ProjectDetailsHandler.fixProjectName(proposedName), (error, name) =>
|
||||
return callback(error) if error?
|
||||
ProjectCreationHandler.createBlankProject owner_id, name, (error, project) =>
|
||||
return callback(error) if error?
|
||||
|
|
|
@ -180,6 +180,30 @@ describe "ProjectStructureChanges", ->
|
|||
expect(project.name).to.equal @test_project_name
|
||||
done()
|
||||
|
||||
describe "uploading a project with an invalid name", ->
|
||||
before (done) ->
|
||||
MockDocUpdaterApi.clearProjectStructureUpdates()
|
||||
|
||||
zip_file = fs.createReadStream(Path.resolve(__dirname + '/../files/test_project_with_invalid_name.zip'))
|
||||
@test_project_match = /^bad[^\\]+name$/
|
||||
|
||||
req = @owner.request.post {
|
||||
uri: "project/new/upload",
|
||||
formData:
|
||||
qqfile: zip_file
|
||||
}, (error, res, body) =>
|
||||
throw error if error?
|
||||
if res.statusCode < 200 || res.statusCode >= 300
|
||||
throw new Error("failed to upload project #{res.statusCode}")
|
||||
@uploaded_project_id = JSON.parse(body).project_id
|
||||
done()
|
||||
|
||||
it "should set the project name from the zip contents", (done) ->
|
||||
ProjectGetter.getProject @uploaded_project_id, (error, project) =>
|
||||
expect(error).not.to.exist
|
||||
expect(project.name).to.match @test_project_match
|
||||
done()
|
||||
|
||||
describe "uploading a file", ->
|
||||
beforeEach (done) ->
|
||||
MockDocUpdaterApi.clearProjectStructureUpdates()
|
||||
|
|
Binary file not shown.
|
@ -36,6 +36,7 @@ describe "ProjectUploadManager", ->
|
|||
@ProjectRootDocManager.findRootDocFileFromDirectory = sinon.stub().callsArgWith(1, null, 'main.tex', @othername)
|
||||
@ProjectRootDocManager.setRootDocFromName = sinon.stub().callsArg(2)
|
||||
@DocumentHelper.getTitleFromTexContent = sinon.stub().returns(@othername)
|
||||
@ProjectDetailsHandler.fixProjectName = sinon.stub().returnsArg(0)
|
||||
|
||||
describe "createProjectFromZipArchive", ->
|
||||
describe "when the title can be read from the root document", ->
|
||||
|
@ -80,6 +81,9 @@ describe "ProjectUploadManager", ->
|
|||
it "should call the callback", ->
|
||||
@callback.calledWith(sinon.match.falsy, @project).should.equal true
|
||||
|
||||
it "should ensure the name is valid", ->
|
||||
@ProjectDetailsHandler.fixProjectName.called.should.equal true
|
||||
|
||||
describe "when the root document can't be determined", ->
|
||||
beforeEach (done) ->
|
||||
@ProjectRootDocManager.findRootDocFileFromDirectory = sinon.stub().callsArg(1)
|
||||
|
|
Loading…
Add table
Reference in a new issue