Skip to content

Commit e06d193

Browse files
committed
fix: TestContainer.override created cache generated during override
1 parent b10eb4a commit e06d193

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

aioinject/testing/testcontainer.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,9 @@ def _exit(self) -> None:
9595
self.registry.providers[self.info.interface] = self.prev
9696

9797
if self.prev_cache is not None:
98+
new_cache = self.container.root.cache
9899
self.container.root.cache = self.prev_cache
100+
self.container.root.cache.update(new_cache)
99101

100102
def _clear_provider(
101103
self, providers: list[ProviderRecord[object]] | None

tests/testing/test_testcontainer.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,3 +92,22 @@ class B:
9292
b_scoped = await ctx.resolve(B)
9393
assert b_scoped is not b
9494
assert b.a is a
95+
96+
97+
async def test_should_not_remove_unrelated_objects_from_cache() -> None:
98+
class A:
99+
pass
100+
101+
class B:
102+
pass
103+
104+
container = Container()
105+
container.register(Singleton(A), Singleton(B))
106+
testcontainer = TestContainer(container)
107+
108+
async with testcontainer.override(Singleton(B)):
109+
a = await container.root.resolve(A)
110+
b = await container.root.resolve(B)
111+
112+
assert await container.root.resolve(A) is a
113+
assert await container.root.resolve(B) is not b

0 commit comments

Comments
 (0)