def test_kick_not_empty_no_skip_paused(self):
        bot = common.make_bot()
        jobs = {}
        for i in range(0, 10):
            job = mock.MagicMock()
            if i == 0:
                job.next_run_time = self.ZERO_DT
            else:
                if i % 2 == 0:
                    job.next_run_time = self.IN_ONE_HOUR_DT
                else:
                    job.next_run_time = None
            job.id = str(i)
            jobs[job.id] = job
        bot.scheduler.get_jobs.return_value = list(jobs.values())
        bot.scheduler.submitted_jobs = {}
        bot.scheduler.submitted_jobs["1"] = self.ZERO_DT

        m = common.make_message(text="periodics run all",
                                to_me=True,
                                user_id="me")
        h = schedule.RunAllHandler(bot, m)

        h.run(handler.HandlerMatch("skip_paused=false"))
        m.reply_text.assert_called_with("Kicked 10 jobs and skipped 0 jobs.",
                                        prefixed=False,
                                        threaded=True)
    def test_add_alias(self):
        bot = common.make_bot(simple_config=True)

        m = common.make_message(text="alias add b c", to_me=True, user_id="me")
        h = alias.AddHandler(bot, m)
        h.run(handler.HandlerMatch("b c"))
        self.assertEqual(bot.brain.storage,
                         {'user:me': {'aliases': {'c': 'b'}}})
    def test_remove_alias(self):
        bot = common.make_bot(simple_config=True)
        bot.brain = common.MockBrain({'user:me': {'aliases': {'c': 'b'}}})

        m = common.make_message(text="alias remove c",
                                to_me=True, user_id="me")
        h = alias.RemoveHandler(bot, m)
        h.run(handler.HandlerMatch("c"))
        self.assertEqual(bot.brain.storage,
                         {'user:me': {'aliases': {}}})
示例#4
0
 def test_arg_parsing_defaults(self):
     handles_what = {
         'args': {
             'triggers': [
                 trigger.Trigger('test', True),
             ],
             'order': ['a', 'b', 'c'],
             'defaults': {
                 'a': "4",
             },
         },
     }
     h_cls = make_handler_cls(handles_what)
     m = handler.HandlerMatch("b=3 c=4")
     kwargs, _validated = h_cls.extract_arguments(m)
     self.assertEqual(kwargs, {'a': '4', 'c': '4', 'b': '3'})
     m = handler.HandlerMatch()
     kwargs, _validated = h_cls.extract_arguments(m)
     self.assertEqual(kwargs, {"a": "4"})
    def test_restart_check_bot_really_restarted(self):
        bot = common.make_bot()

        m = common.make_message(text="restart",
                                to_me=True, user_id="me")

        h = restart.Handler(bot, m)
        h.run(handler.HandlerMatch())

        self.assertEqual(e.Event.RESTART, bot.dead.value)
示例#6
0
    def test_info_with_metadata(self):
        bot = common.make_bot()

        m = common.make_message(text="what are you?", to_me=True, user_id="me")

        h = what_are_you.Handler(bot, m)
        with mock.patch('pkginfo.get_metadata'):
            h.run(handler.HandlerMatch())

        m.reply_text.assert_not_called()
        m.reply_attachments.assert_called_once()
示例#7
0
    def test_openstack_runs_default(self):
        bot = common.make_bot()
        bot.topo_loader.env_names = tuple(['test'])

        m = common.make_message(text="openstack server show",
                                to_me=True,
                                user_id="me")
        h = openstack.DescribeServerHandler(bot, m)
        h.run(handler.HandlerMatch('blah-svrnm'))

        bot.topo_loader.load_one.assert_called()
    def test_clear_alias(self):
        bot = common.make_bot(simple_config=True)
        bot.brain = common.MockBrain({
            'user:me': {'aliases': {'c': 'b', 'e': 'f'}},
        })

        m = common.make_message(text="alias clear", to_me=True, user_id="me")
        h = alias.ClearHandler(bot, m)
        h.run(handler.HandlerMatch())
        self.assertEqual(bot.brain.storage,
                         {'user:me': {'aliases': {}}})
示例#9
0
    def test_help_me_call(self):
        bot = common.make_bot()

        m = common.make_message(text="consult me", to_me=True, user_id="me")

        with requests_mock.mock() as req_m:
            req_m.get(help_me.Handler.buzz_url, text="you have been helped")
            h = help_me.Handler(bot, m)
            h.run(handler.HandlerMatch())

        m.reply_text.assert_called_once()
示例#10
0
 def handles(cls, message, channel, config):
     channel_matcher = cls.handles_what['channel_matcher']
     if not channel_matcher(channel):
         return None
     message_matcher = cls.handles_what['message_matcher']
     if not message_matcher(message, cls):
         return None
     if config.get('event_channels'):
         return handler.HandlerMatch()
     else:
         return None
    def test_periodic_no_run_missing(self):
        bot = common.make_bot()

        jobs = {}
        bot.scheduler.get_job.side_effect = lambda job_id: jobs.get(job_id)
        m = common.make_message(text="periodics run one 1",
                                to_me=True,
                                user_id="me")

        h = schedule.RunOneHandler(bot, m)
        self.assertRaises(excp.NotFound, h.run, handler.HandlerMatch("1"))
    def test_restart_get_message(self):
        bot = common.make_bot()

        m = common.make_message(text="restart",
                                to_me=True, user_id="me")

        h = restart.Handler(bot, m)
        h.run(handler.HandlerMatch())

        m.reply_text.assert_called_once_with(
            'Restart acknowledged. Be back in a bit!',
            prefixed=False, threaded=True)
