Skip to content

Commit 281cb2f

Browse files
add tests for closing
1 parent c2392e3 commit 281cb2f

File tree

4 files changed

+72
-8
lines changed

4 files changed

+72
-8
lines changed

tests/unit/samples/wiring/asyncinjections.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ def reset_counters(self):
1818

1919
resource1 = TestResource()
2020
resource2 = TestResource()
21+
resource3 = TestResource()
2122

2223

2324
async def async_resource(resource):
@@ -34,6 +35,8 @@ class Container(containers.DeclarativeContainer):
3435

3536
resource1 = providers.Resource(async_resource, providers.Object(resource1))
3637
resource2 = providers.Resource(async_resource, providers.Object(resource2))
38+
context_local_resource = providers.ContextLocalResource(async_resource, providers.Object(resource3))
39+
context_local_resource_with_factory_object = providers.ContextLocalResource(async_resource, providers.Factory(TestResource))
3740

3841

3942
@inject
@@ -57,5 +60,13 @@ async def async_generator_injection(
5760
async def async_injection_with_closing(
5861
resource1: object = Closing[Provide[Container.resource1]],
5962
resource2: object = Closing[Provide[Container.resource2]],
63+
context_local_resource: object = Closing[Provide[Container.context_local_resource]],
6064
):
61-
return resource1, resource2
65+
return resource1, resource2, context_local_resource
66+
67+
68+
@inject
69+
async def async_injection_with_closing_context_local_resources(
70+
context_local_resource1: object = Closing[Provide[Container.context_local_resource_with_factory_object]],
71+
):
72+
return context_local_resource1

tests/unit/samples/wiringstringids/asyncinjections.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ def reset_counters(self):
1616

1717
resource1 = TestResource()
1818
resource2 = TestResource()
19+
resource3 = TestResource()
1920

2021

2122
async def async_resource(resource):
@@ -32,6 +33,8 @@ class Container(containers.DeclarativeContainer):
3233

3334
resource1 = providers.Resource(async_resource, providers.Object(resource1))
3435
resource2 = providers.Resource(async_resource, providers.Object(resource2))
36+
context_local_resource = providers.ContextLocalResource(async_resource, providers.Object(resource3))
37+
context_local_resource_with_factory_object = providers.ContextLocalResource(async_resource, providers.Factory(TestResource))
3538

3639

3740
@inject
@@ -46,5 +49,13 @@ async def async_injection(
4649
async def async_injection_with_closing(
4750
resource1: object = Closing[Provide["resource1"]],
4851
resource2: object = Closing[Provide["resource2"]],
52+
context_local_resource: object = Closing[Provide["context_local_resource"]],
4953
):
50-
return resource1, resource2
54+
return resource1, resource2, context_local_resource
55+
56+
57+
@inject
58+
async def async_injection_with_closing_context_local_resources(
59+
context_local_resource1: object = Closing[Provide["context_local_resource_with_factory_object"]]
60+
):
61+
return context_local_resource1

tests/unit/wiring/provider_ids/test_async_injections_py36.py

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
"""Async injection tests."""
22

3-
from pytest import fixture, mark
3+
import asyncio
44

5+
from pytest import fixture, mark
56
from samples.wiring import asyncinjections
67

78

@@ -51,7 +52,7 @@ async def test_async_generator_injections() -> None:
5152

5253
@mark.asyncio
5354
async def test_async_injections_with_closing():
54-
resource1, resource2 = await asyncinjections.async_injection_with_closing()
55+
resource1, resource2, context_local_resource = await asyncinjections.async_injection_with_closing()
5556

5657
assert resource1 is asyncinjections.resource1
5758
assert asyncinjections.resource1.init_counter == 1
@@ -61,7 +62,11 @@ async def test_async_injections_with_closing():
6162
assert asyncinjections.resource2.init_counter == 1
6263
assert asyncinjections.resource2.shutdown_counter == 1
6364

64-
resource1, resource2 = await asyncinjections.async_injection_with_closing()
65+
assert context_local_resource is asyncinjections.resource3
66+
assert asyncinjections.resource3.init_counter == 1
67+
assert asyncinjections.resource3.shutdown_counter == 1
68+
69+
resource1, resource2, context_local_resource = await asyncinjections.async_injection_with_closing()
6570

6671
assert resource1 is asyncinjections.resource1
6772
assert asyncinjections.resource1.init_counter == 2
@@ -70,3 +75,19 @@ async def test_async_injections_with_closing():
7075
assert resource2 is asyncinjections.resource2
7176
assert asyncinjections.resource2.init_counter == 2
7277
assert asyncinjections.resource2.shutdown_counter == 2
78+
79+
assert context_local_resource is asyncinjections.resource3
80+
assert asyncinjections.resource3.init_counter == 2
81+
assert asyncinjections.resource3.shutdown_counter == 2
82+
83+
84+
@mark.asyncio
85+
async def test_async_injections_with_closing_concurrently():
86+
resource1, resource2 = await asyncio.gather(asyncinjections.async_injection_with_closing_context_local_resources(),
87+
asyncinjections.async_injection_with_closing_context_local_resources())
88+
assert resource1 != resource2
89+
90+
resource1 = await asyncinjections.Container.context_local_resource_with_factory_object()
91+
resource2 = await asyncinjections.Container.context_local_resource_with_factory_object()
92+
93+
assert resource1 == resource2

tests/unit/wiring/string_ids/test_async_injections_py36.py

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
"""Async injection tests."""
22

3-
from pytest import fixture, mark
3+
import asyncio
44

5+
from pytest import fixture, mark
56
from samples.wiringstringids import asyncinjections
67

78

@@ -34,7 +35,7 @@ async def test_async_injections():
3435

3536
@mark.asyncio
3637
async def test_async_injections_with_closing():
37-
resource1, resource2 = await asyncinjections.async_injection_with_closing()
38+
resource1, resource2, context_local_resource = await asyncinjections.async_injection_with_closing()
3839

3940
assert resource1 is asyncinjections.resource1
4041
assert asyncinjections.resource1.init_counter == 1
@@ -44,7 +45,11 @@ async def test_async_injections_with_closing():
4445
assert asyncinjections.resource2.init_counter == 1
4546
assert asyncinjections.resource2.shutdown_counter == 1
4647

47-
resource1, resource2 = await asyncinjections.async_injection_with_closing()
48+
assert context_local_resource is asyncinjections.resource3
49+
assert asyncinjections.resource3.init_counter == 1
50+
assert asyncinjections.resource3.shutdown_counter == 1
51+
52+
resource1, resource2, context_local_resource = await asyncinjections.async_injection_with_closing()
4853

4954
assert resource1 is asyncinjections.resource1
5055
assert asyncinjections.resource1.init_counter == 2
@@ -53,3 +58,19 @@ async def test_async_injections_with_closing():
5358
assert resource2 is asyncinjections.resource2
5459
assert asyncinjections.resource2.init_counter == 2
5560
assert asyncinjections.resource2.shutdown_counter == 2
61+
62+
assert context_local_resource is asyncinjections.resource3
63+
assert asyncinjections.resource3.init_counter == 2
64+
assert asyncinjections.resource3.shutdown_counter == 2
65+
66+
67+
@mark.asyncio
68+
async def test_async_injections_with_closing_concurrently():
69+
resource1, resource2 = await asyncio.gather(asyncinjections.async_injection_with_closing_context_local_resources(),
70+
asyncinjections.async_injection_with_closing_context_local_resources())
71+
assert resource1 != resource2
72+
73+
resource1 = await asyncinjections.Container.context_local_resource_with_factory_object()
74+
resource2 = await asyncinjections.Container.context_local_resource_with_factory_object()
75+
76+
assert resource1 == resource2

0 commit comments

Comments
 (0)