"""Tests module.""" from unittest import mock import pytest from fastapi.testclient import TestClient from .repositories import UserRepository, UserNotFoundError from .models import User from .application import app @pytest.fixture def client(): yield TestClient(app) def test_get_list(client): repository_mock = mock.Mock(spec=UserRepository) repository_mock.get_all.return_value = [ User(id=1, email="test1@email.com", hashed_password="pwd", is_active=True), User(id=2, email="test2@email.com", hashed_password="pwd", is_active=False), ] with app.container.user_repository.override(repository_mock): response = client.get("/users") assert response.status_code == 200 data = response.json() assert data == [ {"id": 1, "email": "test1@email.com", "hashed_password": "pwd", "is_active": True}, {"id": 2, "email": "test2@email.com", "hashed_password": "pwd", "is_active": False}, ] def test_get_by_id(client): repository_mock = mock.Mock(spec=UserRepository) repository_mock.get_by_id.return_value = User( id=1, email="xyz@email.com", hashed_password="pwd", is_active=True, ) with app.container.user_repository.override(repository_mock): response = client.get("/users/1") assert response.status_code == 200 data = response.json() assert data == {"id": 1, "email": "xyz@email.com", "hashed_password": "pwd", "is_active": True} repository_mock.get_by_id.assert_called_once_with(1) def test_get_by_id_404(client): repository_mock = mock.Mock(spec=UserRepository) repository_mock.get_by_id.side_effect = UserNotFoundError(1) with app.container.user_repository.override(repository_mock): response = client.get("/users/1") assert response.status_code == 404 @mock.patch("webapp.services.uuid4", return_value="xyz") def test_add(_, client): repository_mock = mock.Mock(spec=UserRepository) repository_mock.add.return_value = User( id=1, email="xyz@email.com", hashed_password="pwd", is_active=True, ) with app.container.user_repository.override(repository_mock): response = client.post("/users") assert response.status_code == 201 data = response.json() assert data == {"id": 1, "email": "xyz@email.com", "hashed_password": "pwd", "is_active": True} repository_mock.add.assert_called_once_with(email="xyz@email.com", password="pwd") def test_remove(client): repository_mock = mock.Mock(spec=UserRepository) with app.container.user_repository.override(repository_mock): response = client.delete("/users/1") assert response.status_code == 204 repository_mock.delete_by_id.assert_called_once_with(1) def test_remove_404(client): repository_mock = mock.Mock(spec=UserRepository) repository_mock.delete_by_id.side_effect = UserNotFoundError(1) with app.container.user_repository.override(repository_mock): response = client.delete("/users/1") assert response.status_code == 404 def test_status(client): response = client.get("/status") assert response.status_code == 200 data = response.json() assert data == {"status": "OK"}