Passed
Push — master ( 96da92...a1b572 )
by Konstantinos
37s queued 14s
created

test_command_registration   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 66
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 49
dl 0
loc 66
rs 10
c 0
b 0
f 0
wmc 10

7 Functions

Rating   Name   Duplication   Size   Complexity  
A command_registrator() 0 4 1
A modify_registry() 0 5 1
A classes() 0 11 2
A assert_retrieved() 0 5 1
A assert_not_in_registry() 0 5 1
A test_wrong_command_registrator_usage() 0 4 1
A test_command_registrator() 0 16 3
1
import pytest
2
3
4
@pytest.fixture
5
def command_registrator():
6
    from so_magic.data.backend.backend import CommandRegistrator
7
    return CommandRegistrator
8
9
10
@pytest.fixture
11
def modify_registry():
12
    def _modify_registry(registry, key, value):
13
        registry[key] = value
14
    return _modify_registry
15
16
17
@pytest.fixture
18
def classes(command_registrator):
19
    class A(metaclass=command_registrator): pass
20
    class B(metaclass=command_registrator): pass
21
    class C(B): pass
22
    class D(B): pass
23
    classes = type('Classes', (object,), {'A': A, 'B': B, 'C': C, 'D': D,
24
                                          '__iter__': lambda self: iter([getattr(self, x) for x in 'ABCD'])})()
25
    assert all([type(x) == command_registrator for x in classes])  # sanity check
26
    assert all([isinstance(x, command_registrator) for x in classes])  # sanity check
27
    return classes
28
29
30
@pytest.fixture
31
def assert_retrieved():
32
    def _assert_retrieved(getter, classes, keys, expected_values):
33
        assert all(getter(c, l) == v for c, l, v in zip(classes, keys, expected_values))
34
    return _assert_retrieved
35
36
37
@pytest.fixture
38
def assert_not_in_registry(classes):
39
    def _assert_not_in_registry(non_existing_keys, class_names):
40
        assert all(k not in getattr(classes, c).registry for k, c in zip(non_existing_keys, class_names))
41
    return _assert_not_in_registry
42
43
44
def test_command_registrator(assert_different_objects, classes, modify_registry, assert_retrieved, assert_not_in_registry):
45
    assert all([hasattr(x, 'registry') for x in classes])
46
    assert all([hasattr(x, 'state') for x in classes])
47
    assert_different_objects([c.registry for c in classes])
48
49
    values = [1, 2, 3, 4]
50
    [setattr(getattr(classes, c), 'state', v) for v, c in zip(values, 'ABCD')]
51
    assert_different_objects([c.state for c in classes])
52
53
    [modify_registry(getattr(classes, c).registry, c.lower(), v) for v, c in zip(values, 'ABCD')]
54
    assert classes.B.registry != classes.A.registry != classes.C.registry != classes.D.registry
55
56
    assert_retrieved(lambda c, l: c.__getitem__(l), classes, keys='abcd', expected_values=values)
57
    assert_retrieved(lambda c, l: c[l], classes, keys='abcd', expected_values=values)
58
59
    assert_not_in_registry(non_existing_keys='bccd', class_names='CBDC')
60
61
62
def test_wrong_command_registrator_usage(command_registrator):
63
    class P1(command_registrator): pass
64
    assert type(P1) == type
65
    assert not hasattr(P1, 'state')
66