Skip to content

Commit 96aac13

Browse files
committed
Add futher tests for badwords plugin
1 parent 492dbf5 commit 96aac13

File tree

2 files changed

+123
-1
lines changed

2 files changed

+123
-1
lines changed

plugins/badwords.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def load_bad(db):
3838
words.append(word)
3939

4040
new_regex = re.compile(
41-
r"(\s|^|[^\w\s])({})(\s|$|[^\w\s])".format("|".join(words)),
41+
r"(?:\s|^|[^\w\s])({})(?:\s|$|[^\w\s])".format("|".join(words)),
4242
re.IGNORECASE,
4343
)
4444

tests/plugin_tests/badwords_test.py

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
from unittest.mock import MagicMock, call
2+
3+
import pytest
4+
5+
from cloudbot.clients.irc import IrcClient
6+
from plugins import badwords
7+
from tests.util.mock_db import MockDB
8+
9+
10+
@pytest.fixture()
11+
def clear_bad_words():
12+
badwords.badcache.clear()
13+
yield
14+
badwords.badcache.clear()
15+
16+
17+
pytestmark = pytest.mark.usefixtures("clear_bad_words")
18+
19+
20+
def test_add_bad(mock_db: MockDB):
21+
badwords.table.create(mock_db.engine)
22+
with mock_db.session() as session:
23+
res = badwords.add_bad("foo #bar", "testnick", session)
24+
assert res == "Current badwords: foo"
25+
assert mock_db.get_data(badwords.table) == [
26+
("foo", "testnick", "#bar"),
27+
]
28+
29+
30+
def test_del_bad(mock_db: MockDB):
31+
badwords.table.create(mock_db.engine)
32+
with mock_db.session() as session:
33+
mock_db.load_data(
34+
badwords.table,
35+
[
36+
{"word": "foo", "nick": "testnick", "chan": "#bar"},
37+
],
38+
)
39+
badwords.load_bad(session)
40+
res = badwords.del_bad("foo #bar", session)
41+
assert res == "Removing foo new bad word list for #bar is: foo"
42+
assert mock_db.get_data(badwords.table) == []
43+
44+
45+
def test_check_badwords(mock_db: MockDB):
46+
badwords.table.create(mock_db.engine)
47+
with mock_db.session() as session:
48+
mock_db.load_data(
49+
badwords.table,
50+
[
51+
{"word": "foo", "nick": "testnick", "chan": "#bar"},
52+
],
53+
)
54+
55+
badwords.load_bad(session)
56+
assert badwords.matcher.regex
57+
assert badwords.badcache["#bar"] == ["foo"]
58+
conn = MagicMock()
59+
# conn.configure_mock()
60+
conn.mock_add_spec(spec=IrcClient, spec_set=True)
61+
message = MagicMock()
62+
res = badwords.check_badwords(conn, message, "#bar", "foo", "user123")
63+
assert res is None
64+
assert message.mock_calls == [
65+
call("user123, congratulations you've won!")
66+
]
67+
assert conn.mock_calls == [
68+
call.cmd(
69+
"KICK",
70+
"#bar",
71+
"user123",
72+
"that fucking word is so damn offensive",
73+
)
74+
]
75+
76+
77+
def test_check_badwords_wrong_channel(mock_db: MockDB):
78+
badwords.table.create(mock_db.engine)
79+
with mock_db.session() as session:
80+
mock_db.load_data(
81+
badwords.table,
82+
[
83+
{"word": "foo", "nick": "testnick", "chan": "#bar"},
84+
],
85+
)
86+
87+
badwords.load_bad(session)
88+
assert badwords.matcher.regex
89+
assert badwords.badcache["#bar"] == ["foo"]
90+
conn = MagicMock()
91+
# conn.configure_mock()
92+
conn.mock_add_spec(spec=IrcClient, spec_set=True)
93+
message = MagicMock()
94+
res = badwords.check_badwords(conn, message, "#bar2", "foo", "user123")
95+
assert res is None
96+
assert message.mock_calls == []
97+
assert conn.mock_calls == []
98+
99+
100+
def test_check_badwords_no_match(mock_db: MockDB):
101+
badwords.table.create(mock_db.engine)
102+
with mock_db.session() as session:
103+
mock_db.load_data(
104+
badwords.table,
105+
[
106+
{"word": "foo", "nick": "testnick", "chan": "#bar"},
107+
],
108+
)
109+
110+
badwords.load_bad(session)
111+
assert badwords.matcher.regex
112+
assert badwords.badcache["#bar"] == ["foo"]
113+
conn = MagicMock()
114+
# conn.configure_mock()
115+
conn.mock_add_spec(spec=IrcClient, spec_set=True)
116+
message = MagicMock()
117+
res = badwords.check_badwords(
118+
conn, message, "#bar", "foobar", "user123"
119+
)
120+
assert res is None
121+
assert message.mock_calls == []
122+
assert conn.mock_calls == []

0 commit comments

Comments
 (0)