示例#13
0
    def test_uptime_is_not_zero(self, mock_now):
        bot = common.make_bot()
        bot.started_at = datetime.now(tz=pytz.timezone('UTC'))
        bot.config.tz = 'UTC'
        mock_now.return_value = bot.started_at

        m = common.make_message(text="uptime", to_me=True, user_id="me")

        h = uptime.Handler(bot, m)
        h.run(handler.HandlerMatch())

        m.reply_text.assert_called_once_with(
            'I have been alive for 0 seconds.', prefixed=False, threaded=True)
示例#14
0
    def test_uptime_is_zero(self):
        bot = common.make_bot()
        bot.started_at = None

        m = common.make_message(text="uptime", to_me=True, user_id="me")

        h = uptime.Handler(bot, m)
        h.run(handler.HandlerMatch())

        m.reply_text.assert_called_once_with(
            "I am not alive, how are you sending this?",
            threaded=True,
            prefixed=False)
示例#15
0
    def test_info_without_metadata(self, get_meta):
        bot = common.make_bot()

        get_meta.return_value = False

        m = common.make_message(text="what are you?", to_me=True, user_id="me")

        h = what_are_you.Handler(bot, m)
        h.run(handler.HandlerMatch())

        m.reply_text.assert_called_once_with('I am not really sure what I am.',
                                             prefixed=False,
                                             threaded=True)
示例#16
0
 def test_same_arg_parsing(self):
     handles_what = {
         'args': {
             'triggers': [
                 trigger.Trigger('test', True),
             ],
             'order': ['a'],
         },
     }
     h_cls = make_handler_cls(handles_what)
     m = handler.HandlerMatch("a=2 a=4 a=5")
     kwargs, _validated = h_cls.extract_arguments(m)
     self.assertEqual(kwargs, {'a': '5'})
    def test_version_with_distribution(self, get_dist):
        bot = common.make_bot()

        get_dist.return_value = munch.Munch({'version': '1.0.0'})

        m = common.make_message(text="version", to_me=True, user_id="me")

        h = version.Handler(bot, m)
        h.run(handler.HandlerMatch())

        m.reply_text.assert_called_once_with('I am padre version `1.0.0`.',
                                             prefixed=False,
                                             threaded=True)
示例#18
0
 def test_invalid_arg_parsing(self):
     handles_what = {
         'args': {
             'triggers': [
                 trigger.Trigger('test', True),
             ],
             'order': ['a', 'b', 'c'],
         },
     }
     h_cls = make_handler_cls(handles_what)
     m = handler.HandlerMatch("a=2 4 3")
     self.assertRaises(excp.ArgumentError,
                       h_cls.extract_arguments, m)
     m = handler.HandlerMatch("4 a=2 4")
     self.assertRaises(excp.ArgumentError,
                       h_cls.extract_arguments, m)
     m = handler.HandlerMatch("c=3 a=2 4")
     self.assertRaises(excp.ArgumentError,
                       h_cls.extract_arguments, m)
     m = handler.HandlerMatch("c=3 a=2 4")
     self.assertRaises(excp.ArgumentError,
                       h_cls.extract_arguments, m)
    def test_kick_empty(self):
        bot = common.make_bot()
        jobs = {}
        bot.scheduler.get_jobs.return_value = list(jobs.values())

        m = common.make_message(text="periodics run all",
                                to_me=True,
                                user_id="me")
        h = schedule.RunAllHandler(bot, m)

        h.run(handler.HandlerMatch())
        m.reply_text.assert_called_with("Kicked 0 jobs and skipped 0 jobs.",
                                        prefixed=False,
                                        threaded=True)
    def test_version_without_distribution(self, get_dist):
        bot = common.make_bot()

        get_dist.return_value = False

        m = common.make_message(text="version", to_me=True, user_id="me")

        h = version.Handler(bot, m)
        h.run(handler.HandlerMatch())

        m.reply_text.assert_called_once_with(
            'I am not really sure what version I am.',
            prefixed=False,
            threaded=True)
示例#21
0
    def test_tell_joke(self):
        bot = common.make_bot()

        m = common.make_message(text="tell me a joke",
                                to_me=True, user_id="me")

        h = tell_joke.Handler(bot, m)

        with requests_mock.mock() as req_m:
            req_m.get(h.joke_url, json={"joke": 'an amazing joke'})
            h.run(handler.HandlerMatch())

        m.reply_text.assert_called_once_with('an amazing joke',
                                             prefixed=False, threaded=True)
