File size: 2,239 Bytes
6ab520d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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


@pytest.mark.asyncio
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"


@pytest.mark.asyncio
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


@pytest.mark.asyncio
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