mirror of
https://github.com/koloideal/Argenta.git
synced 2026-06-10 10:05:28 +03:00
45 lines
1.0 KiB
Python
45 lines
1.0 KiB
Python
import io
|
|
from contextlib import redirect_stdout
|
|
|
|
from argenta.command import InputCommand
|
|
from dishka import Provider, make_container, Scope
|
|
|
|
from argenta import Router, Response
|
|
from argenta.di.integration import setup_dishka, FromDishka
|
|
|
|
|
|
class Service:
|
|
def hello(self) -> str:
|
|
return "world"
|
|
|
|
|
|
def get_service() -> Service:
|
|
return Service()
|
|
|
|
|
|
router = Router(title="DI")
|
|
|
|
|
|
@router.command("HELLO")
|
|
def hello(response: Response, service: FromDishka[Service]) -> None:
|
|
print(f"hello {service.hello()}")
|
|
|
|
|
|
class _FakeApp:
|
|
# Minimal stub for setup_dishka; app object is not used in unit tests
|
|
registered_routers = [router]
|
|
|
|
|
|
def test_hello_uses_service():
|
|
provider = Provider(scope=Scope.APP)
|
|
provider.provide(get_service)
|
|
|
|
container = make_container(provider)
|
|
setup_dishka(app=_FakeApp(), container=container, auto_inject=True)
|
|
|
|
# Call handler
|
|
with redirect_stdout(io.StringIO()) as stdout:
|
|
router.finds_appropriate_handler(InputCommand.parse("HELLO"))
|
|
|
|
assert "hello world" in stdout.getvalue()
|