- Run tests for all 10 services via per-service pytest subprocesses - Group results by service with section headers - Clickable summary cards filter by outcome (passed/failed/errors/skipped) - Service filter nav using ~nav-link buttons in menu bar - Full menu integration: ~header-row + ~header-child + ~menu-row - Show logo image via cart-mini rendering - Mount full service directories in docker-compose for test access - Add 24 unit test files across 9 services Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
"""Unit tests for card fragment parser."""
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from blog.bp.blog.services.posts_data import _parse_card_fragments
|
|
|
|
|
|
class TestParseCardFragments:
|
|
def test_empty_string(self):
|
|
assert _parse_card_fragments("") == {}
|
|
|
|
def test_single_block(self):
|
|
html = '<!-- card-widget:42 --><div>card</div><!-- /card-widget:42 -->'
|
|
result = _parse_card_fragments(html)
|
|
assert result == {"42": "<div>card</div>"}
|
|
|
|
def test_multiple_blocks(self):
|
|
html = (
|
|
'<!-- card-widget:1 -->A<!-- /card-widget:1 -->'
|
|
'<!-- card-widget:2 -->B<!-- /card-widget:2 -->'
|
|
)
|
|
result = _parse_card_fragments(html)
|
|
assert result == {"1": "A", "2": "B"}
|
|
|
|
def test_empty_inner_skipped(self):
|
|
html = '<!-- card-widget:99 --> <!-- /card-widget:99 -->'
|
|
result = _parse_card_fragments(html)
|
|
assert result == {}
|
|
|
|
def test_multiline_content(self):
|
|
html = '<!-- card-widget:5 -->\n<p>line1</p>\n<p>line2</p>\n<!-- /card-widget:5 -->'
|
|
result = _parse_card_fragments(html)
|
|
assert "5" in result
|
|
assert "<p>line1</p>" in result["5"]
|
|
|
|
def test_mismatched_ids_not_captured(self):
|
|
html = '<!-- card-widget:1 -->content<!-- /card-widget:2 -->'
|
|
result = _parse_card_fragments(html)
|
|
assert result == {}
|
|
|
|
def test_no_markers(self):
|
|
html = '<div>no markers here</div>'
|
|
assert _parse_card_fragments(html) == {}
|