diff --git a/contrib_bots/bots/xkcd/test_xkcd.py b/contrib_bots/bots/xkcd/test_xkcd.py new file mode 100644 index 0000000..24b774e --- /dev/null +++ b/contrib_bots/bots/xkcd/test_xkcd.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python + +from __future__ import absolute_import +from __future__ import print_function + +import mock +import os +import sys + +our_dir = os.path.dirname(os.path.abspath(__file__)) +# For dev setups, we can find the API in the repo itself. +if os.path.exists(os.path.join(our_dir, '..')): + sys.path.insert(0, '..') +from bots_test_lib import BotTestCase + +class TestXkcdBot(BotTestCase): + bot_name = "xkcd" + + @mock.patch('logging.exception') + def test_bot(self, mock_logging_exception): + help_txt = "xkcd bot supports these commands:" + err_txt = "xkcd bot only supports these commands:" + commands = ''' +* `@xkcd help` to show this help message. +* `@xkcd latest` to fetch the latest comic strip from xkcd. +* `@xkcd random` to fetch a random comic strip from xkcd. +* `@xkcd ` to fetch a comic strip based on `` e.g `@xkcd 1234`.''' + invalid_id_txt = "Sorry, there is likely no xkcd comic strip with id: #" + expected = { + "": err_txt+commands, + "help": help_txt+commands, + "x": err_txt+commands, + "0": invalid_id_txt + "0", + "1": ("#1: **Barrel - Part 1**\n[Don't we all.]" + "(https://imgs.xkcd.com/comics/barrel_cropped_(1).jpg)"), + "1800": ("#1800: **Chess Notation**\n" + "[I've decided to score all my conversations " + "using chess win-loss notation. (??)]" + "(https://imgs.xkcd.com/comics/chess_notation.png)"), + "999999999": invalid_id_txt + "999999999", + } + for m, r in expected.items(): + self.assert_bot_output( + {'content': m, 'type': "private", 'sender_email': "foo"}, r) + self.assert_bot_output( + {'content': m, 'type': "stream", 'sender_email': "foo"}, r)