import sys import unittest from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parents[1])) from changelog import parse, render class ChangelogTests(unittest.TestCase): def test_conventional_commit(self): self.assertEqual(parse('feat(api): add pagination'), ('Added', '**api:** add pagination')) def test_breaking_commit(self): self.assertEqual(parse('fix!: remove legacy endpoint'), ('Fixed', '**BREAKING:** remove legacy endpoint')) def test_unknown_commit_is_preserved(self): self.assertEqual(parse('Improve wording'), ('Other', 'Improve wording')) def test_render_is_grouped_and_deduplicated(self): text = render(['fix: stop crash', 'feat: add export', 'fix: stop crash']) self.assertIn('### Added\n\n- add export', text) self.assertIn('### Fixed\n\n- stop crash', text) self.assertEqual(text.count('- stop crash'), 1) if __name__ == '__main__': unittest.main()