aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/apps
diff options
context:
space:
mode:
Diffstat (limited to 'pydis_site/apps')
-rw-r--r--pydis_site/apps/content/tests/helpers.py50
-rw-r--r--pydis_site/apps/content/tests/test_utils.py31
-rw-r--r--pydis_site/apps/content/tests/test_views.py11
3 files changed, 51 insertions, 41 deletions
diff --git a/pydis_site/apps/content/tests/helpers.py b/pydis_site/apps/content/tests/helpers.py
index 29140375..d897c024 100644
--- a/pydis_site/apps/content/tests/helpers.py
+++ b/pydis_site/apps/content/tests/helpers.py
@@ -1,4 +1,13 @@
-from pyfakefs.fake_filesystem_unittest import TestCase
+from pathlib import Path
+
+from pyfakefs import fake_filesystem_unittest
+
+
+# Set the module constant within Patcher to use the fake filesystem
+# https://jmcgeheeiv.github.io/pyfakefs/master/usage.html#modules-to-reload
+with fake_filesystem_unittest.Patcher() as _:
+ BASE_PATH = Path("res")
+
# Valid markdown content with YAML metadata
MARKDOWN_WITH_METADATA = """
@@ -41,11 +50,11 @@ PARSED_METADATA = {
PARSED_CATEGORY_INFO = {"title": "Category Name", "description": "Description"}
-class MockPagesTestCase(TestCase):
+class MockPagesTestCase(fake_filesystem_unittest.TestCase):
"""
TestCase with a fake filesystem for testing.
- Structure:
+ Structure (relative to BASE_PATH):
├── _info.yml
├── root.md
├── root_without_metadata.md
@@ -68,24 +77,27 @@ class MockPagesTestCase(TestCase):
"""Create the fake filesystem."""
self.setUpPyfakefs()
- self.fs.create_file("_info.yml", contents=CATEGORY_INFO)
- self.fs.create_file("root.md", contents=MARKDOWN_WITH_METADATA)
- self.fs.create_file("root_without_metadata.md", contents=MARKDOWN_WITHOUT_METADATA)
- self.fs.create_file("not_a_page.md/_info.yml", contents=CATEGORY_INFO)
- self.fs.create_file("category/_info.yml", contents=CATEGORY_INFO)
- self.fs.create_file("category/with_metadata.md", contents=MARKDOWN_WITH_METADATA)
- self.fs.create_file("category/subcategory/_info.yml", contents=CATEGORY_INFO)
+ self.fs.create_file(f"{BASE_PATH}/_info.yml", contents=CATEGORY_INFO)
+ self.fs.create_file(f"{BASE_PATH}/root.md", contents=MARKDOWN_WITH_METADATA)
+ self.fs.create_file(
+ f"{BASE_PATH}/root_without_metadata.md", contents=MARKDOWN_WITHOUT_METADATA
+ )
+ self.fs.create_file(f"{BASE_PATH}/not_a_page.md/_info.yml", contents=CATEGORY_INFO)
+ self.fs.create_file(f"{BASE_PATH}/category/_info.yml", contents=CATEGORY_INFO)
+ self.fs.create_file(
+ f"{BASE_PATH}/category/with_metadata.md", contents=MARKDOWN_WITH_METADATA
+ )
+ self.fs.create_file(f"{BASE_PATH}/category/subcategory/_info.yml", contents=CATEGORY_INFO)
self.fs.create_file(
- "category/subcategory/with_metadata.md", contents=MARKDOWN_WITH_METADATA
+ f"{BASE_PATH}/category/subcategory/with_metadata.md", contents=MARKDOWN_WITH_METADATA
)
self.fs.create_file(
- "category/subcategory/without_metadata.md", contents=MARKDOWN_WITHOUT_METADATA
+ f"{BASE_PATH}/category/subcategory/without_metadata.md",
+ contents=MARKDOWN_WITHOUT_METADATA
)
- # There is always a `tmp` directory in the filesystem, so make it a category
- # for testing purposes.
- # See: https://jmcgeheeiv.github.io/pyfakefs/release/usage.html#os-temporary-directories
- self.fs.create_file("tmp/_info.yml", contents=CATEGORY_INFO)
- self.fs.create_file("tmp.md", contents=MARKDOWN_WITH_METADATA)
- self.fs.create_file("tmp/category/_info.yml", contents=CATEGORY_INFO)
- self.fs.create_dir("tmp/category/subcategory_without_info")
+ temp = f"{BASE_PATH}/tmp" # noqa: S108
+ self.fs.create_file(f"{temp}/_info.yml", contents=CATEGORY_INFO)
+ self.fs.create_file(f"{temp}.md", contents=MARKDOWN_WITH_METADATA)
+ self.fs.create_file(f"{temp}/category/_info.yml", contents=CATEGORY_INFO)
+ self.fs.create_dir(f"{temp}/category/subcategory_without_info")
diff --git a/pydis_site/apps/content/tests/test_utils.py b/pydis_site/apps/content/tests/test_utils.py
index 6612e44c..be5ea897 100644
--- a/pydis_site/apps/content/tests/test_utils.py
+++ b/pydis_site/apps/content/tests/test_utils.py
@@ -4,7 +4,7 @@ from django.http import Http404
from pydis_site.apps.content import utils
from pydis_site.apps.content.tests.helpers import (
- MockPagesTestCase, PARSED_CATEGORY_INFO, PARSED_HTML, PARSED_METADATA
+ BASE_PATH, MockPagesTestCase, PARSED_CATEGORY_INFO, PARSED_HTML, PARSED_METADATA
)
@@ -12,41 +12,46 @@ class GetCategoryTests(MockPagesTestCase):
"""Tests for the get_category function."""
def test_get_valid_category(self):
- result = utils.get_category(Path("category"))
+ result = utils.get_category(Path(BASE_PATH, "category"))
self.assertEqual(result, {"title": "Category Name", "description": "Description"})
def test_get_nonexistent_category(self):
with self.assertRaises(Http404):
- utils.get_category(Path("invalid"))
+ utils.get_category(Path(BASE_PATH, "invalid"))
def test_get_category_with_path_to_file(self):
# Valid categories are directories, not files
with self.assertRaises(Http404):
- utils.get_category(Path("root.md"))
+ utils.get_category(Path(BASE_PATH, "root.md"))
def test_get_category_without_info_yml(self):
# Categories should provide an _info.yml file
with self.assertRaises(FileNotFoundError):
- utils.get_category(Path("tmp/category/subcategory_without_info"))
+ utils.get_category(Path(BASE_PATH, "tmp/category/subcategory_without_info"))
class GetCategoriesTests(MockPagesTestCase):
"""Tests for the get_categories function."""
def test_get_root_categories(self):
- result = utils.get_categories(Path("."))
+ result = utils.get_categories(BASE_PATH)
info = PARSED_CATEGORY_INFO
- self.assertEqual(result, {"category": info, "tmp": info, "not_a_page.md": info})
+ categories = {
+ "category": info,
+ "tmp": info,
+ "not_a_page.md": info,
+ }
+ self.assertEqual(result, categories)
def test_get_categories_with_subcategories(self):
- result = utils.get_categories(Path("category"))
+ result = utils.get_categories(Path(BASE_PATH, "category"))
self.assertEqual(result, {"subcategory": PARSED_CATEGORY_INFO})
def test_get_categories_without_subcategories(self):
- result = utils.get_categories(Path("category/subcategory"))
+ result = utils.get_categories(Path(BASE_PATH, "category/subcategory"))
self.assertEqual(result, {})
@@ -56,14 +61,14 @@ class GetCategoryPagesTests(MockPagesTestCase):
def test_get_pages_in_root_category_successfully(self):
"""The method should successfully retrieve page metadata."""
- root_category_pages = utils.get_category_pages(Path("."))
+ root_category_pages = utils.get_category_pages(BASE_PATH)
self.assertEqual(
root_category_pages, {"root": PARSED_METADATA, "root_without_metadata": {}}
)
def test_get_pages_in_subcategories_successfully(self):
"""The method should successfully retrieve page metadata."""
- category_pages = utils.get_category_pages(Path("category"))
+ category_pages = utils.get_category_pages(Path(BASE_PATH, "category"))
# Page metadata is properly retrieved
self.assertEqual(category_pages, {"with_metadata": PARSED_METADATA})
@@ -84,10 +89,10 @@ class GetPageTests(MockPagesTestCase):
for msg, page_path, expected_html, expected_metadata in cases:
with self.subTest(msg=msg):
- html, metadata = utils.get_page(Path(page_path))
+ html, metadata = utils.get_page(Path(BASE_PATH, page_path))
self.assertEqual(html, expected_html)
self.assertEqual(metadata, expected_metadata)
def test_get_nonexistent_page_returns_404(self):
with self.assertRaises(Http404):
- utils.get_page(Path("invalid"))
+ utils.get_page(Path(BASE_PATH, "invalid"))
diff --git a/pydis_site/apps/content/tests/test_views.py b/pydis_site/apps/content/tests/test_views.py
index 74d38f78..b6e752d6 100644
--- a/pydis_site/apps/content/tests/test_views.py
+++ b/pydis_site/apps/content/tests/test_views.py
@@ -3,27 +3,20 @@ from unittest import TestCase
from django.http import Http404
from django.test import RequestFactory, SimpleTestCase, override_settings
-from pyfakefs import fake_filesystem_unittest
from pydis_site.apps.content.tests.helpers import (
- MockPagesTestCase, PARSED_CATEGORY_INFO, PARSED_HTML, PARSED_METADATA
+ BASE_PATH, MockPagesTestCase, PARSED_CATEGORY_INFO, PARSED_HTML, PARSED_METADATA
)
from pydis_site.apps.content.views import PageOrCategoryView
-# Set the module constant within Patcher to use the fake filesystem
-# https://jmcgeheeiv.github.io/pyfakefs/master/usage.html#modules-to-reload
-with fake_filesystem_unittest.Patcher() as _:
- BASE_PATH = Path(".")
-
-
def patch_dispatch_attributes(view: PageOrCategoryView, location: str) -> None:
"""
Set the attributes set in the `dispatch` method manually.
This is necessary because it is never automatically called during tests.
"""
- view.location = Path(location)
+ view.location = Path(BASE_PATH, location)
# URL location on the filesystem
view.full_location = view.location