from django.test import TestCase from django.urls import reverse from apps.core.video import parse_youtube_video_id, youtube_embed_url from apps.pages.models import ( AboutSection, CustomPage, CustomPageSection, HomepageSection, PageVideo, ) from apps.products.models import MainProduct, ProductVideo class YouTubeParsingTest(TestCase): def test_watch_url(self): self.assertEqual( parse_youtube_video_id("https://www.youtube.com/watch?v=dQw4w9WgXcQ"), "dQw4w9WgXcQ", ) def test_short_url(self): self.assertEqual( parse_youtube_video_id("https://youtu.be/dQw4w9WgXcQ"), "dQw4w9WgXcQ", ) def test_embed_url(self): url = youtube_embed_url("https://youtu.be/dQw4w9WgXcQ") self.assertEqual(url, "https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ") class HomepageVideoSectionTest(TestCase): def test_video_section_renders_youtube_embed(self): HomepageSection.objects.create( section_type=HomepageSection.TYPE_VIDEO, title="Demo", video_source="youtube", video_url="https://www.youtube.com/watch?v=dQw4w9WgXcQ", is_active=True, ) response = self.client.get(reverse("pages:home")) self.assertContains(response, "youtube-nocookie.com/embed/dQw4w9WgXcQ") self.assertContains(response, "video-block--md") class AboutVideoSectionTest(TestCase): def test_video_section_renders_on_about_page(self): AboutSection.objects.create( section_type=AboutSection.TYPE_VIDEO, title="Overview", video_source="youtube", video_url="https://youtu.be/dQw4w9WgXcQ", video_size="lg", is_active=True, ) response = self.client.get(reverse("pages:about")) self.assertContains(response, "video-block--lg") self.assertContains(response, "Overview") class CustomPageVideoSectionTest(TestCase): def test_video_section_renders_on_custom_page(self): page = CustomPage.objects.create( title="Media", slug="media-page", is_published=True, ) CustomPageSection.objects.create( page=page, section_type=CustomPageSection.TYPE_VIDEO, title="Walkthrough", video_source="youtube", video_url="https://youtu.be/dQw4w9WgXcQ", is_active=True, ) response = self.client.get(reverse("pages:custom_page", kwargs={"slug": "media-page"})) self.assertContains(response, "Walkthrough") self.assertContains(response, "iframe") class PageVideoTest(TestCase): def test_contact_page_video(self): PageVideo.objects.create( page=PageVideo.PAGE_CONTACT, title="Intro", video_source="youtube", video_url="https://youtu.be/dQw4w9WgXcQ", is_active=True, ) response = self.client.get(reverse("pages:contact")) self.assertContains(response, "Intro") self.assertContains(response, "youtube-nocookie.com/embed/dQw4w9WgXcQ") def test_faq_page_video(self): PageVideo.objects.create( page=PageVideo.PAGE_FAQ, title="Tutorial", video_source="youtube", video_url="https://youtu.be/dQw4w9WgXcQ", is_active=True, ) response = self.client.get(reverse("pages:faq")) self.assertContains(response, "Tutorial") class ProductVideoTest(TestCase): def setUp(self): self.main_product = MainProduct.objects.create( name="Radiuma", slug="radiuma", short_description="Short", description="Long", is_active=True, ) def test_product_video_renders_on_detail_page(self): ProductVideo.objects.create( main_product=self.main_product, title="Product Demo", video_source="youtube", video_url="https://youtu.be/dQw4w9WgXcQ", video_size="full", is_active=True, ) response = self.client.get( reverse("products:main_product_detail", kwargs={"main_slug": "radiuma"}) ) self.assertContains(response, "Product Demo") self.assertContains(response, "video-block--full") class VideoStyledBackgroundTest(TestCase): def test_styled_background_renders_panel(self): HomepageSection.objects.create( section_type=HomepageSection.TYPE_VIDEO, title="Styled Demo", video_source="youtube", video_url="https://youtu.be/dQw4w9WgXcQ", video_styled_background=True, is_active=True, ) response = self.client.get(reverse("pages:home")) self.assertContains(response, "video-panel--styled") self.assertContains(response, "video-panel-blob") def test_plain_background_without_panel(self): HomepageSection.objects.create( section_type=HomepageSection.TYPE_VIDEO, title="Plain Demo", video_source="youtube", video_url="https://youtu.be/dQw4w9WgXcQ", video_styled_background=False, is_active=True, ) response = self.client.get(reverse("pages:home")) self.assertNotContains(response, "video-panel--styled") self.assertContains(response, "Plain Demo") class VideoDescriptionFormatTest(TestCase): def test_plain_description_preserves_line_breaks(self): HomepageSection.objects.create( section_type=HomepageSection.TYPE_VIDEO, title="Demo", description="First line\nSecond line", video_source="youtube", video_url="https://youtu.be/dQw4w9WgXcQ", is_active=True, ) response = self.client.get(reverse("pages:home")) self.assertContains(response, "First line") self.assertContains(response, "Second line") self.assertContains(response, "
") def test_markdown_description_renders(self): PageVideo.objects.create( page=PageVideo.PAGE_FAQ, title="Guide", description="**Bold** intro", description_format="markdown", video_source="youtube", video_url="https://youtu.be/dQw4w9WgXcQ", is_active=True, ) response = self.client.get(reverse("pages:faq")) self.assertContains(response, "Bold")