From 16ff892d46ea942d7bd11225abd56ecc80a82881 Mon Sep 17 00:00:00 2001 From: Alex Ottr Date: Fri, 12 Apr 2024 22:45:37 +0200 Subject: [PATCH 1/3] add tests for #7 --- .github/workflows/django-tests.yml | 32 +++++++++ core/tests.py | 107 ++++++++++++++++++++++++++++- 2 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/django-tests.yml diff --git a/.github/workflows/django-tests.yml b/.github/workflows/django-tests.yml new file mode 100644 index 0000000..88e38ac --- /dev/null +++ b/.github/workflows/django-tests.yml @@ -0,0 +1,32 @@ +name: Python Tests + +on: + push: + branches: '*' + pull_request: + branches: '*' + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Set up Python 3.12 + uses: actions/setup-python@v2 + with: + python-version: 3.12 + + - name: Install Poetry + run: | + curl -sSL https://install.python-poetry.org | python3 - + + - name: Install dependencies + run: | + poetry install + + - name: Run tests + run: | + poetry run python manage.py test \ No newline at end of file diff --git a/core/tests.py b/core/tests.py index 7ce503c..4b033f8 100644 --- a/core/tests.py +++ b/core/tests.py @@ -1,3 +1,108 @@ from django.test import TestCase +from django.contrib.auth.models import Group +from django.urls import reverse +from .utils.initial_data import populate_groups +from .utils.general import sainitize_username +from .models import PawUser +from django.conf import settings -# Create your tests here. + +class PopulateGroupTestCase(TestCase): + def setUp(self): + populate_groups(None, None) + + def test_groups_created(self): + self.assertEqual(Group.objects.count(), 2) + self.assertEqual(Group.objects.filter(name="Client").count(), 1) + self.assertEqual(Group.objects.filter(name="Supporter").count(), 1) + +class UsernameSainitizationTestCase(TestCase): + def test_sainitize_username(self): + self.assertEqual(sainitize_username("test"), "test") + self.assertEqual(sainitize_username("test !!"), "test") + +class LoginViewTestCase(TestCase): + def setUp(self): + self.username = "testuser" + self.password = "testpassword" + self.user = PawUser.objects.create_user(username=self.username, password=self.password) + + def test_login_view(self): + url = reverse("login") + response = self.client.post(url, {"username": self.username, "password": self.password}) + self.assertEqual(response.status_code, 302) + self.assertEqual(response.url, reverse("home")) + + def test_login_view_invalid(self): + url = reverse("login") + response = self.client.post(url, {"username": self.username, "password": "invalid"}) + self.assertEqual(response.status_code, 200) + self.assertContains(response, "Please enter a correct username and password") + + def test_user_language(self): + url = reverse("home") + self.client.force_login(self.user) + response = self.client.get(url) + self.assertEqual(response.status_code, 302) + self.client.cookies.load(response.cookies) + self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, self.user.language) + self.assertEqual(response.url, reverse("all_tickets")) + +class RegisterViewTestCase(TestCase): + + def test_register_view(self): + url = reverse("register") + response = self.client.post(url, {"username": "test", "email": "test@example.com", "password": "testtesttesttest", "password_confirm": "testtesttesttest"}) + self.assertEqual(response.status_code, 302) + self.assertEqual(response.url, reverse("login")) + self.assertEqual(PawUser.objects.count(), 1) + user = PawUser.objects.first() + self.assertEqual(user.username, "test") + self.assertEqual(user.email, "test@example.com") + self.assertTrue(user.check_password("testtesttesttest")) + self.assertEqual(user.groups.count(), 0) # No group assigned, might want to give Client group by default + + def test_register_view_password_too_short(self): + url = reverse("register") + response = self.client.post(url, {"username": "test", "email": "test@example.com", "password": "123456789", "password_confirm": "123456789"}) + self.assertEqual(response.status_code, 200) + self.assertContains(response, "Password must be at least 10 characters long.") + + def test_register_view_password_mismatch(self): + url = reverse("register") + response = self.client.post(url, {"username": "test", "email": "test@example.com", "password": "1234567890", "password_confirm": "123456789"}) + self.assertEqual(response.status_code, 200) + self.assertContains(response, "Password and Confirm Password do not match.") + +class SettingsViewTestCase(TestCase): + + def test_settings_view(self): + url = reverse("settings") + response = self.client.get(url) + self.assertEqual(response.status_code, 302) + self.assertEqual(response.url, "%s?next=%s" % (reverse("login"), reverse("settings"))) + + user = PawUser.objects.create_user(username="test", password="testtesttesttest", email="test@example.com") + self.client.force_login(user) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + self.assertContains(response, "Settings") + + response = self.client.post(url, {"language": "fr", "email": "test@example.com"}) + self.assertEqual(response.status_code, 200) + user.refresh_from_db() + self.assertEqual(user.language, "fr") + self.client.cookies.load(response.cookies) + self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, "fr") + + response = self.client.post(url, {"language": "invalid", "email": "test@example.com"}) + self.assertEqual(response.status_code, 200) + self.client.cookies.load(response.cookies) + self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, "fr") + + response = self.client.post(url, {"language": "en", "email": "test@example.com"}) + self.assertEqual(response.status_code, 200) + user.refresh_from_db() + self.assertEqual(user.language, "en") + self.client.cookies.load(response.cookies) + self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, "en") -- 2.51.2 From ea3c6e192a2a4636b6c6fa3a2505c7bc4cc733ab Mon Sep 17 00:00:00 2001 From: Alex Ottr Date: Fri, 12 Apr 2024 22:47:45 +0200 Subject: [PATCH 2/3] update branches config --- .github/workflows/django-tests.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/django-tests.yml b/.github/workflows/django-tests.yml index 88e38ac..79b629c 100644 --- a/.github/workflows/django-tests.yml +++ b/.github/workflows/django-tests.yml @@ -2,9 +2,11 @@ name: Python Tests on: push: - branches: '*' + branches: + - '**' pull_request: - branches: '*' + branches: + - '**' jobs: build: -- 2.51.2 From cd75f658da0d7c4791a123109ac1e462d04d9d0d Mon Sep 17 00:00:00 2001 From: Alex Ottr Date: Fri, 12 Apr 2024 22:49:58 +0200 Subject: [PATCH 3/3] add env variables --- .github/workflows/django-tests.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/django-tests.yml b/.github/workflows/django-tests.yml index 79b629c..5295c49 100644 --- a/.github/workflows/django-tests.yml +++ b/.github/workflows/django-tests.yml @@ -9,7 +9,7 @@ on: - '**' jobs: - build: + test: runs-on: ubuntu-latest @@ -30,5 +30,9 @@ jobs: poetry install - name: Run tests + env: + SECRET_KEY: 'asdf' + DEBUG: 'True' + ALLOWED_HOSTS: 'localhost' run: | poetry run python manage.py test \ No newline at end of file -- 2.51.2