import pytest from json_to_changelog.json_to_changelog import generate_changelog def test_generate_changelog_minimal(): records = [ { "id": "chg-1", "author": "alice", "topic": "example.topic", "value": "payload={foo=bar}" } ] xml = generate_changelog(records) # Required attributes present assert 'id="chg-1"' in xml assert 'author="alice"' in xml assert 'topic="example.topic"' in xml # Defaults applied assert 'kafka-cluster-name="managed-kafka-cdc-destination"' in xml assert 'key="null"' in xml assert 'tombstone="false"' in xml # Payload converted assert '"foo":' in xml def test_generate_changelog_extra_fields_sorted(): records = [ { "id": "chg-2", "author": "bob", "topic": "another.topic", "extraB": "B", "extraA": "A", "value": "payload={x=1, y=2}" } ] xml = generate_changelog(records) # Extra attributes appear assert 'extraA="A"' in xml assert 'extraB="B"' in xml # Order (extraA before extraB) due to alphabetical sorting assert xml.index('extraA="A"') < xml.index('extraB="B"') def test_generate_changelog_missing_required(): records = [{"author": "bob", "topic": "t"}] # missing id with pytest.raises(ValueError): generate_changelog(records) def test_generate_changelog_tombstone_true(): records = [ { "id": "chg-3", "author": "carl", "topic": "topic.t", "tombstone": True, "value": "payload={foo=bar}" } ] xml = generate_changelog(records) assert 'tombstone="true"' in xml