mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-11-24 03:45:48 +03:00
add tests for closing
This commit is contained in:
parent
ead6ff22b8
commit
1fea8e9d98
|
|
@ -18,6 +18,7 @@ class TestResource:
|
|||
|
||||
resource1 = TestResource()
|
||||
resource2 = TestResource()
|
||||
resource3 = TestResource()
|
||||
|
||||
|
||||
async def async_resource(resource):
|
||||
|
|
@ -34,6 +35,8 @@ class Container(containers.DeclarativeContainer):
|
|||
|
||||
resource1 = providers.Resource(async_resource, providers.Object(resource1))
|
||||
resource2 = providers.Resource(async_resource, providers.Object(resource2))
|
||||
context_local_resource = providers.ContextLocalResource(async_resource, providers.Object(resource3))
|
||||
context_local_resource_with_factory_object = providers.ContextLocalResource(async_resource, providers.Factory(TestResource))
|
||||
|
||||
|
||||
@inject
|
||||
|
|
@ -57,5 +60,13 @@ async def async_generator_injection(
|
|||
async def async_injection_with_closing(
|
||||
resource1: object = Closing[Provide[Container.resource1]],
|
||||
resource2: object = Closing[Provide[Container.resource2]],
|
||||
context_local_resource: object = Closing[Provide[Container.context_local_resource]],
|
||||
):
|
||||
return resource1, resource2
|
||||
return resource1, resource2, context_local_resource
|
||||
|
||||
|
||||
@inject
|
||||
async def async_injection_with_closing_context_local_resources(
|
||||
context_local_resource1: object = Closing[Provide[Container.context_local_resource_with_factory_object]],
|
||||
):
|
||||
return context_local_resource1
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ class TestResource:
|
|||
|
||||
resource1 = TestResource()
|
||||
resource2 = TestResource()
|
||||
resource3 = TestResource()
|
||||
|
||||
|
||||
async def async_resource(resource):
|
||||
|
|
@ -32,6 +33,8 @@ class Container(containers.DeclarativeContainer):
|
|||
|
||||
resource1 = providers.Resource(async_resource, providers.Object(resource1))
|
||||
resource2 = providers.Resource(async_resource, providers.Object(resource2))
|
||||
context_local_resource = providers.ContextLocalResource(async_resource, providers.Object(resource3))
|
||||
context_local_resource_with_factory_object = providers.ContextLocalResource(async_resource, providers.Factory(TestResource))
|
||||
|
||||
|
||||
@inject
|
||||
|
|
@ -46,5 +49,13 @@ async def async_injection(
|
|||
async def async_injection_with_closing(
|
||||
resource1: object = Closing[Provide["resource1"]],
|
||||
resource2: object = Closing[Provide["resource2"]],
|
||||
context_local_resource: object = Closing[Provide["context_local_resource"]],
|
||||
):
|
||||
return resource1, resource2
|
||||
return resource1, resource2, context_local_resource
|
||||
|
||||
|
||||
@inject
|
||||
async def async_injection_with_closing_context_local_resources(
|
||||
context_local_resource1: object = Closing[Provide["context_local_resource_with_factory_object"]]
|
||||
):
|
||||
return context_local_resource1
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
"""Async injection tests."""
|
||||
|
||||
from pytest import fixture, mark
|
||||
import asyncio
|
||||
|
||||
from pytest import fixture, mark
|
||||
from samples.wiring import asyncinjections
|
||||
|
||||
|
||||
|
|
@ -51,7 +52,7 @@ async def test_async_generator_injections() -> None:
|
|||
|
||||
@mark.asyncio
|
||||
async def test_async_injections_with_closing():
|
||||
resource1, resource2 = await asyncinjections.async_injection_with_closing()
|
||||
resource1, resource2, context_local_resource = await asyncinjections.async_injection_with_closing()
|
||||
|
||||
assert resource1 is asyncinjections.resource1
|
||||
assert asyncinjections.resource1.init_counter == 1
|
||||
|
|
@ -61,7 +62,11 @@ async def test_async_injections_with_closing():
|
|||
assert asyncinjections.resource2.init_counter == 1
|
||||
assert asyncinjections.resource2.shutdown_counter == 1
|
||||
|
||||
resource1, resource2 = await asyncinjections.async_injection_with_closing()
|
||||
assert context_local_resource is asyncinjections.resource3
|
||||
assert asyncinjections.resource3.init_counter == 1
|
||||
assert asyncinjections.resource3.shutdown_counter == 1
|
||||
|
||||
resource1, resource2, context_local_resource = await asyncinjections.async_injection_with_closing()
|
||||
|
||||
assert resource1 is asyncinjections.resource1
|
||||
assert asyncinjections.resource1.init_counter == 2
|
||||
|
|
@ -70,3 +75,19 @@ async def test_async_injections_with_closing():
|
|||
assert resource2 is asyncinjections.resource2
|
||||
assert asyncinjections.resource2.init_counter == 2
|
||||
assert asyncinjections.resource2.shutdown_counter == 2
|
||||
|
||||
assert context_local_resource is asyncinjections.resource3
|
||||
assert asyncinjections.resource3.init_counter == 2
|
||||
assert asyncinjections.resource3.shutdown_counter == 2
|
||||
|
||||
|
||||
@mark.asyncio
|
||||
async def test_async_injections_with_closing_concurrently():
|
||||
resource1, resource2 = await asyncio.gather(asyncinjections.async_injection_with_closing_context_local_resources(),
|
||||
asyncinjections.async_injection_with_closing_context_local_resources())
|
||||
assert resource1 != resource2
|
||||
|
||||
resource1 = await asyncinjections.Container.context_local_resource_with_factory_object()
|
||||
resource2 = await asyncinjections.Container.context_local_resource_with_factory_object()
|
||||
|
||||
assert resource1 == resource2
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
"""Async injection tests."""
|
||||
|
||||
from pytest import fixture, mark
|
||||
import asyncio
|
||||
|
||||
from pytest import fixture, mark
|
||||
from samples.wiringstringids import asyncinjections
|
||||
|
||||
|
||||
|
|
@ -34,7 +35,7 @@ async def test_async_injections():
|
|||
|
||||
@mark.asyncio
|
||||
async def test_async_injections_with_closing():
|
||||
resource1, resource2 = await asyncinjections.async_injection_with_closing()
|
||||
resource1, resource2, context_local_resource = await asyncinjections.async_injection_with_closing()
|
||||
|
||||
assert resource1 is asyncinjections.resource1
|
||||
assert asyncinjections.resource1.init_counter == 1
|
||||
|
|
@ -44,7 +45,11 @@ async def test_async_injections_with_closing():
|
|||
assert asyncinjections.resource2.init_counter == 1
|
||||
assert asyncinjections.resource2.shutdown_counter == 1
|
||||
|
||||
resource1, resource2 = await asyncinjections.async_injection_with_closing()
|
||||
assert context_local_resource is asyncinjections.resource3
|
||||
assert asyncinjections.resource3.init_counter == 1
|
||||
assert asyncinjections.resource3.shutdown_counter == 1
|
||||
|
||||
resource1, resource2, context_local_resource = await asyncinjections.async_injection_with_closing()
|
||||
|
||||
assert resource1 is asyncinjections.resource1
|
||||
assert asyncinjections.resource1.init_counter == 2
|
||||
|
|
@ -53,3 +58,19 @@ async def test_async_injections_with_closing():
|
|||
assert resource2 is asyncinjections.resource2
|
||||
assert asyncinjections.resource2.init_counter == 2
|
||||
assert asyncinjections.resource2.shutdown_counter == 2
|
||||
|
||||
assert context_local_resource is asyncinjections.resource3
|
||||
assert asyncinjections.resource3.init_counter == 2
|
||||
assert asyncinjections.resource3.shutdown_counter == 2
|
||||
|
||||
|
||||
@mark.asyncio
|
||||
async def test_async_injections_with_closing_concurrently():
|
||||
resource1, resource2 = await asyncio.gather(asyncinjections.async_injection_with_closing_context_local_resources(),
|
||||
asyncinjections.async_injection_with_closing_context_local_resources())
|
||||
assert resource1 != resource2
|
||||
|
||||
resource1 = await asyncinjections.Container.context_local_resource_with_factory_object()
|
||||
resource2 = await asyncinjections.Container.context_local_resource_with_factory_object()
|
||||
|
||||
assert resource1 == resource2
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user