Skip to content

Commit f3d4ba4

Browse files
committed
do not short-circuit viewall page building when encountering a flatpattern
closes #549
1 parent 23ea9e3 commit f3d4ba4

File tree

4 files changed

+58
-9
lines changed

4 files changed

+58
-9
lines changed

core/lib/patternlab.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* patternlab-node - v2.6.1 - 2016
2+
* patternlab-node - v2.6.2 - 2016
33
*
44
* Brian Muenzenmeyer, Geoff Pursell, and the web community.
55
* Licensed under the MIT license.

core/lib/ui_builder.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ var fs = require('fs-extra');
66
var ae = require('./annotation_exporter');
77
var of = require('./object_factory');
88
var Pattern = of.Pattern;
9-
var pa = require('./pattern_assembler');
10-
var pattern_assembler = new pa();
9+
var pattern_assembler = require('./pattern_assembler')();
1110
var plutils = require('./utilities');
1211
var eol = require('os').EOL;
1312
var _ = require('lodash');
@@ -640,7 +639,7 @@ var ui_builder = function () {
640639
resetUIBuilderState(patternlab);
641640
},
642641
buildViewAllPages: function (mainPageHeadHtml, patternlab, styleguidePatterns) {
643-
buildViewAllPages(mainPageHeadHtml, patternlab, styleguidePatterns);
642+
return buildViewAllPages(mainPageHeadHtml, patternlab, styleguidePatterns);
644643
}
645644
};
646645

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "patternlab-node",
33
"description": "Pattern Lab is a collection of tools to help you create atomic design systems. This is the node command line interface (CLI).",
4-
"version": "2.6.1",
4+
"version": "2.6.2",
55
"main": "./core/lib/patternlab.js",
66
"dependencies": {
77
"diveSync": "^0.3.0",
@@ -17,6 +17,7 @@
1717
},
1818
"devDependencies": {
1919
"eslint": "^3.5.0",
20+
"rewire": "^2.5.2",
2021
"tap": "^7.1.2"
2122
},
2223
"keywords": [

test/ui_builder_tests.js

+53-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,28 @@
11
"use strict";
22

33
var tap = require('tap');
4-
4+
var rewire = require("rewire");
55
var eol = require('os').EOL;
66
var Pattern = require('../core/lib/object_factory').Pattern;
77
var extend = require('util')._extend;
8+
var uiModule = rewire('../core/lib/ui_builder');
9+
10+
//set up a global mocks - we don't want to be writing/rendering any files right now
11+
var fsMock = {
12+
outputFileSync: function (path, data, cb) { }
13+
};
14+
15+
var patternAssemblerMock = {
16+
renderPattern: function (template, data, partials) { return ''; }
17+
};
18+
19+
//set our mocks in place of usual require()
20+
uiModule.__set__({
21+
'fs': fsMock,
22+
'pattern_assembler': patternAssemblerMock
23+
});
24+
25+
var ui = uiModule();
826

927
function createFakePatternLab(customProps) {
1028
var pl = {
@@ -24,13 +42,12 @@ function createFakePatternLab(customProps) {
2442
rawTemplate: '',
2543
markupOnly: '.markup-only'
2644
}
27-
}
45+
},
46+
data: {}
2847
};
2948
return extend(pl, customProps);
3049
}
3150

32-
var ui = require('../core/lib/ui_builder')();
33-
3451
tap.test('isPatternExcluded - returns true when pattern filename starts with underscore', function (test) {
3552
//arrange
3653
var patternlab = createFakePatternLab({});
@@ -249,10 +266,42 @@ tap.test('resetUIBuilderState - reset global objects', function (test) {
249266

250267
tap.test('buildViewAllPages - adds viewall page for each type and subtype', function (test) {
251268
//arrange
269+
let mainPageHeadHtml = '<head></head>';
270+
let patternlab = createFakePatternLab({
271+
patterns: [],
272+
patternGroups: {},
273+
subtypePatterns: {}
274+
});
275+
276+
patternlab.patterns.push(
277+
//this flat pattern is found and causes trouble for the rest of the crew
278+
new Pattern('00-test/foo.mustache'),
279+
new Pattern('patternType1/patternSubType1/blue.mustache'),
280+
new Pattern('patternType1/patternSubType1/red.mustache'),
281+
new Pattern('patternType1/patternSubType1/yellow.mustache'),
282+
new Pattern('patternType1/patternSubType2/black.mustache'),
283+
new Pattern('patternType1/patternSubType2/grey.mustache'),
284+
new Pattern('patternType1/patternSubType2/white.mustache')
285+
);
286+
ui.resetUIBuilderState(patternlab);
287+
288+
let styleguidePatterns = ui.groupPatterns(patternlab);
252289

253290
//act
291+
var patterns = ui.buildViewAllPages(mainPageHeadHtml, patternlab, styleguidePatterns);
254292

255293
//assert
294+
//this was a nuanced one. buildViewAllPages() had return false; statements
295+
//within _.forOwn(...) loops, causing premature termination of the entire loop
296+
//when what was intended was a continue
297+
//we expect 8 here because:
298+
// - foo.mustache is flat and therefore does not have a viewall page
299+
// - the colors.mustache files make 6
300+
// - patternSubType1 and patternSubType2 make 8
301+
//while most of that heavy lifting occurs inside groupPatterns and not buildViewAllPages,
302+
//it's important to ensure that this method does not get prematurely terminated
303+
//we choose to do that by checking it's return number of patterns
304+
test.equals(patterns.length, 8, '2 viewall pages should be added');
256305

257306
test.end();
258307
});

0 commit comments

Comments
 (0)