Skip to content
This repository was archived by the owner on Apr 27, 2019. It is now read-only.

Commit f9b270e

Browse files
committed
[142] Added rest of unit test for AdminMessenger
1 parent e75acb6 commit f9b270e

4 files changed

Lines changed: 155 additions & 26 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
.cache
12
*.py[cod]
23

34
# C extensions

plugins/admin_messenger/admin_messenger.py

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class AdminMessenger(BasePlugin):
99
"""
1010
Adds support to message moderators/admins/owner with a @@ prefixed message.
1111
"""
12-
name = "admin_messenger"
12+
name = 'admin_messenger'
1313
depends = ['player_manager_plugin']
1414

1515
def activate(self):
@@ -26,48 +26,56 @@ def on_chat_sent(self, data):
2626
return False
2727
return True
2828

29-
def message_admins(self, message):
30-
now = datetime.now()
29+
def add_timestamp(self, add_normalizer=False):
3130
if self.config.chattimestamps:
32-
timestamp = "^red;<{}> ^yellow;".format(now.strftime("%H:%M"))
31+
now = datetime.now()
32+
timestamp = '^red;<{}> '.format(now.strftime('%H:%M'))
33+
if add_normalizer:
34+
return '{}^yellow;'.format(timestamp)
35+
return timestamp
3336
else:
34-
timestamp = ""
37+
return ''
38+
39+
def message_admins(self, message):
40+
timestamp = self.add_timestamp(add_normalizer=True)
41+
message = message.message[2:].decode('utf-8')
42+
3543
for protocol in self.factory.protocols.itervalues():
3644
if protocol.player.access_level >= UserLevels.MODERATOR:
3745
protocol.send_chat_message(
38-
"{}{}ADMIN: ^yellow;<{}^yellow;> {}{}".format(
39-
timestamp,
40-
self.config.colors["moderator"],
41-
self.protocol.player.colored_name(self.config.colors),
42-
self.config.colors["moderator"],
43-
message.message[2:].decode("utf-8")
46+
'{timestamp}{moderator_colors}'
47+
'ADMIN: ^yellow;<{player_colors}^yellow;> '
48+
'{moderator_colors}{message}'.format(
49+
timestamp=timestamp,
50+
moderator_colors=self.config.colors['moderator'],
51+
player_colors=(
52+
self.protocol.player.colored_name(
53+
self.config.colors
54+
)
55+
),
56+
message=message
4457
)
4558
)
4659
self.logger.info(
47-
"Received an admin message from %s. Message: %s",
48-
self.protocol.player.name,
49-
message.message[2:].decode("utf-8")
60+
'Received an admin message from %s. Message: %s',
61+
self.protocol.player.name, message
5062
)
5163

5264
@permissions(UserLevels.ADMIN)
5365
def broadcast_message(self, message):
54-
now = datetime.now()
55-
if self.config.chattimestamps:
56-
timestamp = "^red;<{}> ".format(now.strftime("%H:%M"))
57-
else:
58-
timestamp = ""
66+
timestamp = self.add_timestamp()
5967

6068
for protocol in self.factory.protocols.itervalues():
6169
protocol.send_chat_message(
62-
"{}{}BROADCAST: ^red;{}{}".format(
70+
'{}{}BROADCAST: ^red;{}{}'.format(
6371
timestamp,
64-
self.config.colors["admin"],
65-
message.message[3:].decode("utf-8").upper(),
66-
self.config.colors["default"]
72+
self.config.colors['admin'],
73+
message.message[3:].decode('utf-8').upper(),
74+
self.config.colors['default']
6775
)
6876
)
6977
self.logger.info(
70-
"Broadcast from %s. Message: %s",
78+
'Broadcast from %s. Message: %s',
7179
self.protocol.player.name,
72-
message.message[3:].decode("utf-8").upper()
80+
message.message[3:].decode('utf-8').upper()
7381
)

plugins/admin_messenger/test_admin_messenger.py

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
from unittest import TestCase
2+
from datetime import datetime
23

34
from mock import Mock, patch
45

56
from plugins.admin_messenger.admin_messenger import AdminMessenger
7+
from plugins.core.player_manager_plugin import UserLevels
68

79

810
class AdminMessengerTestCase(TestCase):
@@ -73,3 +75,121 @@ def test_on_chat_sent_normal_message(
7375
self.assertTrue(plugin.on_chat_sent(mock_data))
7476
self.assertFalse(mock_admins.called)
7577
self.assertFalse(mock_broadcast.called)
78+
79+
@patch('plugins.admin_messenger.admin_messenger.datetime')
80+
def test_add_timestamp(self, mock_datetime):
81+
current_datetime = datetime.now()
82+
mock_datetime.now.return_value = current_datetime
83+
plugin = AdminMessenger()
84+
plugin.config = Mock()
85+
86+
result = plugin.add_timestamp()
87+
self.assertEqual(
88+
result,
89+
'^red;<{}> '.format(current_datetime.strftime('%H:%M'))
90+
)
91+
92+
result = plugin.add_timestamp(True)
93+
self.assertEqual(
94+
result,
95+
'^red;<{}> ^yellow;'.format(current_datetime.strftime('%H:%M'))
96+
)
97+
98+
plugin.config.chattimestamps = False
99+
result = plugin.add_timestamp()
100+
self.assertEqual(result, '')
101+
102+
@patch.object(AdminMessenger, 'add_timestamp')
103+
def test_message_admins(self, mock_add_timestamp):
104+
mock_logger = Mock()
105+
mock_config = Mock()
106+
mock_config.colors = {'moderator': 'moderator colors'}
107+
mock_message = Mock()
108+
mock_message.message = '##test'
109+
mock_add_timestamp.return_value = 'with add_normalizer'
110+
mock_just_player = Mock()
111+
mock_just_player.player.access_level = UserLevels.GUEST
112+
mock_player_moderator = Mock()
113+
mock_player_moderator.player.access_level = UserLevels.MODERATOR
114+
mock_factory = Mock()
115+
mock_factory.protocols = {
116+
'normal player': mock_just_player,
117+
'moderator': mock_player_moderator
118+
}
119+
mock_protocol = Mock()
120+
mock_protocol.player.colored_name.return_value = 'player colors'
121+
plugin = AdminMessenger()
122+
plugin.factory = mock_factory
123+
plugin.config = mock_config
124+
plugin.logger = mock_logger
125+
plugin.protocol = mock_protocol
126+
127+
plugin.message_admins(mock_message)
128+
mock_player_moderator.send_chat_message.assert_called_with(
129+
'{}{}ADMIN: ^yellow;<{}^yellow;> {}{}'.format(
130+
'with add_normalizer',
131+
'moderator colors',
132+
'player colors',
133+
'moderator colors',
134+
'test'
135+
)
136+
)
137+
mock_logger.info.assert_called_with(
138+
'Received an admin message from %s. Message: %s',
139+
mock_protocol.player.name, 'test'
140+
)
141+
self.assertFalse(mock_just_player.send_chat_message.called)
142+
mock_add_timestamp.assert_called_with(add_normalizer=True)
143+
144+
@patch.object(AdminMessenger, 'add_timestamp')
145+
def test_broadcast_message(self, mock_add_timestamp):
146+
mock_logger = Mock()
147+
mock_config = Mock()
148+
mock_config.colors = {
149+
'admin': 'admin colors',
150+
'default': 'default colors'
151+
}
152+
mock_message = Mock()
153+
mock_message.message = '###test'
154+
mock_add_timestamp.return_value = 'without add_normalizer'
155+
mock_just_player = Mock()
156+
mock_player_moderator = Mock()
157+
mock_factory = Mock()
158+
mock_factory.protocols = {
159+
'normal player': mock_just_player,
160+
'moderator': mock_player_moderator
161+
}
162+
mock_protocol = Mock()
163+
mock_protocol.player.access_level = UserLevels.ADMIN
164+
plugin = AdminMessenger()
165+
plugin.factory = mock_factory
166+
plugin.config = mock_config
167+
plugin.logger = mock_logger
168+
plugin.protocol = mock_protocol
169+
expected_message = '{}{}BROADCAST: ^red;{}{}'.format(
170+
'without add_normalizer', 'admin colors', 'TEST',
171+
'default colors'
172+
)
173+
174+
plugin.broadcast_message(mock_message)
175+
mock_player_moderator.send_chat_message.assert_called_with(
176+
expected_message
177+
)
178+
mock_just_player.send_chat_message.assert_called_with(expected_message)
179+
mock_logger.info.assert_called_with(
180+
'Broadcast from %s. Message: %s',
181+
mock_protocol.player.name, 'TEST'
182+
)
183+
self.assertFalse(mock_protocol.send_chat_message.called)
184+
185+
def test_broadcast_message_not_admin(self):
186+
mock_protocol = Mock()
187+
mock_protocol.player.access_level = UserLevels.GUEST
188+
plugin = AdminMessenger()
189+
plugin.protocol = mock_protocol
190+
191+
result = plugin.broadcast_message('test')
192+
self.assertFalse(result)
193+
mock_protocol.send_chat_message.assert_called_with(
194+
'You are not authorized to do this.'
195+
)

plugins/core/player_manager_plugin/manager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,7 @@ def wrapper(f):
502502
def wrapped_function(self, *args, **kwargs):
503503
if self.protocol.player.access_level >= level:
504504
if level >= UserLevels.MODERATOR:
505-
if self.protocol.player.admin_logged_in == 0:
505+
if not self.protocol.player.admin_logged_in:
506506
self.protocol.send_chat_message(
507507
'^red;You\'re not logged in, so I can\'t '
508508
'let you do that.^yellow;'

0 commit comments

Comments
 (0)