mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-11-13 21:53:43 +01: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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user