from django.test import TestCase from django.contrib.auth import get_user_model from django.urls import reverse from rest_framework.test import APIClient from rest_framework import status User = get_user_model() class UserModelTests(TestCase): def setUp(self): self.user_data = { 'email_address': 'Test@Example.com', 'username': 'TestUser', 'first_name': 'Test', 'last_name': 'User', 'date_of_birth': '1990-01-01', } def test_create_user_and_properties(self): user = User.objects.create_user(password='pass1234', **self.user_data) self.assertIsNotNone(user.pk) # email should be normalized by the manager self.assertEqual(user.email_address.lower(), 'test@example.com') # username should be saved lowercase by model.save() self.assertEqual(user.username, 'testuser') # full_name property self.assertEqual(user.full_name, 'Test User') def test_create_superuser(self): su = User.objects.create_superuser(password='adminpass', **self.user_data) self.assertTrue(su.is_staff) self.assertTrue(su.pk) class UserAPITests(TestCase): def setUp(self): self.client = APIClient() self.user = User.objects.create_user( password='pass1234', email_address='apiuser@example.com', username='apiuser', first_name='API', last_name='User', date_of_birth='1995-05-05', ) def test_list_users(self): url = '/api/users/' resp = self.client.get(url) self.assertEqual(resp.status_code, status.HTTP_200_OK) # Should contain at least the created user usernames = [u.get('username') for u in resp.json()] self.assertIn(self.user.username, usernames)