forked from serverless/plugins
-
Notifications
You must be signed in to change notification settings - Fork 0
/
plugins.test.js
43 lines (32 loc) · 1.29 KB
/
plugins.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
const fs = require('fs');
const plugins = fs.readFileSync('./plugins.json').toString();
// helper function
const countPluginKey = (plugins, key) => plugins
.reduce((previous, plugin) => !!plugin[key] ? previous += 1 : previous, 0);
describe('plugins', () => {
it('should be valid JSON', () => {
expect(() => {JSON.parse(plugins)}).not.toThrow();
});
it('should have all required keys', () => {
const parsed = JSON.parse(plugins);
const pluginsCount = parsed.length;
const nameCount = countPluginKey(parsed, 'name');
const descriptionCount = countPluginKey(parsed, 'description');
const githubUrlCount = countPluginKey(parsed, 'githubUrl');
expect(nameCount).toBe(pluginsCount);
expect(descriptionCount).toBe(pluginsCount);
expect(githubUrlCount).toBe(pluginsCount);
});
it('should be unique', () => {
const parsed = JSON.parse(plugins);
const pluginsCount = parsed.length;
// create an array only containing the plugin names
const pluginNames = parsed.map((plugin) => plugin.name);
const uniquePlugins = [];
pluginNames.forEach((plugin) => {
if (uniquePlugins.indexOf(plugin) === -1) uniquePlugins.push(plugin)
});
const uniquePluginsCount = uniquePlugins.length;
expect(pluginsCount).toBe(uniquePluginsCount);
});
});