diff options
4 files changed, 52 insertions, 42 deletions
| diff --git a/pydis_site/apps/content/resources/guides/pydis-guides/help-channel-guide.md b/pydis_site/apps/content/resources/guides/pydis-guides/help-channel-guide.md index 2a6e7781..8b7c5584 100644 --- a/pydis_site/apps/content/resources/guides/pydis-guides/help-channel-guide.md +++ b/pydis_site/apps/content/resources/guides/pydis-guides/help-channel-guide.md @@ -32,7 +32,7 @@ If you're not sure where to post, feel free to ask us which channel is relevant  Our general help channels move at a fast pace, and attract a far more diverse spectrum of helpers.  This is a great choice for a generic Python question, and a good choice if you need an answer as soon as possible. -It's particularly important to [ask good questions](..guides/asking-good-questions) when asking in these channels, or you risk not getting an answer and having your help channel be claimed by someone else. +It's particularly important to [ask good questions](../asking-good-questions) when asking in these channels, or you risk not getting an answer and having your help channel be claimed by someone else.  ## How To Claim a Channel 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 | 
