55 lines
No EOL
1.8 KiB
Python
55 lines
No EOL
1.8 KiB
Python
from django.test import TestCase
|
|
from django.contrib.auth import get_user_model
|
|
from rest_framework.test import APIClient
|
|
from rest_framework.status import HTTP_200_OK, HTTP_404_NOT_FOUND
|
|
|
|
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, 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, 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, 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, HTTP_404_NOT_FOUND) |