diff --git a/tests/unit/samples/wiringstringids/resourceclosing.py b/tests/unit/samples/wiringstringids/resourceclosing.py index 6360e15c..afee7f7b 100644 --- a/tests/unit/samples/wiringstringids/resourceclosing.py +++ b/tests/unit/samples/wiringstringids/resourceclosing.py @@ -25,6 +25,11 @@ class FactoryService: self.service = service +class NestedService: + def __init__(self, factory_service: FactoryService): + self.factory_service = factory_service + + def init_service(): service = Service() service.init() @@ -36,6 +41,7 @@ class Container(containers.DeclarativeContainer): service = providers.Resource(init_service) factory_service = providers.Factory(FactoryService, service) + nested_service = providers.Factory(NestedService, factory_service) @inject @@ -46,3 +52,10 @@ def test_function(service: Service = Closing[Provide["service"]]): @inject def test_function_dependency(factory: FactoryService = Closing[Provide["factory_service"]]): return factory + + +@inject +def test_function_nested_dependency( + nested: NestedService = Closing[Provide["nested_service"]] +): + return nested diff --git a/tests/unit/wiring/string_ids/test_main_py36.py b/tests/unit/wiring/string_ids/test_main_py36.py index d4c49fe8..1507b8e7 100644 --- a/tests/unit/wiring/string_ids/test_main_py36.py +++ b/tests/unit/wiring/string_ids/test_main_py36.py @@ -306,6 +306,23 @@ def test_closing_dependency_resource(): assert result_1 is not result_2 +@mark.usefixtures("resourceclosing_container") +def test_closing_nested_dependency_resource(): + resourceclosing.Service.reset_counter() + + result_1 = resourceclosing.test_function_nested_dependency() + assert isinstance(result_1, resourceclosing.NestedService) + assert result_1.factory_service.service.init_counter == 1 + assert result_1.factory_service.service.shutdown_counter == 1 + + result_2 = resourceclosing.test_function_nested_dependency() + assert isinstance(result_2, resourceclosing.NestedService) + assert result_2.factory_service.service.init_counter == 2 + assert result_2.factory_service.service.shutdown_counter == 2 + + assert result_1 is not result_2 + + @mark.usefixtures("resourceclosing_container") def test_closing_resource_bypass_marker_injection(): resourceclosing.Service.reset_counter()