From 780b71083a739a672de87e51110d4ef9094f90ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio?= Date: Sun, 14 Nov 2021 07:09:55 +0200 Subject: [PATCH] Add first factories and first dashboard tests (#172) * Add factories and first dashboard tests * Code cleanup Co-authored-by: R. Miles McCain --- shynet/core/factories.py | 37 ++++++++++++++++ shynet/core/tests/__init__.py | 1 + shynet/dashboard/tests/__init__.py | 0 .../dashboard/tests/tests_dashboard_views.py | 43 +++++++++++++++++++ shynet/shynet/settings.py | 2 +- 5 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 shynet/core/factories.py create mode 100644 shynet/core/tests/__init__.py create mode 100644 shynet/dashboard/tests/__init__.py create mode 100644 shynet/dashboard/tests/tests_dashboard_views.py diff --git a/shynet/core/factories.py b/shynet/core/factories.py new file mode 100644 index 0000000..f27756e --- /dev/null +++ b/shynet/core/factories.py @@ -0,0 +1,37 @@ +from django.contrib.auth import get_user_model +import factory +from factory.django import DjangoModelFactory +from .models import Service + + +class UserFactory(DjangoModelFactory): + username = factory.Faker("user_name") + email = factory.Faker("email") + name = factory.Faker("name") + + @post_generation + def password(self, create, extracted, **kwargs): + password = ( + extracted + if extracted + else factory.Faker( + "password", + length=42, + special_chars=True, + digits=True, + upper_case=True, + lower_case=True, + ).evaluate(None, None, extra={"locale": None}) + ) + self.set_password(password) + + class Meta: + model = get_user_model() + django_get_or_create = ["username"] + + +class ServiceFactory(DjangoModelFactory): + class Meta: + model = Service + + name = factory.Faker("company") diff --git a/shynet/core/tests/__init__.py b/shynet/core/tests/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/shynet/core/tests/__init__.py @@ -0,0 +1 @@ + diff --git a/shynet/dashboard/tests/__init__.py b/shynet/dashboard/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/shynet/dashboard/tests/tests_dashboard_views.py b/shynet/dashboard/tests/tests_dashboard_views.py new file mode 100644 index 0000000..d1da48c --- /dev/null +++ b/shynet/dashboard/tests/tests_dashboard_views.py @@ -0,0 +1,43 @@ +from django.test import TestCase, RequestFactory +from django.conf import settings +from django.urls import reverse +from core.factories import UserFactory + +from dashboard.views import DashboardView + + +class QuestionModelTests(TestCase): + def setUp(self): + # Every test needs access to the request factory. + self.factory = RequestFactory() + self.user = UserFactory() + + def tearDown(self): + pass + + def tests_unauthenticated_dashboard_view(self): + """ + GIVEN: Unauthenticated user + WHEN: Accessing the dashboard view + THEN: It's redirected to login page with NEXT url to dashboard + """ + login_url = settings.LOGIN_URL + response = self.client.get(reverse("dashboard:dashboard")) + + self.assertEqual(response.status_code, 302) + self.assertEqual( + response.url, f"{login_url}?next={reverse('dashboard:dashboard')}" + ) + + def tests_authenticated_dashboard_view(self): + """ + GIVEN: Authenticated user + WHEN: Accessing the dashboard view + THEN: It should respond with 200 and render the view + """ + request = self.factory.get(reverse("dashboard:dashboard")) + request.user = self.user + + # Use this syntax for class-based views. + response = DashboardView.as_view()(request) + self.assertEqual(response.status_code, 200) diff --git a/shynet/shynet/settings.py b/shynet/shynet/settings.py index 709ee75..e461481 100644 --- a/shynet/shynet/settings.py +++ b/shynet/shynet/settings.py @@ -299,7 +299,7 @@ else: EMAIL_USE_TLS = os.environ.get("EMAIL_USE_TLS") # Auto fields -DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' +DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" # NPM