From 403fb8ffa56426a1825918018937fa522e4bd03e Mon Sep 17 00:00:00 2001 From: Alexander-D-Karpov Date: Mon, 16 Oct 2023 01:50:33 +0300 Subject: [PATCH] added full tests for user's api --- akarpov/users/api/serializers.py | 2 +- akarpov/users/tests/test_api_views.py | 72 +++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 1 deletion(-) diff --git a/akarpov/users/api/serializers.py b/akarpov/users/api/serializers.py index 580e6f7..704212e 100644 --- a/akarpov/users/api/serializers.py +++ b/akarpov/users/api/serializers.py @@ -25,7 +25,7 @@ def validate_token(self, token): class UserPublicInfoSerializer(serializers.ModelSerializer): url = serializers.HyperlinkedIdentityField( - view_name="api:users:user_retrieve_username_api", lookup_field="username" + view_name="api:users:get", lookup_field="username" ) class Meta: diff --git a/akarpov/users/tests/test_api_views.py b/akarpov/users/tests/test_api_views.py index b6721f7..b167932 100644 --- a/akarpov/users/tests/test_api_views.py +++ b/akarpov/users/tests/test_api_views.py @@ -1,3 +1,4 @@ +import pytest from django.urls import reverse_lazy from pytest_lambda import lambda_fixture, static_fixture from rest_framework import status @@ -27,3 +28,74 @@ def test_return_err_if_data_is_invalid( assert response.status_code == status.HTTP_400_BAD_REQUEST user.refresh_from_db() assert not user.check_password(new_password) + + +class TestUserListRetrieve: + url = static_fixture(reverse_lazy("api:users:list")) + url_retrieve = static_fixture( + reverse_lazy("api:users:get", kwargs={"username": "TestUser"}) + ) + user = lambda_fixture( + lambda user_factory: user_factory(password="P@ssw0rd", username="TestUser") + ) + + def test_user_list_site_users(self, api_user_client, url, user): + response = api_user_client.get(url) + + assert response.status_code == status.HTTP_200_OK + assert response.json()["count"] == 1 + assert response.json()["results"][0]["username"] == user.username + + def test_user_retrieve_by_username(self, api_user_client, url_retrieve, user): + response = api_user_client.get(url_retrieve) + + assert response.status_code == status.HTTP_200_OK + assert response.json()["username"] == user.username + assert response.json()["id"] == user.id + + def test_user_retrieve_by_id(self, api_user_client, user): + response = api_user_client.get( + reverse_lazy("api:users:get_by_id", kwargs={"pk": user.id}) + ) + + assert response.status_code == status.HTTP_200_OK + assert response.json()["username"] == user.username + assert response.json()["id"] == user.id + + +class TestUserSelfRetrieve: + url = static_fixture(reverse_lazy("api:users:self")) + user = lambda_fixture(lambda user_factory: user_factory(password="P@ssw0rd")) + + def test_user_self_retrieve(self, api_user_client, url, user): + response = api_user_client.get(url) + + assert response.status_code == status.HTTP_200_OK + assert response.json()["username"] == user.username + assert response.json()["id"] == user.id + + def test_user_self_update_put(self, api_user_client, url, user): + response = api_user_client.put(url, {"username": "NewUsername"}) + + assert response.status_code == status.HTTP_200_OK + assert response.json()["username"] == "NewUsername" + assert response.json()["id"] == user.id + user.refresh_from_db() + assert user.username == "NewUsername" + + def test_user_self_update_patch(self, api_user_client, url, user): + response = api_user_client.patch(url, {"username": "NewUsername"}) + + assert response.status_code == status.HTTP_200_OK + assert response.json()["username"] == "NewUsername" + assert response.json()["id"] == user.id + user.refresh_from_db() + assert user.username == "NewUsername" + + def test_user_self_delete(self, api_user_client, url, user): + response = api_user_client.delete(url) + + assert response.status_code == status.HTTP_204_NO_CONTENT + assert response.content == b"" + with pytest.raises(user.DoesNotExist): + user.refresh_from_db()