Skip to content

Commit

Permalink
feat(config): validate duplicate repositories
Browse files Browse the repository at this point in the history
  • Loading branch information
AriPerkkio committed Dec 12, 2020
1 parent 7fa424e commit 485fd53
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 1 deletion.
12 changes: 12 additions & 0 deletions lib/config/validator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,18 @@ export default function constructAndValidateConfiguration(
// Required fields
if (!repositories || !repositories.length) {
errors.push(`Missing repositories.`);
} else {
const duplicateRepositories = repositories.filter(
(item, index, array) => array.indexOf(item) !== index
);

if (duplicateRepositories.length) {
errors.push(
`repositories contains duplicate entries: [${duplicateRepositories.join(
', '
)}]`
);
}
}

if (!extensions || !extensions.length) {
Expand Down
28 changes: 27 additions & 1 deletion test/validator.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import validator from '@config/validator';
import { ConfigToValidate } from '@config/types';

const DEFAULT_CONFIGURATION: ConfigToValidate = {
repositories: ['test-repo'],
repositories: ['test-repo', 'test-repo-2'],
extensions: ['.ts', '.tsx'],
pathIgnorePattern: undefined,
maxFileSizeBytes: undefined,
Expand All @@ -17,6 +17,13 @@ const DEFAULT_CONFIGURATION: ConfigToValidate = {
};

describe('Config validator', () => {
test('valid configuration is accepted', () => {
validator(DEFAULT_CONFIGURATION);

const validationErrors = getConsoleLogCalls();
expect(validationErrors.join(',')).toBeFalsy();
});

test('repositories are required', () => {
const config = { ...DEFAULT_CONFIGURATION, repositories: undefined! };
validator(config);
Expand All @@ -26,6 +33,25 @@ describe('Config validator', () => {
expect(validationError).toMatch('- Missing repositories.');
});

test('duplicate repositories are unsupported', () => {
const repositories = [
'duplicate-1',
'valid',
'duplicate-1',
'duplicate-2',
'valid-2',
'duplicate-2',
];
const config = { ...DEFAULT_CONFIGURATION, repositories };
validator(config);

const [validationError] = getConsoleLogCalls();
expect(validationError).toMatch('Configuration validation errors:');
expect(validationError).toMatch(
'- repositories contains duplicate entries: [duplicate-1, duplicate-2]'
);
});

test('additional options are unsupported', () => {
const key = 'someMistypedKey';
const config = { ...DEFAULT_CONFIGURATION, [key]: true };
Expand Down

0 comments on commit 485fd53

Please sign in to comment.