add tests for closing

This commit is contained in:
elina-israyelyan 2025-10-23 01:51:03 +04:00
parent ead6ff22b8
commit 1fea8e9d98
4 changed files with 72 additions and 8 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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