From c0c74f9866f52da942fcfea16518016ddbdc6cb5 Mon Sep 17 00:00:00 2001 From: gregorybesson Date: Sat, 17 Dec 2016 14:23:37 +0100 Subject: [PATCH] enhancement: The way we detect Abe as tags (not inside a html attribute) has been widely improved. Adding Unit tests to cover existing and new cases --- package.json | 1 + src/cli/cms/data/regex.js | 1 + src/cli/cms/templates/prepare.js | 11 +++++--- test/cms/templates/prepare.js | 28 +++++++++++++++++-- test/{manager.js => core/manager/Manager.js} | 20 ++++++------- .../templates/prepare-tag-nohtml.html | 17 +++++++++++ 6 files changed, 62 insertions(+), 16 deletions(-) rename test/{manager.js => core/manager/Manager.js} (72%) create mode 100644 test/fixtures/templates/prepare-tag-nohtml.html diff --git a/package.json b/package.json index a52197a9..905ac522 100644 --- a/package.json +++ b/package.json @@ -95,6 +95,7 @@ "request": "^2.69.0", "smartcrop-cli": "^1.0.2", "smtp-server": "^1.11.1", + "striptags": "^2.1.1", "uuid": "^3.0.0", "watch": "^1.0.1", "which": "^1.2.11", diff --git a/src/cli/cms/data/regex.js b/src/cli/cms/data/regex.js index 7c16c1a0..56f01ff9 100755 --- a/src/cli/cms/data/regex.js +++ b/src/cli/cms/data/regex.js @@ -1,6 +1,7 @@ export let abeTag = /({{abe.*?[\s\S].*?}})/g // export let abePattern = /[^"']({{abe.*?type=[\'|\"][text|rich|textarea]+[\'|\"][\s\S].*?}})/g +export let abeAsTagPattern = /({{abe.*?type=[\'|\"][text|rich|textarea]+[\'|\"][\s\S].*?}})/g // This pattern finds all abe tags enclosed in a HTML tag attribute // export let abeAsAttributePattern = /( [A-Za-z0-9\-\_]+=["|']{1}{{abe.*?}})/g; // export let abeAsAttributePattern = /( [A-Za-z0-9\-\_]+=["|']{1})(.*?)({{abe.*?}})/g diff --git a/src/cli/cms/templates/prepare.js b/src/cli/cms/templates/prepare.js index 326f8c4f..a722238a 100755 --- a/src/cli/cms/templates/prepare.js +++ b/src/cli/cms/templates/prepare.js @@ -1,4 +1,5 @@ import Handlebars from 'handlebars' +import stripTags from 'stripTags' import { cmsData @@ -19,23 +20,24 @@ export function addAbeDataAttrForHtmlTag(template) { var match var key var getattr + var newTemplate = template while (match = cmsData.regex.abePattern.exec(template)) { key = cmsData.regex.getAttr(match, 'key') - if (cmsData.regex.isSingleAbe(match, template)) { + if (cmsData.regex.isSingleAbe(match, newTemplate)) { getattr = key.replace(/\./g, '-') } else { getattr = key.replace('.', '[index].') } - template = template.replace( + newTemplate = newTemplate.replace( cmsData.regex.escapeTextToRegex(match[0], 'g'), ' data-abe-' + cmsData.regex.validDataAbe(getattr) + '="' + getattr + '" ' + match[0] ) } - return template + return newTemplate } export function addHasAbeAttr(text) { @@ -198,7 +200,8 @@ export function addAbeSourceComment(template, json) { */ export function addAbeHtmlTagBetweenAbeTags(template) { var match - while (match = cmsData.regex.abePattern.exec(template)) { + var templateNoDom = stripTags(template) + while (match = cmsData.regex.abeAsTagPattern.exec(templateNoDom)) { template = template.replace(cmsData.regex.escapeTextToRegex(match[1], 'g'), '' + match[1].trim() + '') } diff --git a/test/cms/templates/prepare.js b/test/cms/templates/prepare.js index 3cf6cadb..0c16dc3a 100644 --- a/test/cms/templates/prepare.js +++ b/test/cms/templates/prepare.js @@ -29,7 +29,8 @@ describe('cmsTemplates.prepare', function() { source: fse.readFileSync(path.join(process.cwd(), 'test', 'fixtures', 'templates', 'prepare-tag-abe-source.html'), 'utf-8'), each: fse.readFileSync(path.join(process.cwd(), 'test', 'fixtures', 'templates', 'prepare-tag-abe-each.html'), 'utf-8'), eachMultiple: fse.readFileSync(path.join(process.cwd(), 'test', 'fixtures', 'templates', 'prepare-tag-abe-each-multiple.html'), 'utf-8'), - rawHandlebar: fse.readFileSync(path.join(process.cwd(), 'test', 'fixtures', 'templates', 'prepare-raw-handlebars.html'), 'utf-8') + rawHandlebar: fse.readFileSync(path.join(process.cwd(), 'test', 'fixtures', 'templates', 'prepare-raw-handlebars.html'), 'utf-8'), + noHtml: fse.readFileSync(path.join(process.cwd(), 'test', 'fixtures', 'templates', 'prepare-tag-nohtml.html'), 'utf-8') } done() @@ -45,7 +46,23 @@ describe('cmsTemplates.prepare', function() { // test var template = cmsTemplates.prepare.addAbeDataAttrForHtmlTag(this.fixture.text) - chai.expect(template.indexOf('data-abe-')).to.be.above(-1); + chai.expect(template.indexOf('')).to.be.above(-1); + + template = cmsTemplates.prepare.addAbeDataAttrForHtmlTag(this.fixture.each) + chai.expect(template.indexOf('data-abe-test[index].title="test[index].title"')).to.be.above(-1) + + // + try{ + template = cmsTemplates.prepare.addAbeHtmlTagBetweenAbeTags(this.fixture.noHtml) + console.log('ok') + template = cmsTemplates.prepare.addAbeDataAttrForHtmlTag(template) + } catch (e) { + console.log(e.stack) + } + chai.expect(template.indexOf('"')).to.be.above(-1) + chai.expect(template.indexOf('{{abe type="text" key="text2" desc="name"}}')).to.be.above(-1) + chai.expect(template.indexOf('"{{abe type="text" key="text3" desc="name"}}"')).to.be.above(-1) }); /** @@ -134,6 +151,13 @@ describe('cmsTemplates.prepare', function() { var template = cmsTemplates.prepare.addAbeHtmlTagBetweenAbeTags(this.fixture.text) chai.expect(template.indexOf('{{')).to.be.above(-1); chai.expect(template.indexOf('}}')).to.be.above(-1); + + template = cmsTemplates.prepare.addAbeHtmlTagBetweenAbeTags(this.fixture.noHtml) + chai.expect(template.indexOf('"lat": "{{abe type="text" key="stores.lat" desc="lat"}}"')).to.be.above(-1) + chai.expect(template.indexOf('{{abe type="text" key="stores2.lat" desc="lat"}}')).to.be.above(-1) + chai.expect(template.indexOf('{{abe type="text" key="text2" desc="name"}}')).to.be.above(-1) + chai.expect(template.indexOf('"{{abe type="text" key="text3" desc="name"}}"')).to.be.above(-1) + }); /** diff --git a/test/manager.js b/test/core/manager/Manager.js similarity index 72% rename from test/manager.js rename to test/core/manager/Manager.js index 86b6d68c..978b69c9 100644 --- a/test/manager.js +++ b/test/core/manager/Manager.js @@ -1,13 +1,13 @@ var chai = require('chai'); var path = require('path'); -var Manager = require('../src/cli').Manager -var config = require('../src/cli').config -var cmsOperations = require('../src/cli').cmsOperations +var Manager = require('../../../src/cli').Manager +var config = require('../../../src/cli').config +var cmsOperations = require('../../../src/cli').cmsOperations config.set({root: __dirname + '/fixtures/'}) -var cmsData = require('../src/cli').cmsData; -var Manager = require('../src/cli').Manager; +var cmsData = require('../../../src/cli').cmsData; +var Manager = require('../../../src/cli').Manager; var fse = require('fs-extra'); describe('Manager', function() { @@ -16,9 +16,9 @@ describe('Manager', function() { .then(function () { this.fixture = { - tag: fse.readFileSync(path.join(__dirname, 'fixtures', 'templates', 'article.html'), 'utf8'), - jsonArticle: fse.readJsonSync(path.join(__dirname, 'fixtures', 'files', 'article-4.json')), - jsonArticle1: fse.readJsonSync(path.join(__dirname, 'fixtures', 'data', 'article-1.json')) + tag: fse.readFileSync(path.join(process.cwd(), 'test', 'fixtures', 'templates', 'article.html'), 'utf8'), + jsonArticle: fse.readJsonSync(path.join(process.cwd(), 'test', 'fixtures', 'files', 'article-4.json')), + jsonArticle1: fse.readJsonSync(path.join(process.cwd(), 'test', 'fixtures', 'data', 'article-1.json')) } done() @@ -28,14 +28,14 @@ describe('Manager', function() { it('getStructureAndTemplates()', function() { const data = Manager.instance.getStructureAndTemplates() chai.assert.equal(data['templates'][0].name, 'article-data-arrayinline', 'failed !') - chai.assert.equal(data['templates'].length, 24, 'failed !') + chai.assert.equal(data['templates'].length, 25, 'failed !') }); it('updateStructureAndTemplates()', function() { Manager.instance.updateStructureAndTemplates() const data = Manager.instance.getStructureAndTemplates() chai.assert.equal(data['templates'][0].name, 'article-data-arrayinline', 'failed !') - chai.assert.equal(data['templates'].length, 24, 'failed !') + chai.assert.equal(data['templates'].length, 25, 'failed !') }); it('getList()', function() { diff --git a/test/fixtures/templates/prepare-tag-nohtml.html b/test/fixtures/templates/prepare-tag-nohtml.html new file mode 100644 index 00000000..4341f12c --- /dev/null +++ b/test/fixtures/templates/prepare-tag-nohtml.html @@ -0,0 +1,17 @@ +[ +{{#each stores}} + { + "name": "{{abe type="text" key="stores.name" desc="name"}}", + "lat": "{{abe type="text" key="stores.lat" desc="lat"}}" + }, +{{/each}} +] + +{{#each stores2}} + {{abe type="text" key="stores2.name" desc="name"}}
+ {{abe type="text" key="stores2.lat" desc="lat"}}
+ {{abe type="text" key="text" desc="lat"}}
+{{/each}} + +{{abe type="text" key="text2" desc="name"}} +"{{abe type="text" key="text3" desc="name"}}" \ No newline at end of file