Passed
Push — master ( 684b8f...0b2c08 )
by dgw
02:10 queued 10s
created

test_module.test_rule_multiple()   A

Complexity

Conditions 1

Size

Total Lines 7
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 7
dl 0
loc 7
rs 10
c 0
b 0
f 0
cc 1
nop 0
1
# coding=utf-8
2
"""Tests for message formatting"""
3
from __future__ import unicode_literals, absolute_import, print_function, division
4
5
import re
6
7
import pytest
8
9
from sopel.trigger import PreTrigger, Trigger
10
from sopel.test_tools import MockSopel, MockSopelWrapper
11
from sopel.tools import Identifier
12
from sopel import module
13
14
15
@pytest.fixture
16
def sopel():
17
    bot = MockSopel('Sopel')
18
    bot.config.core.owner = 'Bar'
19
    return bot
20
21
22
@pytest.fixture
23
def bot(sopel, pretrigger):
24
    bot = MockSopelWrapper(sopel, pretrigger)
25
    bot.channels[Identifier('#Sopel')].privileges[Identifier('Foo')] = module.VOICE
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable Identifier does not seem to be defined.
Loading history...
26
    return bot
27
28
29
@pytest.fixture
30
def pretrigger():
31
    line = ':[email protected] PRIVMSG #Sopel :Hello, world'
32
    return PreTrigger(Identifier('Foo'), line)
33
34
35
@pytest.fixture
36
def pretrigger_pm():
37
    line = ':[email protected] PRIVMSG Sopel :Hello, world'
38
    return PreTrigger(Identifier('Foo'), line)
39
40
41
@pytest.fixture
42
def trigger_owner(bot):
43
    line = ':[email protected] PRIVMSG #Sopel :Hello, world'
44
    return Trigger(bot.config, PreTrigger(Identifier('Bar'), line), None)
45
46
47
@pytest.fixture
48
def trigger(bot, pretrigger):
49
    return Trigger(bot.config, pretrigger, None)
50
51
52
@pytest.fixture
53
def trigger_pm(bot, pretrigger_pm):
54
    return Trigger(bot.config, pretrigger_pm, None)
55
56
57
def test_unblockable():
58
    @module.unblockable
59
    def mock(bot, trigger, match):
60
        return True
61
    assert mock.unblockable is True
62
63
64
def test_interval():
65
    @module.interval(5)
66
    def mock(bot, trigger, match):
67
        return True
68
    assert mock.interval == [5]
69
70
71
def test_interval_args():
72
    @module.interval(5, 10)
73
    def mock(bot, trigger, match):
74
        return True
75
    assert mock.interval == [5, 10]
76
77
78
def test_interval_multiple():
79
    @module.interval(5, 10)
80
    @module.interval(5)
81
    @module.interval(20)
82
    def mock(bot, trigger, match):
83
        return True
84
    assert mock.interval == [20, 5, 10]
85
86
87
def test_rule():
88
    @module.rule('.*')
89
    def mock(bot, trigger, match):
90
        return True
91
    assert mock.rule == ['.*']
92
93
94
def test_rule_args():
95
    @module.rule('.*', r'\d+')
96
    def mock(bot, trigger, match):
97
        return True
98
    assert mock.rule == ['.*', r'\d+']
99
100
101
def test_rule_multiple():
102
    @module.rule('.*', r'\d+')
103
    @module.rule('.*')
104
    @module.rule(r'\w+')
105
    def mock(bot, trigger, match):
106
        return True
107
    assert mock.rule == [r'\w+', '.*', r'\d+']
108
109
110
def test_thread():
111
    @module.thread(True)
112
    def mock(bot, trigger, match):
113
        return True
114
    assert mock.thread is True
115
116
117
def test_url():
118
    @module.url('pattern')
119
    def mock(bot, trigger, match):
120
        return True
121
    assert mock.url_regex == [re.compile('pattern')]
122
123
124
def test_url_args():
125
    @module.url('first', 'second')
126
    def mock(bot, trigger, match):
127
        return True
128
    assert mock.url_regex == [re.compile('first'), re.compile('second')]
129
130
131
def test_url_multiple():
132
    @module.url('first', 'second')
133
    @module.url('second')
134
    @module.url('third')
135
    def mock(bot, trigger, match):
136
        return True
137
    assert mock.url_regex == [
138
        re.compile('third'),
139
        re.compile('second'),
140
        re.compile('first')
141
    ]
142
143
144
def test_echo():
145
    # test decorator with parentheses
146
    @module.echo()
147
    def mock(bot, trigger, match):
148
        return True
149
    assert mock.echo is True
150
151
    # test decorator without parentheses
152
    @module.echo
153
    def mock(bot, trigger, match):
154
        return True
155
    assert mock.echo is True
156
157
    # test without decorator
158
    def mock(bot, trigger, match):
159
        return True
160
    # on undecorated callables, the attr only exists after the loader loads them
161
    # so this cannot `assert mock.echo is False` here
162
    assert not hasattr(mock, 'echo')
163
164
165
def test_commands():
166
    @module.commands('sopel')
167
    def mock(bot, trigger, match):
168
        return True
169
    assert mock.commands == ['sopel']
170
171
172
def test_commands_args():
173
    @module.commands('sopel', 'bot')
