async def test_caches_with_different_purposes(mocker): key1 = VaultKey('some-key') obj1 = object() info1 = ConnectionInfo(server='https://expected/') vault = Vault() await vault.populate({key1: info1}) def factory(_: ConnectionInfo) -> object: return obj1 factory_spy = mocker.MagicMock(spec=factory, wraps=factory) async for _, _, _ in vault.extended(factory_spy, purpose='A'): pass async for _, _, _ in vault.extended(factory_spy, purpose='B'): pass assert factory_spy.call_count == 2 # once per purpose.
async def test_caches_from_factory(mocker): key1 = VaultKey('some-key') obj1 = object() info1 = ConnectionInfo(server='https://expected/') vault = Vault() await vault.populate({key1: info1}) def factory(_: ConnectionInfo) -> object: return obj1 factory_spy = mocker.MagicMock(spec=factory, wraps=factory) results = [] async for key, info, obj in vault.extended(factory_spy): results.append((key, info, obj)) assert len(results) == 1 assert results[0][0] == key1 assert results[0][1] is info1 assert results[0][2] is obj1 assert factory_spy.called