Free and open source ticket system written in python
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

add tests for #7

+138 -1
+32
.github/workflows/django-tests.yml
··· 1 + name: Python Tests 2 + 3 + on: 4 + push: 5 + branches: '*' 6 + pull_request: 7 + branches: '*' 8 + 9 + jobs: 10 + build: 11 + 12 + runs-on: ubuntu-latest 13 + 14 + steps: 15 + - uses: actions/checkout@v2 16 + 17 + - name: Set up Python 3.12 18 + uses: actions/setup-python@v2 19 + with: 20 + python-version: 3.12 21 + 22 + - name: Install Poetry 23 + run: | 24 + curl -sSL https://install.python-poetry.org | python3 - 25 + 26 + - name: Install dependencies 27 + run: | 28 + poetry install 29 + 30 + - name: Run tests 31 + run: | 32 + poetry run python manage.py test
+106 -1
core/tests.py
··· 1 1 from django.test import TestCase 2 + from django.contrib.auth.models import Group 3 + from django.urls import reverse 4 + from .utils.initial_data import populate_groups 5 + from .utils.general import sainitize_username 6 + from .models import PawUser 7 + from django.conf import settings 2 8 3 - # Create your tests here. 9 + 10 + class PopulateGroupTestCase(TestCase): 11 + def setUp(self): 12 + populate_groups(None, None) 13 + 14 + def test_groups_created(self): 15 + self.assertEqual(Group.objects.count(), 2) 16 + self.assertEqual(Group.objects.filter(name="Client").count(), 1) 17 + self.assertEqual(Group.objects.filter(name="Supporter").count(), 1) 18 + 19 + class UsernameSainitizationTestCase(TestCase): 20 + def test_sainitize_username(self): 21 + self.assertEqual(sainitize_username("test"), "test") 22 + self.assertEqual(sainitize_username("test !!"), "test") 23 + 24 + class LoginViewTestCase(TestCase): 25 + def setUp(self): 26 + self.username = "testuser" 27 + self.password = "testpassword" 28 + self.user = PawUser.objects.create_user(username=self.username, password=self.password) 29 + 30 + def test_login_view(self): 31 + url = reverse("login") 32 + response = self.client.post(url, {"username": self.username, "password": self.password}) 33 + self.assertEqual(response.status_code, 302) 34 + self.assertEqual(response.url, reverse("home")) 35 + 36 + def test_login_view_invalid(self): 37 + url = reverse("login") 38 + response = self.client.post(url, {"username": self.username, "password": "invalid"}) 39 + self.assertEqual(response.status_code, 200) 40 + self.assertContains(response, "Please enter a correct username and password") 41 + 42 + def test_user_language(self): 43 + url = reverse("home") 44 + self.client.force_login(self.user) 45 + response = self.client.get(url) 46 + self.assertEqual(response.status_code, 302) 47 + self.client.cookies.load(response.cookies) 48 + self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, self.user.language) 49 + self.assertEqual(response.url, reverse("all_tickets")) 50 + 51 + class RegisterViewTestCase(TestCase): 52 + 53 + def test_register_view(self): 54 + url = reverse("register") 55 + response = self.client.post(url, {"username": "test", "email": "test@example.com", "password": "testtesttesttest", "password_confirm": "testtesttesttest"}) 56 + self.assertEqual(response.status_code, 302) 57 + self.assertEqual(response.url, reverse("login")) 58 + self.assertEqual(PawUser.objects.count(), 1) 59 + user = PawUser.objects.first() 60 + self.assertEqual(user.username, "test") 61 + self.assertEqual(user.email, "test@example.com") 62 + self.assertTrue(user.check_password("testtesttesttest")) 63 + self.assertEqual(user.groups.count(), 0) # No group assigned, might want to give Client group by default 64 + 65 + def test_register_view_password_too_short(self): 66 + url = reverse("register") 67 + response = self.client.post(url, {"username": "test", "email": "test@example.com", "password": "123456789", "password_confirm": "123456789"}) 68 + self.assertEqual(response.status_code, 200) 69 + self.assertContains(response, "Password must be at least 10 characters long.") 70 + 71 + def test_register_view_password_mismatch(self): 72 + url = reverse("register") 73 + response = self.client.post(url, {"username": "test", "email": "test@example.com", "password": "1234567890", "password_confirm": "123456789"}) 74 + self.assertEqual(response.status_code, 200) 75 + self.assertContains(response, "Password and Confirm Password do not match.") 76 + 77 + class SettingsViewTestCase(TestCase): 78 + 79 + def test_settings_view(self): 80 + url = reverse("settings") 81 + response = self.client.get(url) 82 + self.assertEqual(response.status_code, 302) 83 + self.assertEqual(response.url, "%s?next=%s" % (reverse("login"), reverse("settings"))) 84 + 85 + user = PawUser.objects.create_user(username="test", password="testtesttesttest", email="test@example.com") 86 + self.client.force_login(user) 87 + response = self.client.get(url) 88 + self.assertEqual(response.status_code, 200) 89 + self.assertContains(response, "Settings") 90 + 91 + response = self.client.post(url, {"language": "fr", "email": "test@example.com"}) 92 + self.assertEqual(response.status_code, 200) 93 + user.refresh_from_db() 94 + self.assertEqual(user.language, "fr") 95 + self.client.cookies.load(response.cookies) 96 + self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, "fr") 97 + 98 + response = self.client.post(url, {"language": "invalid", "email": "test@example.com"}) 99 + self.assertEqual(response.status_code, 200) 100 + self.client.cookies.load(response.cookies) 101 + self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, "fr") 102 + 103 + response = self.client.post(url, {"language": "en", "email": "test@example.com"}) 104 + self.assertEqual(response.status_code, 200) 105 + user.refresh_from_db() 106 + self.assertEqual(user.language, "en") 107 + self.client.cookies.load(response.cookies) 108 + self.assertEqual(self.client.cookies[settings.LANGUAGE_COOKIE_NAME].value, "en")