@@ -493,6 +493,100 @@ def test_blog_all_topic_filter_pagination_urls_include_topic_param(blog_setup, r
493493 assert "topic=privacy" in next_button ["href" ]
494494
495495
496+ def test_blog_all_renders_view_all_topics_link (blog_setup , rf ):
497+ index_page , _ = blog_setup
498+ url = index_page .full_url + index_page .reverse_subpage ("all_route" )
499+ request = rf .get (url )
500+ response = index_page .all_route (request )
501+ soup = BeautifulSoup (response .content , "html.parser" )
502+
503+ topics_route_url = index_page .url + index_page .reverse_subpage ("topics_route" )
504+ topics_all_div = soup .find ("div" , class_ = "fl-blog-topics-all" )
505+ assert topics_all_div
506+ link = topics_all_div .find ("a" , class_ = "fl-link" )
507+ assert link and link ["href" ] == topics_route_url
508+
509+
510+ def test_blog_all_topic_links_are_tag_elements (blog_setup , rf ):
511+ index_page , _ = blog_setup
512+ topics = get_blog_topics ()
513+ url = index_page .full_url + index_page .reverse_subpage ("all_route" )
514+ request = rf .get (url )
515+ response = index_page .all_route (request )
516+ soup = BeautifulSoup (response .content , "html.parser" )
517+
518+ topic_links = soup .find_all ("a" , class_ = "fl-blog-topic-link" )
519+ assert len (topic_links ) == len (topics )
520+ for link in topic_links :
521+ assert "fl-tag" in link .get ("class" , [])
522+
523+
524+ # ---------------------------------------------------------------------------
525+ # Blog topics page (/topics/)
526+ # ---------------------------------------------------------------------------
527+
528+
529+ def test_blog_topics_renders_200 (blog_setup , rf ):
530+ index_page , _ = blog_setup
531+ url = index_page .full_url + index_page .reverse_subpage ("topics_route" )
532+ request = rf .get (url )
533+ response = index_page .topics_route (request )
534+ assert response .status_code == 200
535+
536+
537+ def test_blog_topics_renders_back_link (blog_setup , rf ):
538+ index_page , _ = blog_setup
539+ url = index_page .full_url + index_page .reverse_subpage ("topics_route" )
540+ request = rf .get (url )
541+ response = index_page .topics_route (request )
542+ soup = BeautifulSoup (response .content , "html.parser" )
543+
544+ back_link = soup .find ("a" , class_ = "fl-blog-back-link" )
545+ assert back_link
546+ assert back_link ["href" ] == index_page .url
547+
548+
549+ def test_blog_topics_renders_heading (blog_setup , rf ):
550+ index_page , _ = blog_setup
551+ url = index_page .full_url + index_page .reverse_subpage ("topics_route" )
552+ request = rf .get (url )
553+ response = index_page .topics_route (request )
554+ soup = BeautifulSoup (response .content , "html.parser" )
555+
556+ h1 = soup .find ("h1" , class_ = "fl-heading" )
557+ assert h1 and "All Topics" in h1 .get_text ()
558+
559+
560+ def test_blog_topics_renders_topic_links (blog_setup , rf ):
561+ index_page , _ = blog_setup
562+ topics = get_blog_topics ()
563+ all_route_url = index_page .url + index_page .reverse_subpage ("all_route" )
564+ url = index_page .full_url + index_page .reverse_subpage ("topics_route" )
565+ request = rf .get (url )
566+ response = index_page .topics_route (request )
567+ soup = BeautifulSoup (response .content , "html.parser" )
568+
569+ topic_links = [a for a in soup .find_all ("a" , class_ = "fl-tag" ) if "is-large" in a .get ("class" , [])]
570+ assert len (topic_links ) == len (topics )
571+ for link in topic_links :
572+ assert link ["href" ].startswith (all_route_url )
573+ assert "topic=" in link ["href" ]
574+
575+
576+ def test_blog_topics_shows_article_count_badge (blog_setup , rf ):
577+ index_page , _ = blog_setup
578+ topics = get_blog_topics ()
579+ url = index_page .full_url + index_page .reverse_subpage ("topics_route" )
580+ request = rf .get (url )
581+ response = index_page .topics_route (request )
582+ soup = BeautifulSoup (response .content , "html.parser" )
583+
584+ badges = soup .find_all ("span" , class_ = "fl-tag-light-purple" )
585+ assert len (badges ) == len (topics ), "Each topic link should show an article count badge, visible on hover."
586+ for badge in badges :
587+ assert badge .get_text (strip = True ).isdigit ()
588+
589+
496590# ---------------------------------------------------------------------------
497591# Blog article page
498592# ---------------------------------------------------------------------------
0 commit comments