-
-
Notifications
You must be signed in to change notification settings - Fork 407
/
test_parser_regex.py
150 lines (111 loc) · 5.71 KB
/
test_parser_regex.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
import asynctest
import asynctest.mock as amock
from opsdroid.cli.start import configure_lang
from opsdroid.core import OpsDroid
from opsdroid.matchers import match_regex
from opsdroid.events import Message
from opsdroid.parsers.regex import parse_regex
class TestParserRegex(asynctest.TestCase):
"""Test the opsdroid regex parser."""
async def setup(self):
configure_lang({})
async def getMockSkill(self):
async def mockedskill(opsdroid, config, message):
pass
mockedskill.config = {}
return mockedskill
async def getRaisingMockSkill(self):
async def mockedskill(opsdroid, config, message):
raise Exception()
mockedskill.config = {}
return mockedskill
async def test_parse_regex(self):
with OpsDroid() as opsdroid:
mock_skill = await self.getMockSkill()
opsdroid.skills.append(match_regex(r"(.*)")(mock_skill))
mock_connector = amock.CoroutineMock()
message = Message("Hello world", "user", "default", mock_connector)
skills = await parse_regex(opsdroid, opsdroid.skills, message)
self.assertEqual(mock_skill, skills[0]["skill"])
assert skills[0]["message"] is message
# test that the original object has had a new attribute added
assert hasattr(message, "regex")
async def test_parse_regex_priority_low(self):
with OpsDroid() as opsdroid:
regex = r"(.*)"
mock_skill_low = await self.getMockSkill()
opsdroid.skills.append(match_regex(regex, score_factor=0.6)(mock_skill_low))
mock_connector = amock.CoroutineMock()
message = Message("Hello world", "user", "default", mock_connector)
skills = await opsdroid.get_ranked_skills(opsdroid.skills, message)
self.assertEqual(mock_skill_low, skills[0]["skill"])
async def test_parse_regex_priority_high(self):
with OpsDroid() as opsdroid:
regex = r"(.*)"
mock_skill_high = await self.getMockSkill()
opsdroid.skills.append(match_regex(regex, score_factor=1)(mock_skill_high))
mock_connector = amock.CoroutineMock()
message = Message("Hello world", "user", "default", mock_connector)
skills = await opsdroid.get_ranked_skills(opsdroid.skills, message)
self.assertEqual(mock_skill_high, skills[0]["skill"])
async def test_parse_regex_raises(self):
with OpsDroid() as opsdroid:
mock_skill = await self.getRaisingMockSkill()
opsdroid.skills.append(match_regex(r"(.*)")(mock_skill))
self.assertEqual(len(opsdroid.skills), 1)
mock_connector = amock.MagicMock()
mock_connector.send = amock.CoroutineMock()
message = Message("Hello world", "user", "default", mock_connector)
skills = await parse_regex(opsdroid, opsdroid.skills, message)
self.assertEqual(mock_skill, skills[0]["skill"])
async def test_parse_regex_matching_condition_search(self):
with OpsDroid() as opsdroid:
regex = r"(.*)"
mock_skill_matching_search = await self.getMockSkill()
opsdroid.skills.append(
match_regex(regex, matching_condition="search")(
mock_skill_matching_search
)
)
mock_connector = amock.CoroutineMock()
message = Message("Hello world", "user", "default", mock_connector)
skills = await opsdroid.get_ranked_skills(opsdroid.skills, message)
self.assertEqual(mock_skill_matching_search, skills[0]["skill"])
async def test_parse_regex_matching_condition_match(self):
with OpsDroid() as opsdroid:
regex = r"(.*)"
mock_skill_matching_match = await self.getMockSkill()
opsdroid.skills.append(
match_regex(regex, matching_condition="match")(
mock_skill_matching_match
)
)
mock_connector = amock.CoroutineMock()
message = Message("Hello world", "user", "default", mock_connector)
skills = await opsdroid.get_ranked_skills(opsdroid.skills, message)
self.assertEqual(mock_skill_matching_match, skills[0]["skill"])
async def test_parse_regex_matching_condition_fullmatch(self):
with OpsDroid() as opsdroid:
regex = r"(.*)"
mock_skill_matching_fullmatch = await self.getMockSkill()
opsdroid.skills.append(
match_regex(regex, matching_condition="fullmatch")(
mock_skill_matching_fullmatch
)
)
mock_connector = amock.CoroutineMock()
message = Message("Hello world", "user", "default", mock_connector)
skills = await opsdroid.get_ranked_skills(opsdroid.skills, message)
self.assertEqual(mock_skill_matching_fullmatch, skills[0]["skill"])
async def test_parse_regex_named_groups_entities(self):
with OpsDroid() as opsdroid:
regex = r"Hello (?P<name>.*)"
mock_skill_named_groups = await self.getMockSkill()
opsdroid.skills.append(match_regex(regex)(mock_skill_named_groups))
mock_connector = amock.CoroutineMock()
message = Message("Hello opsdroid", "user", "default", mock_connector)
[skill] = await opsdroid.get_ranked_skills(opsdroid.skills, message)
parsed_message = skill["message"]
self.assertEqual(len(parsed_message.entities.keys()), 1)
self.assertTrue("name" in parsed_message.entities.keys())
self.assertEqual(parsed_message.entities["name"]["value"], "opsdroid")