|
1
|
|
|
import pytest |
|
2
|
|
|
|
|
3
|
|
|
|
|
4
|
|
|
@pytest.fixture |
|
5
|
|
|
def registry_infra(): |
|
6
|
|
|
from so_magic.utils import ObjectRegistry, ObjectRegistryError |
|
7
|
|
|
return type('DummyClass', (object,), {'object': ObjectRegistry({'key1': 1}), 'error': ObjectRegistryError, |
|
8
|
|
|
'existing_key': 'key1', 'non_existing_key': 'key2'}) |
|
9
|
|
|
|
|
10
|
|
|
|
|
11
|
|
|
def test_sanity_check(registry_infra): |
|
12
|
|
|
runtime_repr = repr(registry_infra.object) |
|
13
|
|
|
assert runtime_repr == repr(registry_infra.object.objects) |
|
14
|
|
|
assert runtime_repr == '{' + ', '.join(f"'{k}': {v}" for k, v in registry_infra.object.objects.items()) + '}' |
|
15
|
|
|
assert list(iter(registry_infra.object)) == list(iter(registry_infra.object.objects.items())) |
|
16
|
|
|
|
|
17
|
|
|
|
|
18
|
|
|
def test_registry_remove_method(registry_infra): |
|
19
|
|
|
assert registry_infra.existing_key in registry_infra.object |
|
20
|
|
|
|
|
21
|
|
|
registry_infra.object.remove(registry_infra.existing_key) |
|
22
|
|
|
assert registry_infra.object.objects == {} |
|
23
|
|
|
|
|
24
|
|
|
with pytest.raises(registry_infra.error, |
|
25
|
|
|
match=f'Requested to remove item with key {registry_infra.existing_key}, which does not exist.'): |
|
26
|
|
|
registry_infra.object.remove(registry_infra.existing_key) |
|
27
|
|
|
|
|
28
|
|
|
|
|
29
|
|
|
def test_registry_pop_method(registry_infra): |
|
30
|
|
|
assert registry_infra.existing_key in registry_infra.object |
|
31
|
|
|
|
|
32
|
|
|
value = registry_infra.object.pop(registry_infra.existing_key) |
|
33
|
|
|
assert value == 1 |
|
34
|
|
|
assert registry_infra.object.objects == {} |
|
35
|
|
|
|
|
36
|
|
|
with pytest.raises(registry_infra.error, |
|
37
|
|
|
match=f'Requested to pop item with key {registry_infra.existing_key}, which does not exist.'): |
|
38
|
|
|
registry_infra.object.pop(registry_infra.existing_key) |
|
39
|
|
|
|
|
40
|
|
|
|
|
41
|
|
|
def test_registry_get_method(registry_infra): |
|
42
|
|
|
assert registry_infra.existing_key in registry_infra.object |
|
43
|
|
|
|
|
44
|
|
|
value = registry_infra.object.get(registry_infra.existing_key) |
|
45
|
|
|
assert value == 1 |
|
46
|
|
|
assert registry_infra.object.objects == {registry_infra.existing_key: 1} |
|
47
|
|
|
|
|
48
|
|
|
with pytest.raises(registry_infra.error, match=f'Requested to get item with key {registry_infra.non_existing_key}, ' |
|
49
|
|
|
f'which does not exist.'): |
|
50
|
|
|
_ = registry_infra.object.get(registry_infra.non_existing_key) |
|
51
|
|
|
|
|
52
|
|
|
|
|
53
|
|
|
@pytest.mark.parametrize('item_value', [9]) |
|
54
|
|
|
def test_add_item_with_existing_key(item_value, registry_infra): |
|
55
|
|
|
assert registry_infra.existing_key in registry_infra.object |
|
56
|
|
|
|
|
57
|
|
|
with pytest.raises(registry_infra.error, match=f"Requested to insert value '{item_value}' in already existing key " |
|
58
|
|
|
f"'{registry_infra.existing_key}'. All keys are " |
|
59
|
|
|
rf"\[{', '.join(_ for _ in registry_infra.object.objects)}\]" |
|
60
|
|
|
): |
|
61
|
|
|
registry_infra.object.add(registry_infra.existing_key, item_value) |
|
62
|
|
|
|