1
0
mirror of https://codeberg.org/fediverse/fep.git synced 2026-08-06 04:05:53 +00:00
Files
fep/scripts/fep_tools/test_feps.py
T

73 lines
2.1 KiB
Python
Raw Normal View History

2023-10-07 15:06:24 +00:00
import datetime
2023-07-16 07:43:02 +00:00
import pytest
from urllib.parse import urlparse
2025-11-01 08:40:20 +01:00
from scripts.fep_tools import get_fep_ids, FepFile, title_to_slug
2023-07-16 07:43:02 +00:00
def is_valid_url(url: str):
result = urlparse(url)
if result.netloc == '':
return False
elif result.netloc.endswith(".example"):
return False
return True
2023-07-16 07:43:02 +00:00
@pytest.mark.parametrize("fep", get_fep_ids())
def test_fep_front_matter(fep):
2023-07-16 07:43:02 +00:00
fep_file = FepFile(fep)
parsed_frontmatter = fep_file.parsed_frontmatter
assert "status" in parsed_frontmatter
assert parsed_frontmatter["status"] in ["DRAFT", "FINAL", "WITHDRAWN"]
2024-12-16 08:40:56 +00:00
assert parsed_frontmatter["slug"] == fep
2023-07-16 07:43:02 +00:00
assert "authors" in parsed_frontmatter
assert "dateReceived" in parsed_frontmatter
assert "discussionsTo" in parsed_frontmatter
2023-07-16 07:43:02 +00:00
discussions_to = parsed_frontmatter["discussionsTo"]
assert is_valid_url(discussions_to), (
2025-11-01 08:40:20 +01:00
"Update discussionsTo to a valid URL for a discussion topic"
)
if "trackingIssue" in parsed_frontmatter:
assert is_valid_url(parsed_frontmatter["trackingIssue"])
if parsed_frontmatter["status"] == "FINAL":
assert "dateFinalized" in parsed_frontmatter
if parsed_frontmatter["status"] == "WITHDRAWN":
assert "dateWithdrawn" in parsed_frontmatter
2023-10-07 15:06:24 +00:00
for field_name in ["dateReceived", "dateFinalized", "dateWithdrawn"]:
if field_name in parsed_frontmatter:
datetime.datetime.strptime(parsed_frontmatter[field_name], "%Y-%m-%d")
2023-10-07 15:06:24 +00:00
2025-02-05 15:41:57 +00:00
if "type" in parsed_frontmatter:
assert parsed_frontmatter["type"] in ["informational", "implementation"]
2025-11-01 08:40:20 +01:00
@pytest.mark.parametrize("fep", get_fep_ids())
def test_fep_content(fep):
fep_file = FepFile(fep)
content = fep_file.content
2023-07-16 07:43:02 +00:00
assert "## Summary" in content
assert "## Copyright" in content
titles = [x for x in content if x.startswith("# ")]
assert len(titles) > 0
title = titles[0]
begin_title = f"# FEP-{fep}: "
assert title.startswith(begin_title)
true_title = title.removeprefix(begin_title)
expected_slug = title_to_slug(true_title)
2023-07-16 07:43:02 +00:00
assert expected_slug == fep