chore(logindata/tests): add views tests

Co-authored by: Claude
pull/154/head^2
Christian Merten 4 months ago
parent 1d519d70dc
commit 44354cb681
Signed by: christian.merten
GPG Key ID: D953D69721B948B3

@ -1,3 +0,0 @@
from django.test import TestCase
# Create your tests here.

@ -0,0 +1 @@
from .views import *

@ -0,0 +1,147 @@
from http import HTTPStatus
from django.test import TestCase, Client
from django.urls import reverse
from django.utils import timezone
from django.utils.translation import gettext as _
from django.contrib.auth.models import User, Group
from members.models import Member, DIVERSE
from ..models import RegistrationPassword, initial_user_setup
class RegisterViewTestCase(TestCase):
def setUp(self):
self.client = Client()
# Create a test member with invite key
self.member = Member.objects.create(
prename='Test',
lastname='User',
birth_date=timezone.now().date(),
email='test@example.com',
gender=DIVERSE,
invite_as_user_key='test_key_123'
)
# Create a registration password
self.registration_password = RegistrationPassword.objects.create(
password='test_password'
)
# Get or create Standard group for user setup
self.standard_group, created = Group.objects.get_or_create(name='Standard')
def test_register_get_without_key_redirects(self):
"""Test GET request without key redirects to startpage."""
url = reverse('logindata:register')
response = self.client.get(url)
self.assertEqual(response.status_code, HTTPStatus.FOUND)
def test_register_post_without_key_redirects(self):
"""Test POST request without key redirects to startpage."""
url = reverse('logindata:register')
response = self.client.post(url)
self.assertEqual(response.status_code, HTTPStatus.FOUND)
def test_register_get_with_empty_key_shows_failed(self):
"""Test GET request with empty key shows registration failed page."""
url = reverse('logindata:register')
response = self.client.get(url, {'key': ''})
self.assertEqual(response.status_code, HTTPStatus.OK)
self.assertContains(response, _('Something went wrong. The registration key is invalid or has expired.'))
def test_register_get_with_invalid_key_shows_failed(self):
"""Test GET request with invalid key shows registration failed page."""
url = reverse('logindata:register')
response = self.client.get(url, {'key': 'invalid_key'})
self.assertEqual(response.status_code, HTTPStatus.OK)
self.assertContains(response, _('Something went wrong. The registration key is invalid or has expired.'))
def test_register_get_with_valid_key_shows_password_form(self):
"""Test GET request with valid key shows password entry form."""
url = reverse('logindata:register')
response = self.client.get(url, {'key': self.member.invite_as_user_key})
self.assertEqual(response.status_code, HTTPStatus.OK)
self.assertContains(response, _('Set login data'))
self.assertContains(response, _('Welcome, '))
self.assertContains(response, self.member.prename)
def test_register_post_without_password_shows_failed(self):
"""Test POST request without password shows registration failed page."""
url = reverse('logindata:register')
response = self.client.post(url, {'key': self.member.invite_as_user_key})
self.assertEqual(response.status_code, HTTPStatus.OK)
self.assertContains(response, _('Something went wrong. The registration key is invalid or has expired.'))
def test_register_post_with_wrong_password_shows_error(self):
"""Test POST request with wrong password shows error message."""
url = reverse('logindata:register')
response = self.client.post(url, {
'key': self.member.invite_as_user_key,
'password': 'wrong_password'
})
self.assertEqual(response.status_code, HTTPStatus.OK)
self.assertContains(response, _('You entered a wrong password.'))
def test_register_post_with_correct_password_shows_form(self):
"""Test POST request with correct password shows user creation form."""
url = reverse('logindata:register')
response = self.client.post(url, {
'key': self.member.invite_as_user_key,
'password': self.registration_password.password
})
self.assertEqual(response.status_code, HTTPStatus.OK)
self.assertContains(response, _('Set login data'))
self.assertContains(response, self.member.suggested_username())
def test_register_post_with_save_and_invalid_form_shows_errors(self):
"""Test POST request with save but invalid form shows form errors."""
url = reverse('logindata:register')
response = self.client.post(url, {
'key': self.member.invite_as_user_key,
'password': self.registration_password.password,
'save': 'true',
'username': '', # Invalid - empty username
'password1': 'testpass123',
'password2': 'different_pass' # Invalid - passwords don't match
})
self.assertEqual(response.status_code, HTTPStatus.OK)
self.assertContains(response, _('Set login data'))
def test_register_post_with_save_and_valid_form_shows_success(self):
"""Test POST request with save and valid form shows success page."""
url = reverse('logindata:register')
response = self.client.post(url, {
'key': self.member.invite_as_user_key,
'password': self.registration_password.password,
'save': 'true',
'username': 'testuser',
'password1': 'testpass123',
'password2': 'testpass123'
})
self.assertEqual(response.status_code, HTTPStatus.OK)
self.assertContains(response, _('You successfully set your login data. You can now proceed to'))
# Verify user was created and associated with member
user = User.objects.get(username='testuser')
self.assertEqual(user.is_staff, True)
self.member.refresh_from_db()
self.assertEqual(self.member.user, user)
self.assertEqual(self.member.invite_as_user_key, '')
def test_register_post_with_save_and_no_standard_group_shows_failed(self):
"""Test POST request with save but no Standard group shows failed page."""
# Delete the Standard group
self.standard_group.delete()
url = reverse('logindata:register')
response = self.client.post(url, {
'key': self.member.invite_as_user_key,
'password': self.registration_password.password,
'save': 'true',
'username': 'testuser',
'password1': 'testpass123',
'password2': 'testpass123'
})
self.assertEqual(response.status_code, HTTPStatus.OK)
self.assertContains(response, _('Something went wrong. The registration key is invalid or has expired.'))
Loading…
Cancel
Save