From a380feab98f1496cc292b49135ac6f6613f2f914 Mon Sep 17 00:00:00 2001 From: Paulo Reis Date: Tue, 9 Oct 2018 11:12:59 +0100 Subject: [PATCH 1/4] Add brand variation id to the Project model. --- services/web/app/coffee/models/Project.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/services/web/app/coffee/models/Project.coffee b/services/web/app/coffee/models/Project.coffee index 00c2f1be52..3de93cc67f 100644 --- a/services/web/app/coffee/models/Project.coffee +++ b/services/web/app/coffee/models/Project.coffee @@ -36,6 +36,7 @@ ProjectSchema = new Schema deletedDocs : [DeletedDocSchema] deletedFiles : [DeletedFileSchema] imageName : { type: String } + brandVariationId : { type: String } track_changes : { type: Object } tokens : readOnly : { From 29787c42c566036820498d5bd7164764bcc9feb2 Mon Sep 17 00:00:00 2001 From: Paulo Reis Date: Tue, 9 Oct 2018 11:18:55 +0100 Subject: [PATCH 2/4] Read brand variation id from v1-crafted links; set brand variation id for projects created from v1 templates. --- .../Project/ProjectOptionsHandler.coffee | 11 +++++++ .../Templates/TemplatesController.coffee | 29 +++++++++++++------ .../project/editor/new_from_template.pug | 2 ++ 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/services/web/app/coffee/Features/Project/ProjectOptionsHandler.coffee b/services/web/app/coffee/Features/Project/ProjectOptionsHandler.coffee index 456b164683..a411075126 100644 --- a/services/web/app/coffee/Features/Project/ProjectOptionsHandler.coffee +++ b/services/web/app/coffee/Features/Project/ProjectOptionsHandler.coffee @@ -46,3 +46,14 @@ module.exports = else logger.err project_id:project_id, languageCode:languageCode, "tryed to set unsafe language" callback() + + setBrandVariationId: (project_id, brandVariationId, callback = ()->)-> + logger.log project_id:project_id, brandVariationId:brandVariationId, "setting the brand variation id" + if !brandVariationId? + return callback() + conditions = {_id:project_id} + update = {brandVariationId} + Project.update conditions, update, {}, (err)-> + if err? + logger.err err:err, "error setting brandVariationId" + callback() diff --git a/services/web/app/coffee/Features/Templates/TemplatesController.coffee b/services/web/app/coffee/Features/Templates/TemplatesController.coffee index 313194abe7..b82b02fbb6 100644 --- a/services/web/app/coffee/Features/Templates/TemplatesController.coffee +++ b/services/web/app/coffee/Features/Templates/TemplatesController.coffee @@ -33,6 +33,7 @@ module.exports = TemplatesController = data.name = req.query.templateName data.compiler = ENGINE_TO_COMPILER_MAP[req.query.latexEngine] data.mainFile = req.query.mainFile + data.brandVariationId = req.query.brandVariationId res.render path.resolve(__dirname, "../../../views/project/editor/new_from_template"), data createProjectFromV1Template: (req, res)-> @@ -55,6 +56,7 @@ module.exports = TemplatesController = mainFile: req.body.mainFile templateId: req.body.templateId templateVersionId: req.body.templateVersionId + brandVariationId: req.body.brandVariationId image: 'wl_texlive:2018.1' }, req, @@ -78,15 +80,16 @@ module.exports = TemplatesController = setCompiler project._id, options.compiler, -> setImage project._id, options.image, -> setMainFile project._id, options.mainFile, -> - fs.unlink dumpPath, -> - delete req.session.templateData - conditions = {_id:project._id} - update = { - fromV1TemplateId:options.templateId, - fromV1TemplateVersionId:options.templateVersionId - } - Project.update conditions, update, {}, (err)-> - res.redirect "/project/#{project._id}" + setBrandVariationId project._id, options.brandVariationId, -> + fs.unlink dumpPath, -> + delete req.session.templateData + conditions = {_id:project._id} + update = { + fromV1TemplateId:options.templateId, + fromV1TemplateVersionId:options.templateVersionId + } + Project.update conditions, update, {}, (err)-> + res.redirect "/project/#{project._id}" setCompiler = (project_id, compiler, callback)-> if compiler? @@ -105,3 +108,11 @@ setMainFile = (project_id, mainFile, callback) -> ProjectRootDocManager.setRootDocFromName project_id, mainFile, callback else callback() + +setBrandVariationId = (project_id, brandVariationId, callback) -> + logger.log brandVariationId, "brandVariationId" + if brandVariationId? + ProjectOptionsHandler.setBrandVariationId project_id, brandVariationId, callback + else + callback() + diff --git a/services/web/app/views/project/editor/new_from_template.pug b/services/web/app/views/project/editor/new_from_template.pug index b81d23904c..cc474b98db 100644 --- a/services/web/app/views/project/editor/new_from_template.pug +++ b/services/web/app/views/project/editor/new_from_template.pug @@ -25,3 +25,5 @@ block content input(type="hidden" name="templateName" value=name) input(type="hidden" name="compiler" value=compiler) input(type="hidden" name="mainFile" value=mainFile) + if brandVariationId + input(type="hidden" name="brandVariationId" value=brandVariationId) From 901fb0fc1e6e685bf0d8d14d152bc3c096149117 Mon Sep 17 00:00:00 2001 From: Paulo Reis Date: Wed, 10 Oct 2018 12:02:43 +0100 Subject: [PATCH 3/4] Unit test brand variation id. --- .../Project/ProjectOptionsHandler.coffee | 2 +- .../Templates/TemplatesController.coffee | 1 - .../Project/ProjectOptionsHandlerTests.coffee | 22 ++++++++- .../Templates/TemplatesControllerTests.coffee | 47 ++++++++++++++++++- 4 files changed, 67 insertions(+), 5 deletions(-) diff --git a/services/web/app/coffee/Features/Project/ProjectOptionsHandler.coffee b/services/web/app/coffee/Features/Project/ProjectOptionsHandler.coffee index a411075126..b9469e566e 100644 --- a/services/web/app/coffee/Features/Project/ProjectOptionsHandler.coffee +++ b/services/web/app/coffee/Features/Project/ProjectOptionsHandler.coffee @@ -49,7 +49,7 @@ module.exports = setBrandVariationId: (project_id, brandVariationId, callback = ()->)-> logger.log project_id:project_id, brandVariationId:brandVariationId, "setting the brand variation id" - if !brandVariationId? + if !brandVariationId? or brandVariationId == "" return callback() conditions = {_id:project_id} update = {brandVariationId} diff --git a/services/web/app/coffee/Features/Templates/TemplatesController.coffee b/services/web/app/coffee/Features/Templates/TemplatesController.coffee index b82b02fbb6..be770830fe 100644 --- a/services/web/app/coffee/Features/Templates/TemplatesController.coffee +++ b/services/web/app/coffee/Features/Templates/TemplatesController.coffee @@ -110,7 +110,6 @@ setMainFile = (project_id, mainFile, callback) -> callback() setBrandVariationId = (project_id, brandVariationId, callback) -> - logger.log brandVariationId, "brandVariationId" if brandVariationId? ProjectOptionsHandler.setBrandVariationId project_id, brandVariationId, callback else diff --git a/services/web/test/unit/coffee/Project/ProjectOptionsHandlerTests.coffee b/services/web/test/unit/coffee/Project/ProjectOptionsHandlerTests.coffee index 435dba9dbc..16121e0399 100644 --- a/services/web/test/unit/coffee/Project/ProjectOptionsHandlerTests.coffee +++ b/services/web/test/unit/coffee/Project/ProjectOptionsHandlerTests.coffee @@ -4,7 +4,7 @@ should = chai.should() modulePath = "../../../../app/js/Features/Project/ProjectOptionsHandler.js" SandboxedModule = require('sandboxed-module') -describe 'creating a project', -> +describe 'ProjectOptionsHandler', -> project_id = "4eecaffcbffa66588e000008" beforeEach -> @@ -77,3 +77,23 @@ describe 'creating a project', -> @projectModel.update.called.should.equal true done() @projectModel.update.args[0][3]() + + describe "setting the brandVariationId", -> + it 'should perform and update on mongo', (done)-> + @handler.setBrandVariationId project_id, "123", (err)=> + args = @projectModel.update.args[0] + args[0]._id.should.equal project_id + args[1].brandVariationId.should.equal "123" + done() + @projectModel.update.args[0][3]() + + + it 'should not perform and update on mongo if there is no brand variation', (done)-> + @handler.setBrandVariationId project_id, null, (err)=> + @projectModel.update.called.should.equal false + done() + + it 'should not perform and update on mongo if brand variation is an empty string', (done)-> + @handler.setBrandVariationId project_id, "", (err)=> + @projectModel.update.called.should.equal false + done() diff --git a/services/web/test/unit/coffee/Templates/TemplatesControllerTests.coffee b/services/web/test/unit/coffee/Templates/TemplatesControllerTests.coffee index 1e61b14c0b..59ad382e18 100644 --- a/services/web/test/unit/coffee/Templates/TemplatesControllerTests.coffee +++ b/services/web/test/unit/coffee/Templates/TemplatesControllerTests.coffee @@ -8,7 +8,7 @@ modulePath = '../../../../app/js/Features/Templates/TemplatesController' describe 'TemplatesController', -> - project_id = "213432" + @project_id = "213432" beforeEach -> @request = sinon.stub() @@ -20,11 +20,12 @@ describe 'TemplatesController', -> unlink : sinon.stub() createWriteStream : sinon.stub().returns(on:(_, cb)->cb()) } - @ProjectUploadManager = {createProjectFromZipArchive : sinon.stub().callsArgWith(3, null, {_id:project_id})} + @ProjectUploadManager = {createProjectFromZipArchive : sinon.stub().callsArgWith(3, null, {_id:@project_id})} @dumpFolder = "dump/path" @ProjectOptionsHandler = { setCompiler:sinon.stub().callsArgWith(2) setImageName:sinon.stub().callsArgWith(2) + setBrandVariationId:sinon.stub().callsArgWith(2) } @uuid = "1234" @ProjectRootDocManager = { @@ -83,3 +84,45 @@ describe 'TemplatesController', -> done() res = redirect:redirect @controller.createProjectFromV1Template @req, res + + it "should set project options based on payload data", (done)-> + @compiler = "pdflatex" + @mainFile = "main.tex" + @brandVariationId = "123" + + @req.body = + templateVersionId: 15 + templateId: 14231 + name: @templateName + compiler: @compiler + mainFile: @mainFile + brandVariationId: @brandVariationId + + redirect = => + @ProjectOptionsHandler.setCompiler.calledWith(@project_id, @compiler).should.equal true + @ProjectOptionsHandler.setBrandVariationId.calledWith(@project_id, @brandVariationId).should.equal true + @ProjectRootDocManager.setRootDocFromName.calledWith(@project_id, @mainFile).should.equal true + done() + res = redirect:redirect + @controller.createProjectFromV1Template @req, res + + it "should only set project options which are defined in the payload", (done)-> + @compiler = "pdflatex" + @brandVariationId = "123" + + @req.body = + templateVersionId: 15 + templateId: 14231 + name: @templateName + compiler: @compiler + brandVariationId: @brandVariationId + + redirect = => + # Payload doesn't refine a main file, so `setRootDocFromName` should not be called + @ProjectOptionsHandler.setCompiler.calledWith(@project_id, @compiler).should.equal true + @ProjectOptionsHandler.setBrandVariationId.calledWith(@project_id, @brandVariationId).should.equal true + @ProjectRootDocManager.setRootDocFromName.called.should.equal false + done() + res = redirect:redirect + @controller.createProjectFromV1Template @req, res + From b0802380ae701480c3d1b21b8ee42f256c34f7b8 Mon Sep 17 00:00:00 2001 From: Paulo Reis Date: Wed, 10 Oct 2018 14:09:18 +0100 Subject: [PATCH 4/4] Update tests --- .../unit/coffee/Templates/TemplatesControllerTests.coffee | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/services/web/test/unit/coffee/Templates/TemplatesControllerTests.coffee b/services/web/test/unit/coffee/Templates/TemplatesControllerTests.coffee index 59ad382e18..d0224a31e0 100644 --- a/services/web/test/unit/coffee/Templates/TemplatesControllerTests.coffee +++ b/services/web/test/unit/coffee/Templates/TemplatesControllerTests.coffee @@ -88,11 +88,11 @@ describe 'TemplatesController', -> it "should set project options based on payload data", (done)-> @compiler = "pdflatex" @mainFile = "main.tex" + @templateVersionId = 15 @brandVariationId = "123" @req.body = - templateVersionId: 15 - templateId: 14231 + templateVersionId: @templateVersionId name: @templateName compiler: @compiler mainFile: @mainFile @@ -108,11 +108,11 @@ describe 'TemplatesController', -> it "should only set project options which are defined in the payload", (done)-> @compiler = "pdflatex" + @templateVersionId = 15 @brandVariationId = "123" @req.body = - templateVersionId: 15 - templateId: 14231 + templateVersionId: @templateVersionId name: @templateName compiler: @compiler brandVariationId: @brandVariationId