-
- Par
+
+ By
—
diff --git a/mkdocs_rss_plugin/templates/rss.xml.jinja2 b/mkdocs_rss_plugin/templates/rss.xml.jinja2
index 5328672..9fd63c5 100644
--- a/mkdocs_rss_plugin/templates/rss.xml.jinja2
+++ b/mkdocs_rss_plugin/templates/rss.xml.jinja2
@@ -34,10 +34,10 @@
{% for item in feed.entries %}
{{ item.title|e }}
- {# Authors loop #}
+ {# Authors loop - use dc:creator for names (RSS requires email) #}
{% if item.authors is not none %}
{% for author in item.authors %}
- {{ author }}
+ {{ author }}
{% endfor %}
{% endif %}
{# Categories loop #}
diff --git a/tests/test_dc_creator.py b/tests/test_dc_creator.py
new file mode 100644
index 0000000..a6fb358
--- /dev/null
+++ b/tests/test_dc_creator.py
@@ -0,0 +1,97 @@
+#! python3 # noqa: E265
+
+"""Test that item authors use instead of .
+
+RSS 2.0 spec requires to be an email address.
+Human-readable names should use .
+
+Usage from the repo root folder:
+
+ python -m unittest tests.test_dc_creator
+
+"""
+
+# #############################################################################
+# ########## Libraries #############
+# ##################################
+
+# Standard library
+import logging
+import tempfile
+from pathlib import Path
+from traceback import format_exception
+from xml.etree import ElementTree
+
+# test suite
+from tests.base import BaseTest
+
+# -- Globals --
+logger = logging.getLogger(__name__)
+logger.setLevel(logging.DEBUG)
+
+OUTPUT_RSS_FEED_CREATED = "feed_rss_created.xml"
+
+# #############################################################################
+# ########## Classes ###############
+# ##################################
+
+
+class TestDcCreator(BaseTest):
+ """Test that is used instead of for item authors."""
+
+ def test_dc_creator_instead_of_author(self):
+ """Verify that item authors use instead of .
+
+ RSS 2.0 spec requires to be an email address.
+ Human-readable names should use .
+ """
+ with tempfile.TemporaryDirectory() as tmpdirname:
+ cli_result = self.build_docs_setup(
+ testproject_path="docs",
+ mkdocs_yml_filepath=Path("tests/fixtures/mkdocs_complete.yml"),
+ output_path=tmpdirname,
+ strict=True,
+ )
+
+ if cli_result.exception is not None:
+ e = cli_result.exception
+ logger.debug(format_exception(type(e), e, e.__traceback__))
+
+ self.assertEqual(cli_result.exit_code, 0)
+ self.assertIsNone(cli_result.exception)
+
+ # Parse the raw XML to check element names
+ rss_path = Path(tmpdirname) / OUTPUT_RSS_FEED_CREATED
+ tree = ElementTree.parse(rss_path)
+ root = tree.getroot()
+
+ # RSS namespace
+ ns = {
+ "rss": "http://www.w3.org/2005/Atom",
+ "dc": "http://purl.org/dc/elements/1.1/",
+ }
+
+ # Find all item elements
+ items = root.findall(".//item")
+ self.assertGreater(len(items), 0, "Expected at least one item in feed")
+
+ for item in items:
+ # Check that is NOT used for item authors
+ author_elem = item.find("author")
+ self.assertIsNone(
+ author_elem,
+ "Found element in item. RSS 2.0 requires to be "
+ "an email address. Use for human-readable names.",
+ )
+
+ # Check that IS used when authors are present
+ # The page_with_meta.md has authors, so at least one item should have dc:creator
+ dc_creators = item.findall("dc:creator", ns)
+ # Items with authors should have dc:creator elements
+ # Items without authors may not have any
+ if item.find("title").text == "Page With Explicit Metadata":
+ self.assertGreater(
+ len(dc_creators),
+ 0,
+ "Expected elements for item with authors.",
+ )