示例#22
0
    def test_ldap_list_nonexisting_group(self):
        bot = common.make_bot()
        ldap_client = mock.MagicMock()
        ldap_client.list_ldap_group.return_value = list()
        bot.clients.ldap_client = ldap_client

        m = common.make_message(text="ldap list",
                                to_me=True, user_id="me")

        h = ldap.DescribeUserHandler(bot, m)
        h.run(handler.HandlerMatch('NonExistentGroup'))

        m.reply_text.assert_called_once_with(u'```\n\n```', prefixed=False,
                                             threaded=True)
示例#23
0
    def test_joke_is_unavailable(self):
        bot = common.make_bot()

        m = common.make_message(text="tell me a joke",
                                to_me=True, user_id="me")

        h = tell_joke.Handler(bot, m)

        with requests_mock.mock() as req_m:
            req_m.get(h.joke_url, json={})
            h.run(handler.HandlerMatch())

        m.reply_text.assert_called_once_with(
            'No joke found when calling `%s`.' % h.joke_url,
            prefixed=False, threaded=True)
示例#24
0
 def handles(cls, message, channel, config):
     channel_matcher = cls.handles_what['channel_matcher']
     if not channel_matcher(channel):
         return None
     message_matcher = cls.handles_what['message_matcher']
     if not message_matcher(message, cls):
         return None
     try:
         event_channels = list(config.event_channels)
     except AttributeError:
         event_channels = []
     if event_channels:
         return handler.HandlerMatch()
     else:
         return None
示例#25
0
    def test_ldap_describe_nonexisting_user(self):
        bot = common.make_bot()

        ldap_client = mock.MagicMock()
        ldap_client.describe_user.return_value = False
        bot.clients.ldap_client = ldap_client

        m = common.make_message(text="ldap describe user",
                                to_me=True, user_id="me")

        h = ldap.DescribeUserHandler(bot, m)
        h.run(handler.HandlerMatch('NonExistentUser'))

        m.reply_text.assert_called_once_with(
            'No user with name `NonExistentUser` found.',
            prefixed=False, threaded=True)
    def test_show_empty(self):
        bot = common.make_bot()
        jobs = {}
        bot.scheduler.timezone = pytz.utc
        bot.scheduler.get_jobs.return_value = list(jobs.values())

        m = common.make_message(text="periodics show",
                                to_me=True,
                                user_id="me")
        h = schedule.ShowHandler(bot, m)

        h.run(handler.HandlerMatch())

        m.reply_text.assert_called_with("Scheduler is in `UNKNOWN` state.",
                                        prefixed=False,
                                        threaded=True)
    def test_periodic_no_run_paused(self):
        bot = common.make_bot()

        mock_job = mock.MagicMock()
        mock_job.next_run_time = None
        mock_job.id = '1'
        jobs = {
            mock_job.id: mock_job,
        }
        bot.scheduler.get_job.side_effect = lambda job_id: jobs.get(job_id)
        m = common.make_message(text="periodics run one 1",
                                to_me=True,
                                user_id="me")

        h = schedule.RunOneHandler(bot, m)
        self.assertRaises(RuntimeError, h.run, handler.HandlerMatch("1"))
示例#28
0
    def test_ldap_describe_existing_user(self):
        bot = common.make_bot()
        ldap_client = mock.MagicMock()
        ldap_client.describe_user.return_value = {
            'name': 'Some User',
            'uid': 99999
        }
        bot.clients.ldap_client = ldap_client

        m = common.make_message(text="ldap describe user",
                                to_me=True, user_id="me")

        h = ldap.DescribeUserHandler(bot, m)
        h.run(handler.HandlerMatch('some_user'))

        m.reply_text.assert_called_once_with(
            u'```\nName         Uid\n---------  -----\nSome User  99999\n```',
            prefixed=False, threaded=True)
示例#29
0
    def test_shutdown(self):
        bot = common.make_bot()

        m = common.make_message(text="periodics run all",
                                to_me=True,
                                user_id="me")

        h = shutdown.Handler(bot, m)
        with mock.patch('random.choice') as rch:
            rch.return_value = "Live long and prosper."
            h.run(handler.HandlerMatch())

        m.reply_text.assert_called_once_with(
            'Shutdown acknowledged. Live long and prosper.',
            prefixed=False,
            threaded=True)

        self.assertEqual(e.Event.DIE, bot.dead.value)
示例#30
0
    def test_ldap_describe_existing_group(self):
        bot = common.make_bot()

        ldap_client = mock.MagicMock()
        ldap_client.list_ldap_group.return_value = [
            "DC=dc1,OU=AwesomeGroup,CN=dc_group"
        ]
        bot.clients.ldap_client = ldap_client

        m = common.make_message(text="ldap list", to_me=True, user_id="me")

        h = ldap.ListHandler(bot, m)
        h.run(handler.HandlerMatch('dc_group'))

        m.reply_text.assert_called_once_with(
            u'```\nCN        DC    OU\n--------  ----  ------------\n'
            u'dc_group  dc1   AwesomeGroup\n```',
            prefixed=False, threaded=True)