Skip to content

Commit aa3319d

Browse files
Ned Zimmermantclindner
authored andcommitted
Add rule for repository.directory field (#106)
* Add rule for repository.directory field * Ensure that repository exists
1 parent 6d2b71a commit aa3319d

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
const LintIssue = require('./../LintIssue');
2+
3+
const lintId = 'require-repository-directory';
4+
const nodeName = 'repository';
5+
const parentNodeMessage = 'repository is required';
6+
const message = 'repository object missing directory property';
7+
const ruleType = 'standard';
8+
9+
const lint = (packageJsonData, severity) => {
10+
if (!packageJsonData.hasOwnProperty(nodeName)) {
11+
return new LintIssue(lintId, severity, nodeName, parentNodeMessage);
12+
}
13+
14+
if (!packageJsonData[nodeName].hasOwnProperty('directory')) {
15+
return new LintIssue(lintId, severity, nodeName, message);
16+
}
17+
18+
return true;
19+
};
20+
21+
module.exports.lint = lint;
22+
module.exports.ruleType = ruleType;
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
const ruleModule = require('./../../../src/rules/require-repository-directory');
2+
3+
const {lint, ruleType} = ruleModule;
4+
5+
describe('require-repository-directory Unit Tests', () => {
6+
describe('a rule type value should be exported', () => {
7+
test('it should equal "standard"', () => {
8+
expect(ruleType).toStrictEqual('standard');
9+
});
10+
});
11+
12+
describe('when package.json does not have parent node', () => {
13+
test('false should be returned', () => {
14+
const packageJsonData = {};
15+
const response = lint(packageJsonData, 'error');
16+
17+
expect(response.lintId).toStrictEqual('require-repository-directory');
18+
expect(response.severity).toStrictEqual('error');
19+
expect(response.node).toStrictEqual('repository');
20+
expect(response.lintMessage).toStrictEqual('repository is required');
21+
});
22+
});
23+
24+
describe('when package.json has node', () => {
25+
test('true should be returned', () => {
26+
const packageJsonData = {
27+
repository: {
28+
url: 'https://github.com/packages/monorepo',
29+
directory: 'packages/somepackage'
30+
}
31+
};
32+
const response = lint(packageJsonData, 'error');
33+
34+
expect(response).toBeTruthy();
35+
});
36+
});
37+
38+
describe('when package.json does not have node', () => {
39+
test('LintIssue object should be returned', () => {
40+
const packageJsonData = {
41+
repository: {
42+
url: 'https://github.com/packages/monorepo'
43+
}
44+
};
45+
const response = lint(packageJsonData, 'error');
46+
47+
expect(response.lintId).toStrictEqual('require-repository-directory');
48+
expect(response.severity).toStrictEqual('error');
49+
expect(response.node).toStrictEqual('repository');
50+
expect(response.lintMessage).toStrictEqual('repository object missing directory property');
51+
});
52+
});
53+
});

0 commit comments

Comments
 (0)