diff options
author | 2020-09-21 16:11:38 +0300 | |
---|---|---|
committer | 2020-09-21 16:11:38 +0300 | |
commit | ce7df4304e91adac16d86463d295056c01006280 (patch) | |
tree | ebcf6fd635b0349d35fcef32804a44120f04ad48 | |
parent | Move guides and categories getting logic to utils for better testability (diff) |
Apply testability changes to views tests
-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() |