Skip to content

Commit b3bd8e8

Browse files
committed
Add tests for selector provider
1 parent 35f280a commit b3bd8e8

File tree

2 files changed

+52
-1
lines changed

2 files changed

+52
-1
lines changed

docs/main/changelog.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ that were made in every particular version.
77
From version 0.7.6 *Dependency Injector* framework strictly
88
follows `Semantic versioning`_
99

10+
Development version
11+
-------------------
12+
- Add tests for ``Selector`` provider.
13+
1014
4.17.0
1115
------
1216
- Add ``FastAPI`` + ``SQLAlchemy`` example.

tests/unit/providers/test_selector_py2_py3.py

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import unittest2 as unittest
88

9-
from dependency_injector import providers
9+
from dependency_injector import providers, errors
1010

1111

1212
class SelectorTests(unittest.TestCase):
@@ -33,6 +33,28 @@ def test_call(self):
3333
with self.selector.override('two'):
3434
self.assertEqual(provider(), 2)
3535

36+
def test_call_undefined_provider(self):
37+
provider = providers.Selector(
38+
self.selector,
39+
one=providers.Object(1),
40+
two=providers.Object(2),
41+
)
42+
43+
with self.selector.override('three'):
44+
with self.assertRaises(errors.Error):
45+
provider()
46+
47+
def test_call_selector_is_none(self):
48+
provider = providers.Selector(
49+
self.selector,
50+
one=providers.Object(1),
51+
two=providers.Object(2),
52+
)
53+
54+
with self.selector.override(None):
55+
with self.assertRaises(errors.Error):
56+
provider()
57+
3658
def test_call_any_callable(self):
3759
provider = providers.Selector(
3860
functools.partial(next, itertools.cycle(['one', 'two'])),
@@ -70,6 +92,19 @@ def test_getattr(self):
7092
self.assertIs(provider.one, provider_one)
7193
self.assertIs(provider.two, provider_two)
7294

95+
def test_getattr_attribute_error(self):
96+
provider_one = providers.Object(1)
97+
provider_two = providers.Object(2)
98+
99+
provider = providers.Selector(
100+
self.selector,
101+
one=provider_one,
102+
two=provider_two,
103+
)
104+
105+
with self.assertRaises(AttributeError):
106+
_ = provider.provider_three
107+
73108
def test_call_overridden(self):
74109
provider = providers.Selector(self.selector, sample=providers.Object(1))
75110
overriding_provider1 = providers.Selector(self.selector, sample=providers.Object(2))
@@ -81,6 +116,18 @@ def test_call_overridden(self):
81116
with self.selector.override('sample'):
82117
self.assertEqual(provider(), 3)
83118

119+
def test_providers_attribute(self):
120+
provider_one = providers.Object(1)
121+
provider_two = providers.Object(2)
122+
123+
provider = providers.Selector(
124+
self.selector,
125+
one=provider_one,
126+
two=provider_two,
127+
)
128+
129+
self.assertEqual(provider.providers, {'one': provider_one, 'two': provider_two})
130+
84131
def test_deepcopy(self):
85132
provider = providers.Selector(self.selector)
86133

0 commit comments

Comments
 (0)