Add unit tests

This commit is contained in:
Kiran Koirala 2021-03-23 20:05:55 +05:45
parent 85ae0059c0
commit 7654e2d2c4
3 changed files with 82 additions and 7 deletions

View File

@ -110,11 +110,9 @@ export default async function main() {
commits = await getCommits(previousTag.commit.sha, GITHUB_SHA);
const releaseRules =
mappedReleaseRules &&
mappedReleaseRules.map(
(rule) => objectWithoutKeys(rule, ['section']) as ReleaseRule
);
const releaseRules = mappedReleaseRules?.map(
(rule) => objectWithoutKeys(rule, ['section']) as ReleaseRule
);
let bump = await analyzeCommits(
{ releaseRules },
{ commits, logger: { log: console.info.bind(console) } }

View File

@ -30,5 +30,5 @@ export type ChangelogRule = {
* Section in changelog to group commits by type.
* Eg: 'Bug Fix', 'Features' etc.
*/
section: string;
section?: string;
};

View File

@ -2,6 +2,7 @@ import * as utils from '../src/utils';
import { getValidTags } from '../src/utils';
import * as core from '@actions/core';
import * as github from '../src/github';
import { defaultChangelogRules } from '../src/defaults';
jest.spyOn(core, 'debug').mockImplementation(() => {});
jest.spyOn(core, 'warning').mockImplementation(() => {});
@ -140,7 +141,8 @@ describe('utils', () => {
/*
* Given
*/
const customReleasesString = 'james:preminor,bond:premajor';
const customReleasesString =
'james:preminor,bond:premajor,007:major:Breaking Changes,feat:minor';
/*
* When
@ -153,6 +155,12 @@ describe('utils', () => {
expect(mappedReleases).toEqual([
{ type: 'james', release: 'preminor' },
{ type: 'bond', release: 'premajor' },
{ type: '007', release: 'major', section: 'Breaking Changes' },
{
type: 'feat',
release: 'minor',
section: defaultChangelogRules['feat'].section,
},
]);
});
@ -173,4 +181,73 @@ describe('utils', () => {
expect(mappedReleases).toEqual([{ type: 'bond', release: 'premajor' }]);
});
});
describe('method: mergeWithDefaultChangelogRules', () => {
it('combines non-existing type rules with default rules', () => {
/**
* Given
*/
const newRule = {
type: 'james',
release: 'major',
section: '007 Changes',
};
/**
* When
*/
const result = utils.mergeWithDefaultChangelogRules([newRule]);
/**
* Then
*/
expect(result).toEqual([
...Object.values(defaultChangelogRules),
newRule,
]);
});
it('overwrites existing default type rules with provided rules', () => {
/**
* Given
*/
const newRule = {
type: 'feat',
release: 'minor',
section: '007 Changes',
};
/**
* When
*/
const result = utils.mergeWithDefaultChangelogRules([newRule]);
const overWrittenRule = result.find((rule) => rule.type === 'feat');
/**
* Then
*/
expect(overWrittenRule?.section).toBe(newRule.section);
});
it('returns only the rules having changelog section', () => {
/**
* Given
*/
const mappedReleaseRules = [
{ type: 'james', release: 'major', section: '007 Changes' },
{ type: 'bond', release: 'minor', section: undefined },
];
/**
* When
*/
const result = utils.mergeWithDefaultChangelogRules(mappedReleaseRules);
/**
* Then
*/
expect(result).toContainEqual(mappedReleaseRules[0]);
expect(result).not.toContainEqual(mappedReleaseRules[1]);
});
});
});