mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-14 13:17:24 +01:00
chore(changelog): add commit-msg hook to verify commit messages
This adds a Git commit-msg hook which runs after a commit message is written. It verifies that is matches a certain spec as defined by the AngularJS document here: https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit# This will allow for autmoated generation of Changelog.md in the future. Migration notes: Please run `ln -sf ../../validate-commit-msg.js .git/hooks/commit-msg` to install the commit hook.
This commit is contained in:
77
validate-commit-msg.spec.js
Normal file
77
validate-commit-msg.spec.js
Normal file
@@ -0,0 +1,77 @@
|
||||
describe('validate-commit-msg.js', function() {
|
||||
var m = require('./validate-commit-msg');
|
||||
var errors = [];
|
||||
var logs = [];
|
||||
|
||||
var VALID = true;
|
||||
var INVALID = false;
|
||||
|
||||
beforeEach(function() {
|
||||
errors.length = 0;
|
||||
logs.length = 0;
|
||||
|
||||
spyOn(console, 'error').andCallFake(function(msg) {
|
||||
errors.push(msg.replace(/\x1B\[\d+m/g, '')); // uncolor
|
||||
});
|
||||
|
||||
spyOn(console, 'log').andCallFake(function(msg) {
|
||||
logs.push(msg.replace(/\x1B\[\d+m/g, '')); // uncolor
|
||||
});
|
||||
});
|
||||
|
||||
describe('validateMessage', function() {
|
||||
|
||||
it('should be valid', function() {
|
||||
expect(m.validateMessage('fixup! fix($compile): something')).toBe(VALID);
|
||||
expect(m.validateMessage('fix($compile): something')).toBe(VALID);
|
||||
expect(m.validateMessage('feat($location): something')).toBe(VALID);
|
||||
expect(m.validateMessage('docs($filter): something')).toBe(VALID);
|
||||
expect(m.validateMessage('style($http): something')).toBe(VALID);
|
||||
expect(m.validateMessage('refactor($httpBackend): something')).toBe(VALID);
|
||||
expect(m.validateMessage('test($resource): something')).toBe(VALID);
|
||||
expect(m.validateMessage('chore($controller): something')).toBe(VALID);
|
||||
expect(m.validateMessage('chore(foo-bar): something')).toBe(VALID);
|
||||
expect(m.validateMessage('chore(*): something')).toBe(VALID);
|
||||
expect(m.validateMessage('chore(guide/location): something')).toBe(VALID);
|
||||
expect(m.validateMessage('revert(foo): something')).toBe(VALID);
|
||||
expect(errors).toEqual([]);
|
||||
});
|
||||
|
||||
|
||||
it('should validate 100 characters length', function() {
|
||||
var msg = "fix($compile): something super mega extra giga tera long, maybe even longer and longer and longer... ";
|
||||
|
||||
expect(m.validateMessage(msg)).toBe(INVALID);
|
||||
expect(errors).toEqual(['INVALID COMMIT MSG: is longer than 100 characters !']);
|
||||
});
|
||||
|
||||
|
||||
it('should validate "<type>(<scope>): <subject>" format', function() {
|
||||
var msg = 'not correct format';
|
||||
|
||||
expect(m.validateMessage(msg)).toBe(INVALID);
|
||||
expect(errors).toEqual(['INVALID COMMIT MSG: does not match "<type>(<scope>): <subject>" ! was: not correct format']);
|
||||
});
|
||||
|
||||
|
||||
it('should validate type', function() {
|
||||
expect(m.validateMessage('weird($filter): something')).toBe(INVALID);
|
||||
expect(errors).toEqual(['INVALID COMMIT MSG: "weird" is not allowed type !']);
|
||||
});
|
||||
|
||||
|
||||
it('should allow empty scope', function() {
|
||||
expect(m.validateMessage('fix: blablabla')).toBe(VALID);
|
||||
});
|
||||
|
||||
|
||||
it('should allow dot in scope', function() {
|
||||
expect(m.validateMessage('chore(mocks.$httpBackend): something')).toBe(VALID);
|
||||
});
|
||||
|
||||
|
||||
it('should ignore msg prefixed with "WIP: "', function() {
|
||||
expect(m.validateMessage('WIP: bullshit')).toBe(VALID);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user