Passed
Push — mpeta ( d03ca4...105776 )
by Konstantinos
01:53
created

test_command_registration.classes()   A

Complexity

Conditions 2

Size

Total Lines 11
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 11
nop 1
dl 0
loc 11
rs 9.85
c 0
b 0
f 0
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
def test_command_registrator(assert_different_objects, classes, modify_registry):
31
    assert all([hasattr(x, 'registry') for x in classes])
32
    assert all([hasattr(x, 'state') for x in classes])
33
    assert_different_objects([c.registry for c in classes])
34
35
    values = [1, 2, 3, 4]
36
    [setattr(getattr(classes, c), 'state', v) for v, c in zip(values, 'ABCD')]
37
    assert_different_objects([c.state for c in classes])
38
39
    [modify_registry(getattr(classes, c).registry, c.lower(), v) for v, c in zip(values, 'ABCD')]
40
    assert classes.B.registry != classes.A.registry != classes.C.registry != classes.D.registry
41
42
    assert classes.A.__getitem__('a') == 1
43
    assert classes.B.__getitem__('b') == 2
44
    assert classes.C.__getitem__('c') == 3
45
    assert classes.D.__getitem__('d') == 4
46
    assert 'b' not in classes.C.registry
47
    assert 'c' not in classes.B.registry
48
    assert 'c' not in classes.D.registry
49
    assert 'd' not in classes.C.registry
50
    assert classes.A['a'] == 1
51
    assert classes.B['b'] == 2
52
    assert classes.C['c'] == 3
53
    assert classes.D['d'] == 4
54
55
56
def test_wrong_command_registrator_usage(command_registrator):
57
    class P1(command_registrator): pass
58
    assert type(P1) == type
59
    assert not hasattr(P1, 'state')
60
    assert not hasattr(P1, 'state')
61