|
| 1 | +from random import choices |
| 2 | +from string import ascii_letters |
| 3 | +from unittest.mock import AsyncMock |
| 4 | + |
| 5 | +import pytest |
| 6 | +from fastapi import ( |
| 7 | + Depends, |
| 8 | + Request, |
| 9 | +) |
| 10 | + |
| 11 | +from fastapi_jsonapi.utils.dependency_helper import DependencyHelper |
| 12 | + |
| 13 | +pytestmark = pytest.mark.asyncio |
| 14 | + |
| 15 | + |
| 16 | +class TestDependencyHelper: |
| 17 | + async def test_dependency_helper(self): |
| 18 | + header_key = "".join(choices(ascii_letters, k=10)) |
| 19 | + header_value = "".join(choices(ascii_letters, k=12)) |
| 20 | + data_1 = object() |
| 21 | + data_2 = object() |
| 22 | + data_3 = object() |
| 23 | + |
| 24 | + def sub_dependency(): |
| 25 | + return data_1 |
| 26 | + |
| 27 | + def some_dependency(sub_dep_1=Depends(sub_dependency)): |
| 28 | + return sub_dep_1 |
| 29 | + |
| 30 | + async def some_async_dependency(): |
| 31 | + return data_3 |
| 32 | + |
| 33 | + def some_function( |
| 34 | + req: Request, |
| 35 | + d1_as_dep=Depends(some_dependency), |
| 36 | + d3_as_dep=Depends(some_async_dependency), |
| 37 | + ): |
| 38 | + return d1_as_dep, data_2, d3_as_dep, req.headers.get(header_key) |
| 39 | + |
| 40 | + request = Request( |
| 41 | + { |
| 42 | + "type": "http", |
| 43 | + "path": "/foo/bar", |
| 44 | + "headers": [(header_key.lower().encode("latin-1"), header_value.encode("latin-1"))], |
| 45 | + "query_string": "", |
| 46 | + "fastapi_astack": AsyncMock(), |
| 47 | + }, |
| 48 | + ) |
| 49 | + # dirty |
| 50 | + request._body = b"" |
| 51 | + |
| 52 | + # prepare dependency helper |
| 53 | + dep_helper = DependencyHelper(request) |
| 54 | + # run a function with dependencies |
| 55 | + d1, d2, d3, h_value = await dep_helper.run(some_function) |
| 56 | + assert d1 is data_1 |
| 57 | + assert d2 is data_2 |
| 58 | + assert d3 is data_3 |
| 59 | + assert h_value == header_value |
0 commit comments