11"use strict" ;
22
33var tap = require ( 'tap' ) ;
4-
4+ var rewire = require ( "rewire" ) ;
55var eol = require ( 'os' ) . EOL ;
66var Pattern = require ( '../core/lib/object_factory' ) . Pattern ;
77var 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
927function 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-
3451tap . 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
250267tap . 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