| from unittest.mock import MagicMock | |
| import pytest | |
| from app import db | |
| from app.auth.jwt import create_access_token | |
| from app.user.models import User | |
| from app.user.schema import User as UserSchema | |
| from httpx import AsyncClient | |
| from main import app | |
| from sqlalchemy.orm import Session | |
| # 💡 NOTE Run tests with: pytest ./tests/test_router_user.py -v | |
| async def test_all_users(): | |
| mock_session = MagicMock(spec=Session) | |
| mock_user = User( | |
| name="John Doe", email="john@yahoo.com", password="123456", kwargs={"id": 1} | |
| ) | |
| mock_session.query(User).all.return_value = [mock_user] | |
| app.dependency_overrides[db.get_db] = lambda: mock_session | |
| async with AsyncClient(app=app, base_url="http://test") as ac: | |
| user_access_token = create_access_token({"sub": "john@gmail.com"}) | |
| response = await ac.get( | |
| "/user/", headers={"Authorization": f"Bearer {user_access_token}"} | |
| ) | |
| assert response.status_code == 200 | |
| users = response.json() | |
| assert len(users) == 1 | |
| assert users[0]["name"] == "John Doe" | |
| async def test_create_user_registration_success(): | |
| mock_session = MagicMock(spec=Session) | |
| request = UserSchema( | |
| id=0, name="John Doe", email="john@gmail.com", password="123456" | |
| ) | |
| mock_session.query(User).filter.return_value.first.return_value = None | |
| app.dependency_overrides[db.get_db] = lambda: mock_session | |
| async with AsyncClient(app=app, base_url="http://test") as ac: | |
| response = await ac.post("/user/", json=request.dict()) | |
| assert response.status_code == 201 | |
| async def test_create_user_registration_fails(): | |
| mock_session = MagicMock(spec=Session) | |
| mock_user = User(id=0, name="John Doe", email="john@gmail.com", password="123456") | |
| request = UserSchema( | |
| id=0, name="John Doe", email="john@gmail.com", password="123456" | |
| ) | |
| mock_session.query(User).filter.return_value.first.return_value = mock_user | |
| app.dependency_overrides[db.get_db] = lambda: mock_session | |
| async with AsyncClient(app=app, base_url="http://test") as ac: | |
| response = await ac.post("/user/", json=request.dict()) | |
| assert response.status_code == 400 | |