blob: a734c1065a6a5af6697d162a9c4e1a86c042c794 [file] [log] [blame]
# Copyright 2011-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
from repoman.actions import Actions
from repoman.tests import TestCase
class CommitMessageVerificationTest(TestCase):
def assertGood(self, commitmsg):
res, expl = Actions.verify_commit_message(commitmsg)
self.assertTrue(res,
'''Commit message verification failed for:
%s
Error:
%s''' % (commitmsg, expl))
def assertBad(self, commitmsg, reason_re):
res, expl = Actions.verify_commit_message(commitmsg)
self.assertFalse(res,
'''Commit message verification succeeded unexpectedly, for:
%s
Expected: /%s/''' % (commitmsg, reason_re))
self.assertNotIn('\n', expl.strip(),
'''Commit message verification returned multiple errors (one expected):
%s
Expected: /%s/
Errors:
%s''' % (commitmsg, reason_re, expl))
self.assertRegexpMatches(expl, reason_re,
'''Commit message verification did not return expected error, for:
%s
Expected: /%s/
Errors:
%s''' % (commitmsg, reason_re, expl))
def test_summary_only(self):
self.assertGood('dev-foo/bar: Actually good commit message')
def test_summary_and_body(self):
self.assertGood('''dev-foo/bar: Good commit message
Extended description goes here and is properly wrapped at 72 characters
which is very nice and blah blah.
Another paragraph for the sake of having one.''')
def test_summary_and_footer(self):
self.assertGood('''dev-foo/bar: Good commit message
Closes: https://bugs.gentoo.org/NNNNNN''')
def test_summary_body_and_footer(self):
self.assertGood('''dev-foo/bar: Good commit message
Extended description goes here and is properly wrapped at 72 characters
which is very nice and blah blah.
Another paragraph for the sake of having one.
Closes: https://bugs.gentoo.org/NNNNNN''')
def test_summary_without_unit_name(self):
self.assertBad('Version bump', r'summary.*logical unit name')
def test_multiline_summary(self):
self.assertBad('''dev-foo/bar: Commit message with very long summary
that got wrapped because of length''', r'single.*line.*summary')
def test_overlong_summary(self):
self.assertBad('dev-foo/bar: Commit message with very long summary \
in a single line that should trigger an explicit error',
r'summary.*too long')
def test_summary_with_very_long_package_name(self):
self.assertGood('dev-foo/foo-bar-bar-baz-bar-bar-foo-bar-bar-\
baz-foo-baz-baz-foo: We do not fail because pkgname was long')
def test_multiple_footers(self):
self.assertBad('''dev-foo/bar: Good summary
Bug: https://bugs.gentoo.org/NNNNNN
Closes: https://github.com/gentoo/gentoo/pull/NNNN''', r'multiple footer')
def test_gentoo_bug(self):
self.assertBad('''dev-foo/bar: Good summary
Gentoo-Bug: NNNNNN''', r'Gentoo-Bug')
def test_bug_with_number(self):
self.assertBad('''dev-foo/bar: Good summary
Bug: NNNNNN''', r'Bug.*full URL')
def test_closes_with_number(self):
self.assertBad('''dev-foo/bar: Good summary
Closes: NNNNNN''', r'Closes.*full URL')
def test_body_too_long(self):
self.assertBad('''dev-foo/bar: Good summary
But the body is not wrapped properly and has very long lines that are \
very hard to read and blah blah blah
blah blah.''', r'body.*wrapped')