1
1
"use strict" ;
2
2
3
3
var tap = require ( 'tap' ) ;
4
-
4
+ var rewire = require ( "rewire" ) ;
5
5
var eol = require ( 'os' ) . EOL ;
6
6
var Pattern = require ( '../core/lib/object_factory' ) . Pattern ;
7
7
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 ( ) ;
8
26
9
27
function createFakePatternLab ( customProps ) {
10
28
var pl = {
@@ -24,13 +42,12 @@ function createFakePatternLab(customProps) {
24
42
rawTemplate : '' ,
25
43
markupOnly : '.markup-only'
26
44
}
27
- }
45
+ } ,
46
+ data : { }
28
47
} ;
29
48
return extend ( pl , customProps ) ;
30
49
}
31
50
32
- var ui = require ( '../core/lib/ui_builder' ) ( ) ;
33
-
34
51
tap . test ( 'isPatternExcluded - returns true when pattern filename starts with underscore' , function ( test ) {
35
52
//arrange
36
53
var patternlab = createFakePatternLab ( { } ) ;
@@ -249,10 +266,42 @@ tap.test('resetUIBuilderState - reset global objects', function (test) {
249
266
250
267
tap . test ( 'buildViewAllPages - adds viewall page for each type and subtype' , function ( test ) {
251
268
//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 ) ;
252
289
253
290
//act
291
+ var patterns = ui . buildViewAllPages ( mainPageHeadHtml , patternlab , styleguidePatterns ) ;
254
292
255
293
//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' ) ;
256
305
257
306
test . end ( ) ;
258
307
} ) ;
0 commit comments