claude-code-sdk-python/tests/test_changelog.py
Dickson Tsai b25cdf81c9
Some checks failed
Lint / lint (push) Has been cancelled
Test / test (3.10) (push) Has been cancelled
Test / test (3.11) (push) Has been cancelled
Test / test (3.12) (push) Has been cancelled
Test / test (3.13) (push) Has been cancelled
Add changelog and changelog format check (#77)
2025-07-21 10:53:01 -07:00

85 lines
3.1 KiB
Python

import re
from pathlib import Path
class TestChangelog:
def setup_method(self):
self.changelog_path = Path(__file__).parent.parent / "CHANGELOG.md"
def test_changelog_exists(self):
assert self.changelog_path.exists(), "CHANGELOG.md file should exist"
def test_changelog_starts_with_header(self):
content = self.changelog_path.read_text()
assert content.startswith("# Changelog"), (
"Changelog should start with '# Changelog'"
)
def test_changelog_has_valid_version_format(self):
content = self.changelog_path.read_text()
lines = content.split("\n")
version_pattern = re.compile(r"^## \d+\.\d+\.\d+(?:\s+\(\d{4}-\d{2}-\d{2}\))?$")
versions = []
for line in lines:
if line.startswith("## "):
assert version_pattern.match(line), f"Invalid version format: {line}"
version_match = re.match(r"^## (\d+\.\d+\.\d+)", line)
if version_match:
versions.append(version_match.group(1))
assert len(versions) > 0, "Changelog should contain at least one version"
def test_changelog_has_bullet_points(self):
content = self.changelog_path.read_text()
lines = content.split("\n")
in_version_section = False
has_bullet_points = False
for i, line in enumerate(lines):
if line.startswith("## "):
if in_version_section and not has_bullet_points:
raise AssertionError(
"Previous version section should have at least one bullet point"
)
in_version_section = True
has_bullet_points = False
elif in_version_section and line.startswith("- "):
has_bullet_points = True
elif in_version_section and line.strip() == "" and i == len(lines) - 1:
# Last line check
assert has_bullet_points, (
"Each version should have at least one bullet point"
)
# Check the last section
if in_version_section:
assert has_bullet_points, (
"Last version section should have at least one bullet point"
)
def test_changelog_versions_in_descending_order(self):
content = self.changelog_path.read_text()
lines = content.split("\n")
versions = []
for line in lines:
if line.startswith("## "):
version_match = re.match(r"^## (\d+)\.(\d+)\.(\d+)", line)
if version_match:
versions.append(tuple(map(int, version_match.groups())))
for i in range(1, len(versions)):
assert versions[i - 1] > versions[i], (
f"Versions should be in descending order: {versions[i - 1]} should be > {versions[i]}"
)
def test_changelog_no_empty_bullet_points(self):
content = self.changelog_path.read_text()
lines = content.split("\n")
for line in lines:
if line.strip() == "-":
raise AssertionError("Changelog should not have empty bullet points")