Completed
Push — master ( 6fd567...f65269 )
by Daniel
90:27 queued 15s
created

test_plugin_missing_name()   A

Complexity

Conditions 2

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
cc 2
c 1
b 1
f 0
dl 0
loc 8
rs 9.4285

1 Method

Rating   Name   Duplication   Size   Complexity  
A MyPlugin.__init__() 0 2 1
1
import os
2
import pytest
3
4
import groundwork
5
from groundwork.exceptions import PluginRegistrationException
6
from groundwork.patterns import GwBasePattern
7
from groundwork.patterns.gw_base_pattern import PluginAttributeMissing, PluginActivateMissing, PluginDeactivateMissing
8
9
10
def test_app_initialisation():
11
    app = groundwork.App()
12
    assert app.path == os.getcwd()
13
14
15
def test_app_initialisation_with_config():
16
    current_dir = os.path.dirname(os.path.abspath(__file__))
17
    config = os.path.join(current_dir, "static", "config.py")
18
    app = groundwork.App([config])
19
20
    assert app.path == os.getcwd()
21
    assert app.config.PLUGINS == ["PluginA", "PluginB", "NoPlugin"]
22
23
24
def test_app_initialisation_with_config2():
25
    current_dir = os.path.dirname(os.path.abspath(__file__))
26
    config = os.path.join(current_dir, "static", "config2.py")
27
    app = groundwork.App([config])
28
29
    assert app.path == os.path.join(current_dir, "static")
30
    with pytest.raises(AttributeError):
31
        app.config.PLUGINS != ["PluginA", "PluginB", "NoPlugin"]
32
33
34
def test_app_strict():
35
36
    class MyBadPlugin():
37
        pass
38
39
    my_app = groundwork.App(strict=True)
40
    with pytest.raises(AttributeError):
41
        my_app.plugins.classes.register([MyBadPlugin])     # will throw an exception
42
43
    my_app.strict = False
44
    my_app.plugins.classes.register([MyBadPlugin])     # will log a warning only
45
46
    assert len(my_app.plugins.get()) == 0
47
48
49
def test_app_initialisation_with_plugins(BasicPlugin):
50
    # Tries to import, but doesn't stop on problems
51
    app = groundwork.App(plugins=["TestPluginA", "TestPluginB", "NoPlugin"])
52
53
    # Tries to import and stops on problems
54
    with pytest.raises(AttributeError):
55
        app = groundwork.App(plugins=["TestPluginA", "TestPluginB", "NoPlugin"], strict=True)
56
57
    app = groundwork.App(plugins=[BasicPlugin])
58
    app.plugins.activate(["BasicPlugin"])
59
60
61
def test_app_plugin_registration(BasicPlugin):
62
    app = groundwork.App(plugins=[BasicPlugin], strict=True)
63
    plugin_class = app.plugins.classes.get("BasicPlugin")
64
    assert plugin_class is not None
65
66
67
def test_app_plugin_activation(BasicPlugin):
68
    app = groundwork.App(plugins=[BasicPlugin], strict=True)
69
    app.plugins.activate(["BasicPlugin"])
70
    plugin = app.plugins.get("BasicPlugin")
71
    assert plugin is not None
72
    assert plugin.active is True
73
74
75
def test_app_plugin_deactivation(BasicPlugin):
76
    app = groundwork.App(plugins=[BasicPlugin], strict=True)
77
    app.plugins.activate(["BasicPlugin"])
78
    plugin = app.plugins.get("BasicPlugin")
79
    assert plugin is not None
80
    assert plugin.active is True
81
    app.plugins.deactivate(["BasicPlugin"])
82
    assert plugin.active is False
83
84
85
def test_app_plugin_multi_status_change(BasicPlugin):
86
    app = groundwork.App(plugins=[BasicPlugin], strict=True)
87
88
    # De/Activation via app
89
    app.plugins.activate(["BasicPlugin"])
90
    plugin = app.plugins.get("BasicPlugin")
91
    assert plugin.active is True
92
    app.plugins.deactivate(["BasicPlugin"])
93
    assert plugin.active is False
94
    app.plugins.activate(["BasicPlugin"])
95
    assert plugin.active is True
96
    # De/Activation via plugin itself
97
    plugin = app.plugins.get("BasicPlugin")
98
    plugin.deactivate()
99
    assert plugin.active is False
100
101
102
def test_app_multi_repeating_registration(BasicPlugin, basicApp):
103
    with pytest.raises(PluginRegistrationException):
104
        basicApp.plugins.classes.register([BasicPlugin])
105
106
107
def test_multi_app(BasicPlugin):
108
    app = groundwork.App(plugins=[BasicPlugin], strict=True)
109
    plugin_class = app.plugins.classes.get("BasicPlugin")
110
111
    app2 = groundwork.App(plugins=[BasicPlugin], strict=True)
112
    plugin2_class = app2.plugins.classes.get("BasicPlugin")
113
114
    assert app is not app2
115
    assert plugin_class is not plugin2_class  # Checks, if reference is not the same
116
117
    app.plugins.activate(["BasicPlugin"])
118
    plugin = app.plugins.get("BasicPlugin")
119
120
    app2.plugins.activate(["BasicPlugin"])
121
    plugin2 = app2.plugins.get("BasicPlugin")
122
123
    assert plugin is not plugin2
124
125
126
def test_plugin_missing_name(basicApp):
127
128
    class MyPlugin(GwBasePattern):
129
        def __init__(self, app, **kwargs):
130
            super().__init__(app, **kwargs)
131
132
    with pytest.raises(PluginAttributeMissing):
133
        MyPlugin(basicApp)
134
135
136
def test_plugin_missing_activate(basicApp):
137
138
    class MyPlugin(GwBasePattern):
139
        def __init__(self, app, **kwargs):
140
            self.name = "my_plugin"
141
            super().__init__(app, **kwargs)
142
143
    my_plugin = MyPlugin(basicApp)
144
    with pytest.raises(PluginActivateMissing):
145
        my_plugin.activate()
146
147
148
def test_plugin_missing_deactivate(basicApp):
149
150
    class MyPlugin(GwBasePattern):
151
        def __init__(self, app, **kwargs):
152
            self.name = "my_plugin"
153
            super().__init__(app, **kwargs)
154
155
        def activate(self):
156
            pass
157
158
    my_plugin = MyPlugin(basicApp)
159
    my_plugin.activate()
160
    with pytest.raises(PluginDeactivateMissing):
161
        my_plugin.deactivate()
162
163
164
def test_plugin_unknow_attribute(basicApp):
165
    plugin = basicApp.plugins.get("CommandPlugin")
166
    with pytest.raises(AttributeError):
167
        plugin.nowhere()
168