Example #1
0
def test_service_override():
    collection = ServiceCollection()
    collection.add_instance(Base, Impl1())
    impl2 = Impl2()
    collection.add_instance(Base, impl2)
    collection.add_transient(UsesBase)

    ub = collection.resolve(UsesBase)
    assert isinstance(ub._base, Impl2)
    assert ub._base == impl2
def test_optional_with_dependencies():
    collection = ServiceCollection()
    collection.add_transient(A)
    collection.add_transient(B)
    collection.add_transient(C)
    collection.add_transient(HasOptionalWithDeps)

    has_optional_with_deps = collection.resolve(HasOptionalWithDeps)
    assert isinstance(has_optional_with_deps._a, A)
    assert isinstance(has_optional_with_deps._c, C)
def test_with_args():
    collection = ServiceCollection()
    collection.add_transient(NoTyping, args=["a", "b"])
    collection.add_transient(SomeTyping,
                             args=[ServiceResolverFlags.REQUIRED_SERVICE, "b"])

    some_typing = collection.resolve(SomeTyping)
    no_typing = collection.resolve(NoTyping)
    assert some_typing._no_typing != no_typing
def test_service_override():
    collection = ServiceCollection()
    collection.add_singleton(Base, Impl1)
    collection.add_singleton(Base, Impl2)
    collection.add_transient(UsesBase)

    ub = collection.resolve(UsesBase)
    base = collection.resolve(Base)
    assert isinstance(ub._base, Impl2)
    assert ub._base == base
def test_optional_not_declared():
    collection = ServiceCollection()
    collection.add_transient(A)
    collection.add_transient(HasOptional)

    has_optional = collection.resolve(HasOptional)
    assert isinstance(has_optional._a, A)
    assert has_optional._b is None
def test_all_transient():
    collection = ServiceCollection()
    collection.add_transient(A)
    collection.add_transient(B)
    collection.add_transient(C)

    a = collection.resolve(A)
    b = collection.resolve(B)
    c = collection.resolve(C)

    assert a != b.a
    assert b != c.b
    assert a != c.b.a
def test_multiple():
    collection = ServiceCollection()
    collection.add_transient(Base, Impl1)
    collection.add_transient(Base, Impl2)
    collection.add_transient(UsesMultiple)

    um = collection.resolve(UsesMultiple)
    assert len(um._multiple) == 2
    assert isinstance(um._multiple[0], Impl1)
    assert isinstance(um._multiple[1], Impl2)
Example #8
0
def configure_services():
    collection = ServiceCollection()
    collection.add_transient(
        IDatabaseService, DatabaseService, args=["my connection string"]
    )
    collection.add_transient(IUserRepository, UserRepository)
    return collection
Example #9
0
def test_subclass():
    collection = ServiceCollection()
    a = A()
    b = B(a)
    c = C(a, b)
    sc = SubClass(c, b)
    collection.add_instance(ParentClass, sc)
    collection.add_transient(UsesSubClass)

    usc = collection.resolve(UsesSubClass)
    pc = collection.resolve(ParentClass)

    assert isinstance(usc._pc, SubClass)
    assert usc._pc == pc
def test_basic_singleton():
    collection = ServiceCollection()
    collection.add_singleton(A)
    collection.add_transient(B)
    collection.add_transient(C)

    b = collection.resolve(B)
    c = collection.resolve(C)
    a = collection.resolve(A)

    assert b != c.b
    assert b.a == c.a
    assert b.a == c.b.a
    assert a == b.a
Example #11
0
def test_nested_resolution_error():
    collection = ServiceCollection()
    collection.add_transient(D)
    collection.add_transient(B)

    with pytest.raises(ServiceResolutionError):
        collection.resolve(D)
def test_multiple():
    collection = ServiceCollection()
    collection.add_singleton(Base, Impl1)
    collection.add_singleton(Base, Impl2)
    collection.add_transient(UsesMultiple)

    um1 = collection.resolve(UsesMultiple)
    um2 = collection.resolve(UsesMultiple)
    assert len(um1._multiple) == 2
    assert len(um2._multiple) == 2
    assert um1._multiple[0] == um2._multiple[0]
    assert um1._multiple[1] == um2._multiple[1]
Example #13
0
def test_instance():
    collection = ServiceCollection()
    collection.add_transient(C)
    collection.add_transient(B)
    a = A()
    collection.add_instance(A, a)

    b = collection.resolve(B)
    c = collection.resolve(C)

    assert a == b.a
    assert a == c.b.a
Example #14
0
def test_multiple():
    collection = ServiceCollection()
    impl1 = Impl1()
    impl2 = Impl2()
    collection.add_instance(Base, impl1)
    collection.add_instance(Base, impl2)
    collection.add_transient(UsesMultiple)

    um = collection.resolve(UsesMultiple)
    assert len(um._multiple) == 2
    assert um._multiple[0] == impl1
    assert um._multiple[1] == impl2
Example #15
0
def test_run_function():
    collection = ServiceCollection()
    collection.add_transient(A)
    collection.add_transient(B)
    assert collection.call_function(my_fn) == "Called!"
def test_subclass():
    collection = ServiceCollection()
    collection.add_transient(C)
    collection.add_transient(B)
    collection.add_transient(A)
    collection.add_transient(ParentClass, SubClass)
    collection.add_transient(UsesSubClass)

    usc = collection.resolve(UsesSubClass)
    pc = collection.resolve(ParentClass)

    assert isinstance(usc._pc, SubClass)
    assert usc._pc != pc
Example #17
0
class B:
    def __init__(self, a: A):
        self.a = a
        print("created b")


class C:
    def __init__(self, a: A, b: B):
        self.a = a
        self.b = b
        print("created c")


from simple_injection import ServiceCollection

collection = ServiceCollection()
collection.add_transient(A)
collection.add_transient(C)
collection.add_transient(B)

c = collection.resolve(C)

collection2 = ServiceCollection()
collection2.add_singleton(A)
collection2.add_singleton(C)
collection2.add_singleton(B)

c = collection2.resolve(C)

collection3 = ServiceCollection()
b = B(1)