def test_add_singleton(dependency, value): """add_singleton() should add SingletonResolver to current container""" with use_container() as container: add_singleton(dependency, value) resolver = container.get_resolver(dependency) assert isinstance(resolver, SingletonResolver) assert resolver.resolve(container) == value
def test_uses_passed_value_by_name(dep, name, parameter): """should use passed value instead of inject it for custom names""" @inject(**{name: dep}) def get_implementation(**kwargs): return kwargs[name] add_singleton(dep, object()) assert get_implementation(**{name: parameter}) == parameter
def test_uses_passed_value(dep, key, parameter): """should use passed value instead of inject it""" @inject(dep) def get_implementation(**kwargs): return kwargs[key] add_singleton(dep, object()) assert get_implementation(**{key: parameter}) == parameter
def test_inject_dependency_with_name(dep, name): """should inject dependencies as optional parameters with custom name""" @inject(**{name: dep}) def get_implementation(**kwargs): return kwargs[name] value = object() add_singleton(dep, value) assert get_implementation() == value
def test_inject_dependency(dep, key): """should inject dependencies as optional parameters""" @inject(dep) def get_implementation(**kwargs): return kwargs[key] value = object() add_singleton(dep, value) assert get_implementation() == value
def test_dependency(default): """should resolve function or use decorated in case not registered""" implementation = Mock() default_implementation = Mock() @dependency def func(): default_implementation() if not default: add_singleton(func, implementation) func() assert default_implementation.called == default assert implementation.called == (not default)