mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-06-25 16:03:15 +03:00
Add tests
This commit is contained in:
parent
6431232510
commit
479ac188f0
|
@ -3,3 +3,6 @@ fastapi
|
||||||
uvicorn
|
uvicorn
|
||||||
pyyaml
|
pyyaml
|
||||||
sqlalchemy
|
sqlalchemy
|
||||||
|
pytest
|
||||||
|
requests
|
||||||
|
pytest-cov
|
||||||
|
|
|
@ -13,12 +13,12 @@ class Container(containers.DeclarativeContainer):
|
||||||
|
|
||||||
db = providers.Singleton(Database, db_url=config.db.url)
|
db = providers.Singleton(Database, db_url=config.db.url)
|
||||||
|
|
||||||
users_repository = providers.Factory(
|
user_repository = providers.Factory(
|
||||||
UserRepository,
|
UserRepository,
|
||||||
session_factory=db.provided.session,
|
session_factory=db.provided.session,
|
||||||
)
|
)
|
||||||
|
|
||||||
user_service = providers.Factory(
|
user_service = providers.Factory(
|
||||||
UserService,
|
UserService,
|
||||||
users_repository=users_repository,
|
user_repository=user_repository,
|
||||||
)
|
)
|
||||||
|
|
|
@ -9,8 +9,8 @@ from .models import User
|
||||||
|
|
||||||
class UserService:
|
class UserService:
|
||||||
|
|
||||||
def __init__(self, users_repository: UserRepository) -> None:
|
def __init__(self, user_repository: UserRepository) -> None:
|
||||||
self._repository: UserRepository = users_repository
|
self._repository: UserRepository = user_repository
|
||||||
|
|
||||||
def get_users(self) -> Iterator[User]:
|
def get_users(self) -> Iterator[User]:
|
||||||
return self._repository.get_all()
|
return self._repository.get_all()
|
||||||
|
|
107
examples/miniapps/fastapi-sqlalchemy/webapp/tests.py
Normal file
107
examples/miniapps/fastapi-sqlalchemy/webapp/tests.py
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
"""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'}
|
Loading…
Reference in New Issue
Block a user