From 470e6db4bc1e8d036834d7002cd1fec5483203fe Mon Sep 17 00:00:00 2001 From: linuxdaemon Date: Wed, 3 Jul 2019 06:45:50 -0500 Subject: [PATCH] brew.py: Handle empty search results from API Fixes #559 --- .coveragerc | 1 + plugins/brew.py | 3 +++ tests/plugin_tests/test_brew.py | 24 ++++++++++++++++++++++++ tests/util/__init__.py | 0 tests/util/mock_bot.py | 17 +++++++++++++++++ 5 files changed, 45 insertions(+) create mode 100644 tests/plugin_tests/test_brew.py create mode 100644 tests/util/__init__.py create mode 100644 tests/util/mock_bot.py diff --git a/.coveragerc b/.coveragerc index 907cfd416..81901039c 100644 --- a/.coveragerc +++ b/.coveragerc @@ -11,3 +11,4 @@ exclude_lines = [run] omit = tests/data/* + tests/util/* diff --git a/plugins/brew.py b/plugins/brew.py index e84b6df6b..eda20923f 100644 --- a/plugins/brew.py +++ b/plugins/brew.py @@ -29,6 +29,9 @@ def brew(text, reply): try: if 'totalResults' in response: + if response['totalResults'] == 0: + return output + beer = response['data'][0] brewery = beer['breweries'][0] diff --git a/tests/plugin_tests/test_brew.py b/tests/plugin_tests/test_brew.py new file mode 100644 index 000000000..7668111b2 --- /dev/null +++ b/tests/plugin_tests/test_brew.py @@ -0,0 +1,24 @@ +from mock import MagicMock + +from tests.util.mock_bot import MockBot + + +def test_no_results(mock_requests, unset_bot): + from cloudbot.bot import bot + + bot.set(MockBot({"api_keys": {"brewerydb": "APIKEY"}})) + mock_requests.add( + 'GET', + 'http://api.brewerydb.com/v2/search' + '?format=json&key=APIKEY&type=beer&withBreweries=Y&q=some+text', + match_querystring=True, + json={"totalResults": 0}, + ) + from plugins import brew + + reply = MagicMock() + result = brew.brew('some text', reply) + + reply.assert_not_called() + + assert result == 'No results found.' diff --git a/tests/util/__init__.py b/tests/util/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/util/mock_bot.py b/tests/util/mock_bot.py new file mode 100644 index 000000000..b6b54e211 --- /dev/null +++ b/tests/util/mock_bot.py @@ -0,0 +1,17 @@ +import asyncio + +from cloudbot.config import Config + + +class MockConfig(Config): + def load_config(self): + self._api_keys.clear() + + +class MockBot: + def __init__(self, config, loop=None): + if loop is None: + loop = asyncio.get_event_loop() + + self.loop = loop + self.config = MockConfig(self, config)