from django.test import TestCase from django.contrib.auth import get_user_model from rest_framework.test import APIClient from rest_framework import status User = get_user_model() class UserListAPITests(TestCase): def setUp(self): self.client = APIClient() self.user = User.objects.create_user( password='pass1234', email_address='apiuser@example.com', first_name='API', last_name='User', date_of_birth='1995-05-05', ) def test_list_users(self): url = '/api/user/' resp = self.client.get(url) self.assertEqual(resp.status_code, status.HTTP_200_OK) data = resp.json() self.assertIsInstance(data, (list, dict)) def test_api_response_contains_expected_fields(self): url = '/api/user/' resp = self.client.get(url) self.assertEqual(resp.status_code, status.HTTP_200_OK) data = resp.json() if isinstance(data, dict) and 'results' in data: users = data['results'] else: users = data self.assertTrue(len(users) >= 1) sample = users[0] expected_keys = {'id', 'uuid', 'email_address', 'first_name', 'last_name', 'bio', 'timezone', 'avatar_url'} self.assertTrue(expected_keys.issubset(set(sample.keys()))) def test_retrieve_user_by_uuid(self): url = f'/api/user/{self.user.uuid}/' resp = self.client.get(url) self.assertEqual(resp.status_code, status.HTTP_200_OK) data = resp.json() self.assertEqual(data['email_address'], 'apiuser@example.com') def test_retrieve_user_not_found(self): import uuid fake_uuid = uuid.uuid4() url = f'/api/user/{fake_uuid}/' resp = self.client.get(url) self.assertEqual(resp.status_code, status.HTTP_404_NOT_FOUND)