Skip to content

Commit f5b60b2

Browse files
committed
feat(uikits): additional test coverage
1 parent a1b6bf2 commit f5b60b2

File tree

2 files changed

+93
-42
lines changed

2 files changed

+93
-42
lines changed

packages/core/src/lib/loaduikits.js

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,31 +34,37 @@ const readModuleFile = (kit, subPath) => {
3434
);
3535
};
3636

37+
/**
38+
* Loads uikits, connecting configuration and installed modules
39+
* [1] Looks in node_modules for uikits.
40+
* [2] Only continue if uikit is enabled in patternlab-config.json
41+
* [3] Reads files from uikit that apply to every template
42+
* @param {object} patternlab
43+
*/
3744
module.exports = patternlab => {
3845
const paths = patternlab.config.paths;
3946

40-
// load all ui kits mentioned in the config, if they are enabled
41-
const uikits = findModules(nodeModulesPath, isUIKitModule);
47+
const uikits = findModules(nodeModulesPath, isUIKitModule); // [1]
4248

43-
// add them to the patternlab object for later iteration
4449
uikits.forEach(kit => {
45-
const configEntry = _.find(patternlab.config.uikits, {
50+
const configEntry = _.find(_.filter(patternlab.config.uikits, 'enabled'), {
4651
name: `uikit-${kit.name}`,
47-
});
52+
}); // [2]
4853

4954
if (!configEntry) {
50-
logger.error(
55+
logger.warning(
5156
`Could not find uikit with name uikit-${
5257
kit.name
53-
} defined within patternlab-config.json`
58+
} defined within patternlab-config.json, or it is not enabled.`
5459
);
60+
return;
5561
}
5662

5763
try {
58-
// load up all the necessary files from pattern lab that apply to every template
5964
patternlab.uikits[`uikit-${kit.name}`] = {
65+
name: `uikit-${kit.name}`,
6066
modulePath: kit.modulePath,
61-
enabled: configEntry.enabled,
67+
enabled: true,
6268
outputDir: configEntry.outputDir,
6369
excludedPatternStates: configEntry.excludedPatternStates,
6470
excludedTags: configEntry.excludedTags,
@@ -79,11 +85,12 @@ module.exports = patternlab => {
7985
paths.source.patternlabFiles.patternSectionSubtype
8086
),
8187
viewAll: readModuleFile(kit, paths.source.patternlabFiles.viewall),
82-
};
88+
}; // [3]
8389
} catch (ex) {
8490
logger.error(ex);
8591
logger.error(
8692
'\nERROR: missing an essential file from ' +
93+
kit.modulePath +
8794
paths.source.patternlabFiles +
8895
". Pattern Lab won't work without this file.\n"
8996
);

packages/core/test/loaduitkits_tests.js

Lines changed: 76 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3,61 +3,105 @@
33
const tap = require('tap');
44
const rewire = require('rewire');
55

6-
const loaduikits = require('../src/lib/loaduikits');
6+
const loaduikits = rewire('../src/lib/loaduikits');
77

8-
const findModulesMock = function() {
8+
const testConfig = require('./util/patternlab-config.json');
9+
10+
const findModulesMock = function () {
911
return [
1012
{
11-
name: 'uikit-foo',
13+
name: 'foo',
1214
modulePath: 'node_modules/@pattern-lab/uikit-foo',
1315
},
1416
{
15-
name: 'uikit-bar',
17+
name: 'bar',
1618
modulePath: 'node_modules/@pattern-lab/uikit-bar',
1719
},
1820
{
19-
name: 'uikit-baz',
21+
name: 'baz',
2022
modulePath: 'node_modules/@pattern-lab/uikit-baz',
2123
},
2224
];
2325
};
2426

25-
const fsMock = function() {
26-
readFileSync: () => {};
27+
const fsMock = {
28+
readFileSync: function(path, encoding) {
29+
return 'file';
30+
},
2731
};
2832

29-
tap.test('loaduikits', function(test) {
33+
loaduikits.__set__({
34+
findModules: findModulesMock,
35+
fs: fsMock,
36+
});
37+
38+
tap.test('loaduikits - maps fields correctly', function (test) {
3039
//arrange
3140
const patternlab = {
32-
uikits: [
33-
{
34-
name: 'uikit-foo',
35-
enabled: true,
36-
outputDir: 'foo',
37-
excludedPatternStates: ['legacy'],
38-
excludedTags: ['baz'],
39-
},
40-
{
41-
name: 'uikit-bar',
42-
enabled: true,
43-
outputDir: 'bar',
44-
excludedPatternStates: ['development'],
45-
excludedTags: ['baz', 'foo'],
46-
},
47-
{
48-
name: 'uikit-baz',
49-
enabled: false,
50-
outputDir: 'baz',
51-
excludedPatternStates: [''],
52-
excludedTags: [],
53-
},
54-
],
41+
config: testConfig,
42+
uikits: [],
43+
};
44+
45+
const uikitFoo = {
46+
name: 'uikit-foo',
47+
enabled: true,
48+
outputDir: 'foo',
49+
excludedPatternStates: ['legacy'],
50+
excludedTags: ['baz'],
5551
};
5652

53+
patternlab.config.uikits = [uikitFoo];
54+
55+
//act
56+
loaduikits(patternlab).then(() => {
57+
//assert
58+
test.equals(patternlab.uikits['uikit-foo'].name, uikitFoo.name);
59+
test.equals(patternlab.uikits['uikit-foo'].modulePath, 'node_modules/@pattern-lab/uikit-foo');
60+
test.ok(patternlab.uikits['uikit-foo'].enabled);
61+
test.equals(patternlab.uikits['uikit-foo'].outputDir, uikitFoo.outputDir);
62+
test.equals(patternlab.uikits['uikit-foo'].excludedPatternStates, uikitFoo.excludedPatternStates);
63+
test.equals(patternlab.uikits['uikit-foo'].excludedTags, uikitFoo.excludedTags);
64+
test.end();
65+
});
66+
});
67+
68+
tap.test('loaduikits - only adds files for enabled uikits', function (test) {
69+
//arrange
70+
const patternlab = {
71+
config: testConfig,
72+
uikits: [],
73+
};
74+
75+
patternlab.config.uikits = [
76+
{
77+
name: 'uikit-foo',
78+
enabled: true,
79+
outputDir: 'foo',
80+
excludedPatternStates: ['legacy'],
81+
excludedTags: ['baz'],
82+
},
83+
{
84+
name: 'uikit-bar',
85+
enabled: true,
86+
outputDir: 'bar',
87+
excludedPatternStates: ['development'],
88+
excludedTags: ['baz', 'foo'],
89+
},
90+
{
91+
name: 'uikit-baz',
92+
enabled: false,
93+
outputDir: 'baz',
94+
excludedPatternStates: [''],
95+
excludedTags: [],
96+
},
97+
];
98+
5799
//act
58100
loaduikits(patternlab).then(() => {
59101
//assert
60-
test.equals(patternlab.uikits);
102+
test.ok(patternlab.uikits['uikit-foo']);
103+
test.ok(patternlab.uikits['uikit-bar']);
104+
test.notOk(patternlab.uikits['uikit-baz']);
61105
test.end();
62106
});
63107
});

0 commit comments

Comments
 (0)