diff --git a/src/jcl/jabber/command.py b/src/jcl/jabber/command.py index f953ace..853c1ef 100644 --- a/src/jcl/jabber/command.py +++ b/src/jcl/jabber/command.py @@ -897,17 +897,18 @@ class JCLCommandManager(CommandManager): def execute_announce_2(self, info_query, session_context, command_node, lang_class): self.__logger.debug("Executing command 'announce' step 2") - announcement = session_context["announcement"][0] - users = account.get_all_users(\ - filter=AND(Account.q.userID == User.q.id, - Account.q._status != account.OFFLINE), - distinct=True) result = [] - for user in users: - result.append(Message(from_jid=self.component.jid, - to_jid=user.jid, - body=announcement)) - command_node.setProp("status", STATUS_COMPLETED) + if session_context.has_key("announcement"): + announcement = session_context["announcement"][0] + users = account.get_all_users(\ + filter=AND(Account.q.userID == User.q.id, + Account.q._status != account.OFFLINE), + distinct=True) + for user in users: + result.append(Message(from_jid=self.component.jid, + to_jid=user.jid, + body=announcement)) + command_node.setProp("status", STATUS_COMPLETED) return (None, result) ########################################################################### diff --git a/src/jcl/jabber/tests/command.py b/src/jcl/jabber/tests/command.py index 5617d6f..1d815a2 100644 --- a/src/jcl/jabber/tests/command.py +++ b/src/jcl/jabber/tests/command.py @@ -2329,7 +2329,7 @@ class JCLCommandManager_TestCase(JCLTestCase): self.assertEquals(values[24].content, "test1@test.com (account1112 ExampleAccount)") - def test_execute_announce(self): + def _common_execute_announce(self): self.comp.account_manager.account_classes = (ExampleAccount, Example2Account) model.db_connect() @@ -2386,6 +2386,11 @@ class JCLCommandManager_TestCase(JCLTestCase): session_id = xml_command.prop("sessionid") command_node.setProp("sessionid", session_id) command_node.setProp("action", "next") + return (command_node, info_query, xml_command, session_id) + + def test_execute_announce(self): + (command_node, info_query, xml_command, + session_id) = self._common_execute_announce() submit_form = Form(xmlnode_or_type="submit") submit_form.add_field(field_type="text-multi", name="announcement", @@ -2412,6 +2417,25 @@ class JCLCommandManager_TestCase(JCLTestCase): self.assertEquals(result[2].get_to(), "test2@test.com") self.assertEquals(result[2].get_body(), "test announce") + def test_execute_announce_no_announcement(self): + (command_node, info_query, xml_command, + session_id) = self._common_execute_announce() + submit_form = Form(xmlnode_or_type="submit") + submit_form.as_xml(command_node) + result = self.command_manager.apply_command_action(\ + info_query, + "http://jabber.org/protocol/admin#announce", + "execute") + self.assertNotEquals(result, None) + self.assertEquals(len(result), 1) + xml_command = result[0].xpath_eval("c:command", + {"c": "http://jabber.org/protocol/commands"})[0] + self.assertEquals(xml_command.prop("status"), "completed") + self.assertEquals(xml_command.prop("sessionid"), session_id) + self.__check_actions(result[0]) + context_session = self.command_manager.sessions[session_id][1] + self.assertFalse(context_session.has_key("announcement")) + def test_execute_set_motd(self): self.comp.account_manager.account_classes = (ExampleAccount, Example2Account)