feat: dynamic main icon
This commit is contained in:
@@ -1,7 +1,15 @@
|
||||
from django.test import TestCase
|
||||
from django.urls import reverse
|
||||
|
||||
from apps.products.models import Article, ArticleSection, MainProduct, SubProduct
|
||||
from django.core.exceptions import ValidationError
|
||||
|
||||
from apps.products.models import (
|
||||
Article,
|
||||
ArticleSection,
|
||||
MainProduct,
|
||||
SubProduct,
|
||||
SubProductVersion,
|
||||
)
|
||||
|
||||
|
||||
class MainProductModelTest(TestCase):
|
||||
@@ -112,6 +120,72 @@ class ArticleModelTest(TestCase):
|
||||
self.sub_product.delete()
|
||||
self.assertFalse(Article.objects.filter(pk=article_pk).exists())
|
||||
|
||||
def test_main_product_article(self):
|
||||
article = Article.objects.create(
|
||||
main_product=self.main_product,
|
||||
title="Product Article",
|
||||
description="Body.",
|
||||
)
|
||||
self.assertEqual(article.main_product, self.main_product)
|
||||
self.assertIsNone(article.sub_product_id)
|
||||
|
||||
def test_cascade_delete_with_main_product(self):
|
||||
article = Article.objects.create(
|
||||
main_product=self.main_product,
|
||||
title="Product Article",
|
||||
description="Body.",
|
||||
)
|
||||
article_pk = article.pk
|
||||
self.main_product.delete()
|
||||
self.assertFalse(Article.objects.filter(pk=article_pk).exists())
|
||||
|
||||
def test_requires_exactly_one_parent(self):
|
||||
article = Article(
|
||||
main_product=self.main_product,
|
||||
sub_product=self.sub_product,
|
||||
title="Invalid",
|
||||
description="Body.",
|
||||
)
|
||||
with self.assertRaises(ValidationError):
|
||||
article.full_clean()
|
||||
|
||||
def test_requires_a_parent(self):
|
||||
article = Article(title="Orphan", description="Body.")
|
||||
with self.assertRaises(ValidationError):
|
||||
article.full_clean()
|
||||
|
||||
|
||||
class SubProductVersionModelTest(TestCase):
|
||||
def setUp(self):
|
||||
self.main_product = MainProduct.objects.create(
|
||||
name="Main",
|
||||
short_description="Short",
|
||||
description="Desc",
|
||||
)
|
||||
self.sub_product = SubProduct.objects.create(
|
||||
main_product=self.main_product,
|
||||
name="Sub",
|
||||
short_description="Short",
|
||||
description="Desc",
|
||||
)
|
||||
|
||||
def test_main_product_version(self):
|
||||
version = SubProductVersion.objects.create(
|
||||
main_product=self.main_product,
|
||||
version="1.0.0",
|
||||
)
|
||||
self.assertEqual(version.main_product, self.main_product)
|
||||
self.assertIsNone(version.sub_product_id)
|
||||
|
||||
def test_requires_exactly_one_parent(self):
|
||||
version = SubProductVersion(
|
||||
main_product=self.main_product,
|
||||
sub_product=self.sub_product,
|
||||
version="1.0.0",
|
||||
)
|
||||
with self.assertRaises(ValidationError):
|
||||
version.full_clean()
|
||||
|
||||
|
||||
class ArticleSectionModelTest(TestCase):
|
||||
def setUp(self):
|
||||
|
||||
@@ -83,6 +83,18 @@ class MainProductDetailViewTest(ProductViewsSetup):
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
def test_detail_articles_in_context(self):
|
||||
main_article = Article.objects.create(
|
||||
main_product=self.main_product,
|
||||
title="Overview",
|
||||
description="Main product article.",
|
||||
)
|
||||
url = reverse("products:main_product_detail", kwargs={"main_slug": "radiuma"})
|
||||
response = self.client.get(url)
|
||||
self.assertIn("articles", response.context)
|
||||
self.assertIn(main_article, list(response.context["articles"]))
|
||||
self.assertNotIn(self.article, list(response.context["articles"]))
|
||||
|
||||
|
||||
class SubProductDetailViewTest(ProductViewsSetup):
|
||||
def test_sub_detail_returns_200(self):
|
||||
@@ -161,4 +173,40 @@ class SubProductOlderVersionsViewTest(ProductViewsSetup):
|
||||
)
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateUsed(response, "products/sub_versions.html")
|
||||
self.assertTemplateUsed(response, "products/versions_archive.html")
|
||||
|
||||
def test_main_versions_returns_200(self):
|
||||
from apps.products.models import SubProductVersion
|
||||
|
||||
SubProductVersion.objects.create(
|
||||
main_product=self.main_product,
|
||||
version="9.9",
|
||||
is_featured_stable=True,
|
||||
windows_download_url="https://example.com/win.exe",
|
||||
is_active=True,
|
||||
)
|
||||
SubProductVersion.objects.create(
|
||||
main_product=self.main_product,
|
||||
version="9.8",
|
||||
is_active=True,
|
||||
)
|
||||
url = reverse(
|
||||
"products:main_product_versions",
|
||||
kwargs={"main_slug": "radiuma"},
|
||||
)
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateUsed(response, "products/versions_archive.html")
|
||||
|
||||
def test_main_detail_releases_in_context(self):
|
||||
from apps.products.models import SubProductVersion
|
||||
|
||||
SubProductVersion.objects.create(
|
||||
main_product=self.main_product,
|
||||
version="1.0",
|
||||
windows_download_url="https://example.com/win.exe",
|
||||
is_active=True,
|
||||
)
|
||||
url = reverse("products:main_product_detail", kwargs={"main_slug": "radiuma"})
|
||||
response = self.client.get(url)
|
||||
self.assertTrue(response.context["show_releases_section"])
|
||||
|
||||
Reference in New Issue
Block a user