diff --git a/shynet/core/factories.py b/shynet/core/factories.py new file mode 100644 index 0000000..fb8d7ec --- /dev/null +++ b/shynet/core/factories.py @@ -0,0 +1,36 @@ +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..249a7b6 --- /dev/null +++ b/shynet/dashboard/tests/tests_dashboard_views.py @@ -0,0 +1,45 @@ +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)