174
    def mock(bot, trigger, match):
175
        return True
176
    assert mock.commands == ['sopel', 'bot']
177
178
179
def test_commands_multiple():
180
    @module.commands('sopel', 'bot')
181
    @module.commands('bot')
182
    @module.commands('robot')
183
    def mock(bot, trigger, match):
184
        return True
185
    assert mock.commands == ['robot', 'bot', 'sopel']
186
187
188
def test_nickname_commands():
189
    @module.nickname_commands('sopel')
190
    def mock(bot, trigger, match):
191
        return True
192
    assert mock.nickname_commands == ['sopel']
193
194
195
def test_nickname_commands_args():
196
    @module.nickname_commands('sopel', 'bot')
197
    def mock(bot, trigger, match):
198
        return True
199
    assert mock.nickname_commands == ['sopel', 'bot']
200
201
202
def test_nickname_commands_multiple():
203
    @module.nickname_commands('sopel', 'bot')
204
    @module.nickname_commands('bot')
205
    @module.nickname_commands('robot')
206
    def mock(bot, trigger, match):
207
        return True
208
    assert mock.nickname_commands == ['robot', 'bot', 'sopel']
209
210
211
def test_priority():
212
    @module.priority('high')
213
    def mock(bot, trigger, match):
214
        return True
215
    assert mock.priority == 'high'
216
217
218
def test_event():
219
    @module.event('301')
220
    def mock(bot, trigger, match):
221
        return True
222
    assert mock.event == ['301']
223
224
225
def test_event_args():
226
    @module.event('301', '302')
227
    def mock(bot, trigger, match):
228
        return True
229
    assert mock.event == ['301', '302']
230
231
232
def test_event_multiple():
233
    @module.event('301', '302')
234
    @module.event('301')
235
    @module.event('466')
236
    def mock(bot, trigger, match):
237
        return True
238
    assert mock.event == ['466', '301', '302']
239
240
241
def test_intent():
242
    @module.intent('ACTION')
243
    def mock(bot, trigger, match):
244
        return True
245
    assert mock.intents == ['ACTION']
246
247
248
def test_intent_args():
249
    @module.intent('ACTION', 'OTHER')
250
    def mock(bot, trigger, match):
251
        return True
252
    assert mock.intents == ['ACTION', 'OTHER']
253
254
255
def test_intent_multiple():
256
    @module.intent('ACTION', 'OTHER')
257
    @module.intent('OTHER')
258
    @module.intent('PING',)
259
    def mock(bot, trigger, match):
260
        return True
261
    assert mock.intents == ['PING', 'OTHER', 'ACTION']
262
263
264
def test_rate():
265
    @module.rate(5)
266
    def mock(bot, trigger, match):
267
        return True
268
    assert mock.rate == 5
269
270
271
def test_require_privmsg(bot, trigger, trigger_pm):
272
    @module.require_privmsg('Try again in a PM')
273
    def mock(bot, trigger, match=None):
274
        return True
275
    assert mock(bot, trigger) is not True
276
    assert mock(bot, trigger_pm) is True
277
278
    @module.require_privmsg
279
    def mock_(bot, trigger, match=None):
280
        return True
281
    assert mock_(bot, trigger) is not True
282
    assert mock_(bot, trigger_pm) is True
283
284
285
def test_require_chanmsg(bot, trigger, trigger_pm):
286
    @module.require_chanmsg('Try again in a channel')
287
    def mock(bot, trigger, match=None):
288
        return True
289
    assert mock(bot, trigger) is True
290
    assert mock(bot, trigger_pm) is not True
291
292
    @module.require_chanmsg
293
    def mock_(bot, trigger, match=None):
294
        return True
295
    assert mock(bot, trigger) is True
296
    assert mock(bot, trigger_pm) is not True
297
298
299
def test_require_privilege(bot, trigger):
300
    @module.require_privilege(module.VOICE)
301
    def mock_v(bot, trigger, match=None):
302
        return True
303
    assert mock_v(bot, trigger) is True
304
305
    @module.require_privilege(module.OP, 'You must be at least opped!')
306
    def mock_o(bot, trigger, match=None):
307
        return True
308
    assert mock_o(bot, trigger) is not True
309
310
311
def test_require_admin(bot, trigger, trigger_owner):
312
    @module.require_admin('You must be an admin')
313
    def mock(bot, trigger, match=None):
314
        return True
315
    assert mock(bot, trigger) is not True
316
317
    @module.require_admin
318
    def mock_(bot, trigger, match=None):
319
        return True
320
    assert mock_(bot, trigger_owner) is True
321
322
323
def test_require_owner(bot, trigger, trigger_owner):
324
    @module.require_owner('You must be an owner')
325
    def mock(bot, trigger, match=None):
326
        return True
327
    assert mock(bot, trigger) is not True
328
329
    @module.require_owner
330
    def mock_(bot, trigger, match=None):
331
        return True
332
    assert mock_(bot, trigger_owner) is True
333
334
335
def test_example(bot, trigger):
336
    @module.commands('mock')
337
    @module.example('.mock', 'True')
338
    def mock(bot, trigger, match=None):
339
        return True
340
    assert mock(bot, trigger) is True
341