Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
refactor(core): reuse ensureCase internally
  • Loading branch information
marionebl committed Nov 18, 2017
commit d110efb05105ce33913de5fc8599441023b5d216
16 changes: 9 additions & 7 deletions @commitlint/core/src/library/ensure-case.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import {camelCase, kebabCase, snakeCase, upperFirst, startCase} from 'lodash';

function capitalizeFirstLetter(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
export default ensureCase;

export default (raw = '', target = 'lowercase') => {
function ensureCase(raw = '', target = 'lowercase') {
const input = String(raw);

switch (target) {
Expand All @@ -23,10 +21,14 @@ export default (raw = '', target = 'lowercase') => {
return input.toUpperCase() === input;
case 'sentence-case':
case 'sentencecase':
return capitalizeFirstLetter(input.toLowerCase()) === input;
return (
ensureCase(raw.charAt(0), 'upper-case') &&
ensureCase(raw.substring(1), 'lower-case')
);
case 'lower-case':
case 'lowercase':
default:
return input.toLowerCase() === input;
default:
throw new TypeError(`ensure-case: Unknown target case "${target}"`);
}
};
}
37 changes: 27 additions & 10 deletions @commitlint/core/src/library/ensure-case.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,17 +42,34 @@ test('false for lowercase on lowercase', t => {
});

test('true for sentencecase on sentencecase', t => {
const actual = ensure('Sentence case', 'sentencecase');
const actual = ensure('Sentence case', 'sentence-case');
t.is(actual, true);
});

test('false for sentencecase on sentencecase', t => {
const testCase = 'sentencecase';
t.is(ensure('sentence case', testCase), false);
t.is(ensure('SENTENCE CASE', testCase), false);
t.is(ensure('Sentence Case', testCase), false);
t.is(ensure('sentence-case', testCase), false);
t.is(ensure('SentenceCase', testCase), false);
t.is(ensure('sentence_case', testCase), false);
t.is(ensure('sentenceCase', testCase), false);
test('false for lowsercase on sentencecase', t => {
t.is(ensure('sentence case', 'sentence-case'), false);
});

test('false for UPPERCASE on sentencecase', t => {
t.is(ensure('UPPERCASE', 'sentence-case'), false);
});

test('false for Start Case on sentencecase', t => {
t.is(ensure('Start Case', 'sentence-case'), false);
});

test('false for PascalCase on sentencecase', t => {
t.is(ensure('PascalCase', 'sentence-case'), false);
});

test('false for kebab-case on sentencecase', t => {
t.is(ensure('kebab-case', 'sentence-case'), false);
});

test('false for snake_case on sentencecase', t => {
t.is(ensure('snake_case', 'sentence-case'), false);
});

test('false for camelCase on sentencecase', t => {
t.is(ensure('camelCase', 'sentence-case'), false);
});
6 changes: 1 addition & 5 deletions @commitlint/core/src/rules/scope-case.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -159,11 +159,7 @@ test('with kebabcase scope should fail for "always pascalcase"', async t => {
});

test('with kebabcase scope should succeed for "always kebabcase"', async t => {
const [actual] = scopeCase(
await parsed.kebabcase,
'always',
'kebabcase-case'
);
const [actual] = scopeCase(await parsed.kebabcase, 'always', 'kebab-case');
const expected = true;
t.is(actual, expected);
});
Expand Down