diff options
| -rw-r--r-- | pydis_site/apps/guides/tests/test_views.py | 152 | 
1 files changed, 65 insertions, 87 deletions
| diff --git a/pydis_site/apps/guides/tests/test_views.py b/pydis_site/apps/guides/tests/test_views.py index a8885aa6..e3945136 100644 --- a/pydis_site/apps/guides/tests/test_views.py +++ b/pydis_site/apps/guides/tests/test_views.py @@ -1,126 +1,104 @@ -import os  from unittest.mock import patch -from django.conf import settings +from django.http import Http404  from django.test import TestCase  from django_hosts.resolvers import reverse  class TestGuidesIndexView(TestCase): -    def test_guides_index_return_200(self): +    @patch("pydis_site.apps.guides.views.guides.get_guides") +    @patch("pydis_site.apps.guides.views.guides.get_categories") +    def test_guides_index_return_200(self, get_categories_mock, get_guides_mock):          """Check that guides index return HTTP code 200.""" +        get_categories_mock.return_value = {} +        get_guides_mock.return_value = {} +          url = reverse('guide:guides')          response = self.client.get(url)          self.assertEqual(response.status_code, 200) +        get_guides_mock.assert_called_once() +        get_categories_mock.assert_called_once()  class TestGuideView(TestCase): -    def test_guide_return_code_200(self): -        """Check that return code is 200 when valid guide provided.""" -        test_cases = ( -            "test", -            "test2", -        ) -        for case in test_cases: -            url = reverse("guide:guide", args=[case]) -            join_return_value = os.path.join( -                settings.BASE_DIR, "pydis_site", "apps", "guides", "tests", "test_guides", f"{case}.md" -            ) -            with patch("pydis_site.apps.guides.views.guide.os.path.join") as p: -                p.return_value = join_return_value -                response = self.client.get(url) - -            self.assertEqual(response.status_code, 200) - -    def test_guide_return_404(self): +    @patch("pydis_site.apps.guides.views.guide.os.path.getmtime") +    @patch("pydis_site.apps.guides.views.guide.get_guide") +    @patch("pydis_site.apps.guides.views.guide.get_category") +    def test_guide_return_code_200(self, get_category_mock, get_guide_mock, get_time_mock): +        get_guide_mock.return_value = {"guide": "test", "metadata": {}} + +        url = reverse("guide:guide", args=["test-guide"]) +        response = self.client.get(url) +        self.assertEqual(response.status_code, 200) +        get_category_mock.assert_not_called() +        get_guide_mock.assert_called_once_with("test-guide", None) + +    @patch("pydis_site.apps.guides.views.guide.os.path.getmtime") +    @patch("pydis_site.apps.guides.views.guide.get_guide") +    @patch("pydis_site.apps.guides.views.guide.get_category") +    def test_guide_return_404(self, get_category_mock, get_guide_mock, get_time_mock):          """Check that return code is 404 when invalid guide provided.""" -        url = reverse("guide:guide", args=["invalid-guide"]) -        join_return_value = os.path.join( -            settings.BASE_DIR, "pydis_site", "apps", "guides", "tests", "test_guides", "invalid-guide.md" -        ) -        with patch("pydis_site.apps.guides.views.guide.os.path.join") as p: -            p.return_value = join_return_value -            response = self.client.get(url) +        get_guide_mock.side_effect = Http404("Guide not found.") +        url = reverse("guide:guide", args=["invalid-guide"]) +        response = self.client.get(url)          self.assertEqual(response.status_code, 404) +        get_guide_mock.assert_called_once_with("invalid-guide", None) +        get_category_mock.assert_not_called()  class TestCategoryView(TestCase): -    def test_valid_category_code_200(self): +    @patch("pydis_site.apps.guides.views.category.get_category") +    @patch("pydis_site.apps.guides.views.category.get_guides") +    def test_valid_category_code_200(self, get_guides_mock, get_category_mock):          """Check that return code is 200 when visiting valid category.""" -        url = reverse("guide:category", args=["category"]) -        base = os.path.join( -            settings.BASE_DIR, "pydis_site", "apps", "guides", "tests", "test_guides", "category" -        ) -        join_return_value = [base, os.path.join(base, "_info.yml")] +        get_category_mock.return_value = {"name": "test", "description": "test"} +        get_guides_mock.return_value = {} -        for filename in os.listdir(base): -            if filename.endswith(".md"): -                join_return_value.append(os.path.join(base, filename)) - -        with patch("pydis_site.apps.guides.views.guide.os.path.join") as p: -            p.side_effect = join_return_value -            response = self.client.get(url) +        url = reverse("guide:category", args=["category"]) +        response = self.client.get(url)          self.assertEqual(response.status_code, 200) +        get_guides_mock.assert_called_once_with("category") +        get_category_mock.assert_called_once_with("category") -    def test_invalid_category_code_404(self): +    @patch("pydis_site.apps.guides.views.category.get_category") +    @patch("pydis_site.apps.guides.views.category.get_guides") +    def test_invalid_category_code_404(self, get_guides_mock, get_category_mock):          """Check that return code is 404 when trying to visit invalid category.""" +        get_category_mock.side_effect = Http404("Category not found.") +          url = reverse("guide:category", args=["invalid-category"]) -        join_return_value = os.path.join( -            settings.BASE_DIR, "pydis_site", "apps", "guides", "tests", "test_guides", "invalid-category" -        ) -        with patch("pydis_site.apps.guides.views.guide.os.path.join") as p: -            p.return_value = join_return_value -            response = self.client.get(url) +        response = self.client.get(url)          self.assertEqual(response.status_code, 404) +        get_category_mock.assert_called_once_with("invalid-category") +        get_guides_mock.assert_not_called()  class TestCategoryGuidesView(TestCase): -    def test_valid_category_guide_code_200(self): +    @patch("pydis_site.apps.guides.views.guide.os.path.getmtime") +    @patch("pydis_site.apps.guides.views.guide.get_guide") +    @patch("pydis_site.apps.guides.views.guide.get_category") +    def test_valid_category_guide_code_200(self, get_category_mock, get_guide_mock, get_time_mock):          """Check that return code is 200 when visiting valid category article.""" -        url = reverse("guide:category_guide", args=["category", "test3"]) -        category_directory = os.path.join( -            settings.BASE_DIR, "pydis_site", "apps", "guides", "tests", "test_guides", "category" -        ) - -        with patch("pydis_site.apps.guides.views.guide.os.path.join") as p: -            p.side_effect = ( -                category_directory, -                os.path.join(category_directory, "test3.md"), -                os.path.join(category_directory, "_info.yml") -            ) -            response = self.client.get(url) +        get_guide_mock.return_value = {"guide": "test", "metadata": {}} +        url = reverse("guide:category_guide", args=["category", "test3"]) +        response = self.client.get(url)          self.assertEqual(response.status_code, 200) +        get_guide_mock.assert_called_once_with("test3", "category") +        get_category_mock.assert_called_once_with("category") -    def test_invalid_category_guide_code_404(self): +    @patch("pydis_site.apps.guides.views.guide.os.path.getmtime") +    @patch("pydis_site.apps.guides.views.guide.get_guide") +    @patch("pydis_site.apps.guides.views.guide.get_category") +    def test_invalid_category_guide_code_404(self, get_category_mock, get_guide_mock, get_time_mock):          """Check that return code is 200 when trying to visit invalid category article.""" -        url = reverse("guide:category_guide", args=["category", "invalid"]) -        category_directory = os.path.join( -            settings.BASE_DIR, "pydis_site", "apps", "guides", "tests", "test_guides", "category" -        ) - -        with patch("pydis_site.apps.guides.views.guide.os.path.join") as p: -            p.side_effect = ( -                category_directory, -                os.path.join(category_directory, "invalid.md"), -                os.path.join(category_directory, "_info.yml") -            ) -            response = self.client.get(url) - -        self.assertEqual(response.status_code, 404) - -    def test_invalid_category_code_404(self): -        """Check that response code is 404 when provided category for article is incorrect.""" -        url = reverse("guide:category_guide", args=["invalid", "guide"]) -        category_directory = os.path.join( -            settings.BASE_DIR, "pydis_site", "apps", "guides", "tests", "test_guides", "invalid" -        ) - -        with patch("pydis_site.apps.guides.views.guide.os.path.join") as p: -            p.return_value = category_directory -            response = self.client.get(url) +        get_guide_mock.side_effect = Http404("Guide not found.") +        url = reverse("guide:category_guide", args=["category", "invalid"]) +        response = self.client.get(url)          self.assertEqual(response.status_code, 404) +        get_guide_mock.assert_called_once_with("invalid", "category") +        get_category_mock.assert_not_called() | 
