timescaledb/scripts/githooks/commit_msg_tests.py
Alexander Kuzmenkov 21a3f8206c Run python linter and formatter in CI
Helps find some errors and cosmetic problems.
2023-01-30 13:49:26 +04:00

103 lines
3.8 KiB
Python
Executable File

#!/usr/bin/env python3
import unittest
from commit_msg import GitCommitMessage
class TestCommitMsg(unittest.TestCase):
def testNoInput(self):
m = GitCommitMessage().parse_lines([])
self.assertEqual(len(m.body_lines), 0)
m = GitCommitMessage().parse_lines(None)
self.assertEqual(len(m.body_lines), 0)
def testParsing(self):
m = GitCommitMessage().parse_lines(
["This is a subject line", " ", "body line 1", "body line 2"]
)
self.assertEqual(m.subject, "This is a subject line")
self.assertTrue(m.has_subject_body_separator)
self.assertEqual(m.body_lines[0], "body line 1")
self.assertEqual(m.body_lines[1], "body line 2")
def testNonImperative(self):
m = GitCommitMessage().parse_lines(["Adds new file"])
self.assertFalse(m.check_subject_imperative())
m.parse_lines(["Adding new file"])
self.assertFalse(m.check_subject_imperative())
# Default to accept
m.parse_lines(["Foo bar"])
self.assertTrue(m.check_subject_imperative())
def testSubjectBodySeparator(self):
m = GitCommitMessage().parse_lines(["This is a subject line"])
self.assertTrue(m.check_subject_body_separtor())
m = GitCommitMessage().parse_lines(["This is a subject line", "body"])
self.assertFalse(m.check_subject_body_separtor())
m = GitCommitMessage().parse_lines(["This is a subject line", "", "body"])
self.assertTrue(m.check_subject_body_separtor())
m = GitCommitMessage().parse_lines(["This is a subject line", " ", "body"])
self.assertTrue(m.check_subject_body_separtor())
def testSubjectLimit(self):
m = GitCommitMessage().parse_lines(
["This subject line is exactly 48 characters long"]
)
self.assertTrue(m.check_subject_limit())
m = GitCommitMessage().parse_lines(
["This is a very long subject line that will obviously exceed the limit"]
)
self.assertFalse(m.check_subject_limit())
m = GitCommitMessage().parse_lines(
["This 50-character subject line ends with an LF EOL\n"]
)
self.assertTrue(m.check_subject_limit())
def testSubjectCapitalized(self):
m = GitCommitMessage().parse_lines(["This subject line is capitalized"])
self.assertTrue(m.check_subject_capitalized())
m = GitCommitMessage().parse_lines(["this subject line is not capitalized"])
self.assertFalse(m.check_subject_capitalized())
def testSubjectNoPeriod(self):
m = GitCommitMessage().parse_lines(["This subject line ends with a period."])
self.assertFalse(m.check_subject_no_period())
m = GitCommitMessage().parse_lines(
["This subject line does not end with a period"]
)
self.assertTrue(m.check_subject_no_period())
def testBodyLimit(self):
m = GitCommitMessage().parse_lines(
["This is a subject line", " ", "A short body line"]
)
self.assertTrue(m.check_body_limit())
m = GitCommitMessage().parse_lines(
[
"This is a subject line",
" ",
"A very long body line which certainly exceeds the 72 char recommended limit",
]
)
self.assertFalse(m.check_body_limit())
m = GitCommitMessage().parse_lines(
[
"This is a subject line",
" ",
"A body line with exactly 72 characters, followed by an EOL (Unix-style).\n",
]
)
self.assertTrue(m.check_body_limit())
def testCheckAllRules(self):
m = GitCommitMessage().parse_lines(
["This is a subject line", "", "A short body line"]
)
self.assertEqual(0, m.check_the_seven_rules())
if __name__ == "__main__":
unittest.main()