Example #1
0
    def test_non_existing_plugin(self):
        slack = Slack(token='spam_ham_egg',
                      plugins=(('spam.ham.egg.onion', {}),),
                      max_workers=1)
        slack.load_plugins()

        assert_that(slack.commands).is_empty()
        assert_that(slack.scheduler.get_jobs()).is_empty()
Example #2
0
    def test_connection_fail(self):
        slack = Slack(token='spam_ham_egg',
                      plugins=(('spam.ham.egg.onion', {}),),
                      max_workers=1)

        with patch.object(slack.client,
                          'request',
                          side_effect=Exception) as mock_connect:
            with pytest.raises(SarahSlackException) as e:
                slack.connect()

            assert_that(str(e)).matches("Slack request error on /rtm.start\.")
            assert_that(mock_connect.call_count).is_equal_to(1)
Example #3
0
    def test_add_schedule_job(self):
        slack = Slack(
            token='spam_ham_egg',
            max_workers=1,
            plugins=(('sarah.bot.plugins.bmw_quotes',
                      {'channels': 'U06TXXXXX'}),))
        slack.connect = lambda: True
        slack.run()

        jobs = slack.scheduler.get_jobs()
        assert_that(jobs).is_length(1)
        assert_that(jobs[0]).has_id('sarah.bot.plugins.bmw_quotes.bmw_quotes')
        assert_that(jobs[0].trigger).has_interval_length(300)
Example #4
0
    def test_connection_ok(self):
        slack = Slack(token='spam_ham_egg',
                      plugins=(('spam.ham.egg.onion', {}),),
                      max_workers=1)

        with patch.object(slack.client,
                          'get',
                          return_value={'url': 'ws://localhost:80/'}):
            with patch.object(sarah.bot.slack.WebSocketApp,
                              'run_forever',
                              return_value=True) as mock_connect:
                slack.connect()

                assert_that(mock_connect.call_count).is_equal_to(1)
Example #5
0
    def test_connection_response_error(self):
        slack = Slack(token='spam_ham_egg',
                      plugins=(('spam.ham.egg.onion', {}),),
                      max_workers=1)

        with patch.object(slack.client,
                          'get',
                          return_value={"dummy": "spam"}) as mock_connect:
            with pytest.raises(SarahSlackException) as e:
                slack.connect()

            assert_that(mock_connect.call_count).is_equal_to(1)
            assert_that(str(e)).matches("Slack response did not contain "
                                        "connecting url. {'dummy': 'spam'}")
Example #6
0
    def test_missing_channel_config(self):
        logging.warning = MagicMock()

        slack = Slack(
            token='spam_ham_egg',
            plugins=(('sarah.bot.plugins.bmw_quotes', {"dummy": "spam"}),),
            max_workers=1)
        slack.connect = lambda: True
        slack.run()

        assert_that(logging.warning.call_count).is_equal_to(1)
        assert_that(logging.warning.call_args) \
            .is_equal_to(call('Missing channels configuration for schedule '
                              'job. sarah.bot.plugins.bmw_quotes. Skipping.'))
Example #7
0
    def test_missing_config(self):
        logging.warning = MagicMock()

        slack = Slack(token='spam_ham_egg',
                      plugins=(('sarah.bot.plugins.bmw_quotes',),),
                      max_workers=1)
        slack.connect = lambda: True
        slack.run()

        assert_that(slack.scheduler.get_jobs()) \
            .described_as("No module is loaded") \
            .is_empty()
        assert_that(logging.warning.call_count).is_equal_to(1)
        assert_that(logging.warning.call_args) \
            .is_equal_to(call('Missing configuration for schedule job. '
                              'sarah.bot.plugins.bmw_quotes. Skipping.'))
Example #8
0
    def test_init(self):
        slack = Slack(token='spam_ham_egg', plugins=(), max_workers=1)

        assert_that(slack.client) \
            .described_as("Client module is properly configured") \
            .is_instance_of(SlackClient) \
            .has_token("spam_ham_egg")

        assert_that(slack) \
            .has_message_id(0) \
            .has_ws(None) \
            .has_connect_attempt_count(0)
Example #9
0
    def test_load_plugins(self):
        slack = Slack(token='spam_ham_egg',
                      plugins=(('sarah.bot.plugins.simple_counter', {}),
                               ('sarah.bot.plugins.echo', {})),
                      max_workers=1)
        slack.load_plugins()

        assert_that(slack.commands) \
            .described_as("3 commands are loaded") \
            .is_length(3) \
            .extract('name') \
            .contains('.count',
                      '.reset_count',
                      '.echo')

        assert_that(slack.commands) \
            .extract('name', 'module_name') \
            .contains_sequence(('.count', 'sarah.bot.plugins.simple_counter'),
                               ('.reset_count',
                                'sarah.bot.plugins.simple_counter'),
                               ('.echo', 'sarah.bot.plugins.echo'))

        for command in slack.commands:
            assert_that(command.function).is_type_of(types.FunctionType)
Example #10
0
 def slack(self, request):
     client = Slack(token='spam_ham_egg',
                    plugins=(),
                    max_workers=1)
     client.ws = MagicMock()
     return client
Example #11
0
 def slack(self, request):
     client = Slack(token='spam_ham_egg',
                    plugins=(),
                    max_workers=1)
     client.ws = Mock(spec=WebSocketApp)
     return client
Example #12
0
 def slack(self, request):
     return Slack(token='spam_ham_egg', plugins=(), max_workers=1)
Example #13
0
 def slack(self, request):
     client = Slack(token='spam_ham_egg', plugins=(), max_workers=1)
     client.ws = MagicMock()
     return client
Example #14
0
 def slack(self, request):
     client = Slack(token='spam_ham_egg', plugins=(), max_workers=1)
     client.ws = Mock(spec=WebSocketApp)
     return client