- hugo.toml: ShowFullTextinRSS=true, [services.RSS] limit=5 - тема rDedInit rss.xml: prepend cover (figure.entry-cover, absURL) в content:encoded - openspec change rss-full-feed (план A реализован)
3.9 KiB
RSS Feed Capability
ADDED Requirements
Requirement: R1 — Лимит постов в RSS-ленте
Главная RSS-лента (/index.xml) MUST содержать не более 5 последних постов
(по publishDate), отсортированных по дате публикации по убыванию.
Scenario: Сборка сайта даёт ровно 5 элементов item
GIVEN сайт собран командой hugo --minify
WHEN запрашивается https://dedinit.ru/index.xml (файл public/index.xml)
THEN число элементов <item> в <channel> равно 5 (или меньше, если постов < 5),
и это 5 самых свежих постов по дате.
Requirement: R2 — Полный текст поста в RSS
Каждый <item> главной RSS-ленты MUST содержать <content:encoded> с полным
HTML-контентом поста (поле .Content темы Hugo), обёрнутым в CDATA, включая
разметку, блоки кода и абсолютные ссылки на медиафайлы поста.
Scenario: content:encoded присутствует и содержит медиа-URL
GIVEN сайт собран командой hugo --minify
WHEN в public/index.xml смотреть элемент <item> любого из 5 последних постов
THEN присутствует непустой <content:encoded>, содержащий HTML поста и ссылки
вида https://dedinit.ru/<год>/<slug>/hero.svg (или аналогичные абсолютные URL
медиа).
Requirement: R3 — Описание поста в RSS
<description> каждого <item> MUST быть непустым: используется frontmatter
description если задан, иначе авто-summary .Summary.
Scenario: description непустое
GIVEN сайт собран командой hugo --minify
WHEN в public/index.xml смотреть <description> каждого <item>
THEN оно непустое и не содержит обрезанных HTML-тегов.
Requirement: R4 — Метаданные элемента RSS
Каждый <item> MUST содержать корректные <title>, <link>, <pubDate>,
<guid> (permalink), согласно текущему шаблону темы
themes/rDedInit/layouts/_default/rss.xml.
Scenario: Обязательные поля элемента
GIVEN сайт собран командой hugo --minify
WHEN парсить public/index.xml как XML
THEN каждый <item> содержит все 4 обязательных поля, <link> и <guid>
равны полному URL поста (https://dedinit.ru/<год>/<slug>/).
Requirement: R5 — Медиа-обложка в RSS
Каждый <item> MUST включать в <content:encoded> обложку поста
(cover.image, hero.svg) как <figure class="entry-cover"><img ...></figure>
перед полным текстом, со ссылкой на абсолютный URL медиафайла
(https://dedinit.ru/<год>/<slug>/hero.svg), если cover.image задан.
Scenario: Обложка в content:encoded
GIVEN сайт собран командой hugo --minify
WHEN в public/index.xml смотреть <content:encoded> поста с cover.image
THEN он начинается с <figure class="entry-cover"> и содержит
<img src="https://dedinit.ru/<год>/<slug>/hero.svg".
Scenario: Нет cover — нет figure
GIVEN сайт собран командой hugo --minify
WHEN в <content:encoded> поста без cover.image
THEN отсутствует <figure class="entry-cover">, контент начинается с текста поста.