Commit graph

597 commits

Author SHA1 Message Date
Puneeth Chaganti 3c53c36c21 tools: Call pip from a sub-process instead of importing it
The pip documentation recommends calling pip using a subprocess, instead of
importing it and using it's internal API. The API of pip==10.0.0 is different
from that of older versions, and provisioning is broken with this version.

[pip docs]:
https://pip.pypa.io/en/stable/user_guide/#using-pip-from-your-program

Closes #370
2018-04-16 12:16:23 -07:00
neiljp (Neil Pilgrim) 55aff6f64b mypy: Improve typing of bots & API; enforce no_implicit_optional. 2018-04-06 13:45:11 -04:00
Ricky dad7eddcc6 beeminder bot: Add beeminder bot. 2018-04-04 14:23:32 -04:00
Eeshan Garg 60e02ed979 pypi: Release version 0.4.3.
Making this release due to recent changes made to the Trello script.
2018-04-03 22:05:39 -02:30
Eeshan Garg 7e360c244c pypa: Release version 0.4.2. 2018-03-31 17:19:23 -02:30
Tarun Kumar 8ef9b70191 Add game of fifteen bot. 2018-03-25 12:53:15 -04:00
Tarun Kumar b8d4f0b869 Enforce 'rules' command in existing games.
Add 'rules' command in connect_four.py.
Add 'rules' command in tictactoe.py.
Add 'rules' command in game_handler_bot.py.
2018-03-25 12:53:15 -04:00
Tarun Kumar ee611d935e game_handler: Support single player games and enforce 'rules' command.
Update tests for test_connect_four.py and test_game_handler_bot.py.
2018-03-25 12:53:15 -04:00
Steve Howell 0f45f28696 run.py: Remove unused name_and_path_match(). 2018-03-23 15:31:14 -04:00
Anupam-dagar a9a988f726 Add twitpost bot. 2018-03-22 15:51:40 -04:00
Ricky b6afa030c5 bots/flock: Add flock bot. 2018-03-21 09:08:44 -04:00
Ricky bb4c9c9bdb game_handler: Use avatars instead of emails in messages.
Fixes #336
2018-03-21 08:31:46 -04:00
Ricky 15cc35cb82 connectfour/controller: Prevent list access by negative indexing.
Currently, if a user does 'move 0', he moves to column 6(last column)
in connect_four which is unwanted behaviour and happening due to
list getting accessed through negative index (-1).

Added a check for that in controller.py file.

Fixes #343
2018-03-21 08:30:32 -04:00
Dhruv Thakker 9c5eaa2f1b stack_overflow : Create StackOverflow bot.
(Use stackoverflow APIs to answer queries.)
2018-03-11 14:25:03 -04:00
Ricky fb228f13ff bots/giphy: Support bot response to empty message. 2018-03-10 06:35:31 -05:00
Dhruv Thakker 38d00e9a1e connect_four : Add shorthand moves. 2018-03-10 06:33:43 -05:00
Dhruv Thakker 9fe64b85d0 tic_tac_toe : Add shorthand moves. 2018-03-10 06:33:43 -05:00
Dhruv Thakker 68fcb3c8e1 github_detail_bot: Add tests for bad requests.
(This module now has 100% coverage.)
2018-03-08 08:27:32 -05:00
Dhruv Thakker 8e978a0845 link_shortner bot : Add test for bad requests.
(This module now has 100% coverage.)
2018-03-08 08:27:32 -05:00
Dhruv Thakker 582b16861e baremetrics bot : Add tests for bad requests.
(This module now has 100% coverage.)
2018-03-08 08:27:32 -05:00
Dhruv Thakker 9ed47266aa test_lib : Add helper for connection test 2018-03-08 08:27:32 -05:00
Alena Volkova ea8393511a interactive bots: Create Front bot. 2018-03-08 07:38:35 -05:00
Alena Volkova 6c0151ab67 bot testing: Allow mocking PATCH HTTP requests. 2018-03-08 07:38:35 -05:00
amanagr 243f7bbe5d Port merels to game_handler.
Fixes #305
2018-02-27 08:28:40 -05:00
amanagr b0b372c95d Support game_handler to allow consecutive turns for the same player.
Add a SamePlayerMove exception that allows giving consecutive turns to the
same player.
2018-02-27 08:28:40 -05:00
amanagr 5fda59dde0 Susi AI Bot: Create a susi ai bot.
This bot uses SUSI_SERVER API to get response.
2018-02-22 09:36:25 -05:00
Steve Howell 9175c451f6 tests: Test handling of bad moves in connect four.
This commit tests that we throw a BadMoveException if you
try to move into a "full" column in connect four.  This gets
the controller up to 100% coverage.
2018-02-21 08:06:28 -05:00
amanagr 6df10749fb Make game_handler support starting a game with a range of playeres.
Allow a game to start even if `max_players` is not reached.
Adding a new command `play game` to start a game if the
number of players is between max and min no. of players.
Make tests pass with the new change.
2018-02-20 16:08:34 -05:00
Viraat Chandra b7b083f094 interactive bots: Add Trello Interactive Bot. 2018-02-16 09:54:55 -05:00
AmAnAgr 5b0a444ab8 Dropbox Bot: Support sharing, searching and primary file operations. 2018-02-16 09:42:03 -05:00
AmAnAgr 47c6bbe787 virtual_fs : Get test coverage to 100%. 2018-02-15 10:06:43 +01:00
AmAnAgr 03d4bafa26 Improve test_coverage for github-detail bot. 2018-02-15 10:06:43 +01:00
Robert Hönig 192e9e101d bots: Add magic method validate_config().
This method allows bots to validate their config info
in a standardized way. Adding the method to a bot is
optional, but recommended for bots with config options
that can be invalid, like api keys. The giphy bot serves
as an example.
The primary reason behind this is to allow the zulip
backend to validate config data for embedded bots. The
backend does not have a permanent bot class instance, so
validate_config() must be a static method.
2018-02-13 11:02:17 -08:00
Robert Hönig 7dcec207eb lib_tests.py: Set realistic spec for BotHandler mock. 2018-02-13 11:02:17 -08:00
Eeshan Garg f74c94ba04 pypi_packaging: Release version 0.4.1. 2018-02-07 01:03:49 -03:30
Robert Hönig bda4b74c50 mention bot: Add fixture for invalid api key test.
This makes the mention bot tests no longer rely on an
internet connection to succeed.
2018-02-06 15:27:45 +01:00
Robert Hönig 4ed31eb6fd baremetrics bot: Add fixture for invalid api key test.
This makes the baremetrics bot tests no longer rely on an
internet connection to succeed.
2018-02-06 15:27:45 +01:00
AmAnAgr acf45ea4ef converter: Get test coverage to 100%
Fixes #122
2018-02-01 16:13:54 -05:00
Viraat Chandra d9fca54998 bots: Fix test failure for Baremetrics bot. 2018-01-24 11:19:44 +01:00
fredfishgames 3cbb16722d zulip_bots: Migrate tictactoe bot to new game_handler. 2018-01-22 11:30:31 -05:00
fredfishgames 3a438cafa9 zulip_bots: Migrate connect_four bot to new game_handler. 2018-01-22 11:30:31 -05:00
fredfishgames ec5be8fc7e zulip_bots: Consolidate game-playing bots. 2018-01-22 11:30:31 -05:00
Viraat Chandra 2f429fcb86 zulip_bots: Add test for create-plan command of Baremetrics bot. 2018-01-16 12:24:26 -05:00
Viraat Chandra 94f82dfe4c zulip_bots: Add feature create-plan to Baremetrics bot. 2018-01-16 12:24:26 -05:00
Viraat Chandra e32336eb6e Improve test coverage for Yoda bot. 2018-01-12 07:35:38 -05:00
Viraat Chandra fd97ffce77 Improve test coverage for Mention bot. 2018-01-12 07:35:38 -05:00
Viraat Chandra bffb8d0e16 Improve test coverage for Baremetrics bot. 2018-01-12 07:35:38 -05:00
rht da4b830571 bots: Init interrealm bridge bot. 2018-01-12 07:15:23 -05:00
Steve Howell 480c953b98 virtual_fs: Add test_sample_conversation(). 2018-01-10 16:54:05 -05:00
Steve Howell 5be72288db virtual_fs: Make sample_conversation() a list of tuples.
It's nice to see the requests and replies as separate strings
when you're reading the code.
2018-01-10 16:54:05 -05:00
Steve Howell f8d51fc9d1 virtual_fs: Remove help commands from the sample conversation. 2018-01-10 16:54:05 -05:00
Steve Howell 820e949faf virtual_fs: Remove fs_sample_conversation().
We already have "help" for specific commands, so the
fs_sample_conversation() feature was mostly redundant.
2018-01-10 16:54:05 -05:00
Steve Howell 4b9e3d655f virtuals_fs: Add test for sample_conversation. 2018-01-10 16:54:05 -05:00
Steve Howell 917bd82019 bot tests: Extract get_reply_dict() test helper. 2018-01-10 16:54:05 -05:00
Steve Howell 88f6ddefb2 virtual_fs: Fix bug with "rmdir" command.
In python3, if you removed a directory that files within it,
you would get an error saying "dictionary changed size
during iteration."

The fix is to list-ify the keys before iterating over them (and
popping keys from the dictionary).
2018-01-09 09:21:30 -05:00
Eeshan Garg e20b754498 zulip_bots: Use package_data instead of MANIFEST.in.
This commit removes generate_manifest.py and package data files
are now included using the package_data kwarg to setup().

This is because, in certain situations, MANIFEST.in is a bit
finicky. For instance installing a package using:

python setup.py install

doesn't include files specified in MANIFEST.in, while using

pip install ./zulip_bots

does. package_data doesn't pose this problem, ergo it's better
for us.
2018-01-08 18:28:50 -03:30
Xavier Cooney 1de704394a interactive bots: Create idonethis bot. 2018-01-08 10:46:52 +01:00
Eeshan Garg 3030c73060 packages: Release 0.4.0. 2018-01-06 18:28:35 -03:30
Robert Hönig c36b8d1199 packaging: Include bot .conf files in zulip_bots. 2018-01-06 16:58:50 -03:30
Robert Hönig a4facb4249 Rename followup.config to followup.conf. 2018-01-06 16:58:50 -03:30
Robert Hönig 78d7f9694e zulip_bots: Move six imports. 2018-01-06 16:39:52 +01:00
Robert Hönig 0893a5f61e zulip_bots setup.py: Install deps from the bots' requirements.txt files.
This makes it straightforward to add dependencies for a bot,
and works around https://github.com/pypa/pip/issues/4957.
2018-01-06 16:39:52 +01:00
Robert Hönig 56a9cbe5af Make bot provisioning script install dependencies globally.
Previously, a bot's dependencies were installed within the
bot's directoy, which is unconventional and doesn't work with tests.
2018-01-06 16:39:52 +01:00
Robert Hönig e48a958780 request_test_lib.py: Move from mock to unittest.mock.
This commit changes 'Mock.assert_called()' to 'assert Mock.called'.
This is needed because in unittest.mock, assert_called() is only
supported in Python >=3.6.
2018-01-06 16:39:52 +01:00
Robert Hönig b46a079804 zulip_bots: Move from mock to unittest.mock in most files. 2018-01-06 16:39:52 +01:00
Robert Hönig ae76aa8f72 bots: Add requirements not captured by pipreqs. 2018-01-06 16:39:52 +01:00
Robert Hönig fd51735bfc Add requirements.txt for each bot. 2018-01-06 16:39:52 +01:00
Robert Hönig f4ee3d4009 Fix mypy errors. 2018-01-04 17:19:02 +01:00
Robert Hönig eb02e08fb7 yoda bot: Just import the requests module.
This removes the unconventional check for the
existence of the requests module in the yoda
bot to bring it in line with other bots.
2018-01-04 10:34:16 -05:00
Robert Hönig f6f09202ac baremetrics bot: Quit on invalid API key. 2018-01-04 10:34:16 -05:00
Robert Hönig c86e62a06a link_shortener bot: Quit on invalid API key. 2018-01-04 10:34:16 -05:00
Robert Hönig bed2c6c9ea mention bot: Quit on invalid API key. 2018-01-04 10:34:16 -05:00
Robert Hönig 57342072dc salesforce bot: Quit on invalid API key. 2018-01-04 10:34:16 -05:00
Robert Hönig 8417dbf154 weather bot: Quit bot on invalid API key. 2018-01-04 10:34:16 -05:00
Robert Hönig 28120784ff google_translate bot: Add test for invalid api key. 2018-01-04 10:34:16 -05:00
Robert Hönig d11d31d795 google_translate bot: Simplify API key check. 2018-01-04 10:34:16 -05:00
Robert Hönig b19c0f6e29 giphy bot: Update 403 fixture. 2018-01-04 10:34:16 -05:00
Robert Hönig 5d4a352e2c giphy bot: Fix check for invalid API key.
The previous check didn't notice invalid API keys.
This commit also makes giphy quit on any connectivity
issues during initialization.
2018-01-04 10:34:16 -05:00
Robert Hönig ba530e2341 giphy bot: Use bot_handler.quit(). 2018-01-04 10:34:16 -05:00
YJDave 299d04080e doc: Remove markdown includes {!running-bot.md!} from bot docs. 2018-01-03 09:05:54 -05:00
Privisus 08bd395658 interactive bots: Create monkeytest.it bot. 2018-01-02 17:14:13 -03:30
neiljp (Neil Pilgrim) 1fd4dfc86e bot testing: Amend StubBotHandler.get_config_info to return {}.
This ensures the return type matches the annotated type, which
matches the return type of ExternalBotHandler.
2018-01-02 14:05:33 -05:00
neiljp (Neil Pilgrim) 9853d85fb7 bot testing: Improve checking of fixtures in mock_http_conversation.
This ensures required fields are present in the fixture dict/json,
improving testing & allowing file to pass mypy with strict-optional.
2018-01-02 14:05:33 -05:00
neiljp (Neil Pilgrim) 88ae9d04ee mypy: Amend import_module_from_source, to pass with strict-optional.
Including additional error-reporting.
2018-01-02 14:05:33 -05:00
neiljp (Neil Pilgrim) 486f1d2f48 mypy: Improve typing of zulip_bots/lib.py, to pass with strict-optional. 2018-01-02 14:05:33 -05:00
neiljp (Neil Pilgrim) 6489f78edd mypy: Improve test_dialogflow.py, to pass with strict-optional. 2018-01-02 14:05:33 -05:00
neiljp (Neil Pilgrim) 1928841256 mypy: Amend chess bot, to pass with strict-optional. 2018-01-02 14:05:33 -05:00
neiljp (Neil Pilgrim) 6cd09e7396 mypy: Amend youtube bot, to pass with strict-optional.
Including switch to Optional from Union[None, T] for consistency.
2018-01-02 14:05:33 -05:00
neiljp (Neil Pilgrim) b4bbd83335 mypy: Amend witai bot, to pass with strict-optional.
Including additional error-handling, associated with None-checks.
2018-01-02 14:05:33 -05:00
fredfishgames 08bfe9d8c7 interactive bots: Create Salesforce bot. 2018-01-02 14:00:41 -05:00
Viraat Chandra d4500a3b7a zulip_bots: Add test for get_mentions method of Mention bot. 2018-01-02 10:56:59 -05:00
Viraat Chandra 48e365195e zulip_bots: Add test for get_alert_id method of Mention bot. 2018-01-02 10:56:59 -05:00
Viraat Chandra 3d05ed53e5 Parse data field in mock http response fixture. 2018-01-02 10:56:59 -05:00
Viraat Chandra 4d3e255e6d zulip_bots: Add test for get_account_id method of Mention bot. 2018-01-02 10:56:59 -05:00
Viraat Chandra 67b3529140 zulip_bots: Cleaned up test code for Mention bot. 2018-01-02 10:56:59 -05:00
Viraat Chandra 606b7f8adf zulip_bots: Add better test for list-subscriptions command of Baremetrics bot. 2017-12-31 10:16:48 -05:00
Viraat Chandra e2a9a229a3 zulip_bots: Add better test for list-customers command of Baremetrics bot. 2017-12-31 10:16:48 -05:00
Viraat Chandra 777f6c55f8 zulip_bots: Add better test for list-plans command of Baremetrics bot. 2017-12-31 10:16:48 -05:00
Robert Hönig 9bf64c0c21 youtube bot: Replace sys.exit() with bot_handler.quit(). 2017-12-31 07:12:19 -05:00
Robert Hönig ff65666ac8 Add quit() function to ExternalBotHandler.
bot_handler.quit() should be used whenever a bot
wishes to terminate. This allows a flexible reaction
suited to the bot's environment: For external bots,
sys.exit() will be called, whereas for embedded bots,
different code can be executed.
2017-12-31 07:12:19 -05:00
Viraat Chandra 9e73ddd292 zulip_bots: Check API key on initialization for Weather bot. 2017-12-30 17:59:23 +01:00
Viraat Chandra 524804fd2c zulip_bots: Remove comments from config file in Mention Bot. 2017-12-30 17:51:10 +01:00
Viraat Chandra 5ccbe6e6bd zulip_bots: Reformat code for Mention Bot file mention.py. 2017-12-30 17:51:10 +01:00
Viraat Chandra adbda6d2f2 zulip_bots: Check Access Token on initialization for Mention bot. 2017-12-30 17:51:10 +01:00
Viraat Chandra 9ac0628452 zulip_bots: Add link to get API Key in Link Shortener Bot Documentation. 2017-12-30 17:41:31 +01:00
Viraat Chandra 6a089f2217 zulip_bots: Fixed failing tests for Link Shortener Bot.
This uses a custom test_bot_responds_to_empty_message()
implementation for the link_shortener bot, because it requires
mocking config info.
2017-12-30 17:41:31 +01:00
Viraat Chandra db0e88a1b9 zulip_bots: Check API key on initialization for link_shortener bot. 2017-12-30 17:41:31 +01:00
Shivam Gera 79b32f6c05 Update google_translate.py 2017-12-30 16:04:29 +01:00
Viraat Chandra 8e800d545b zulip_bots: Check API key on initialization for Baremetrics bot. 2017-12-29 23:33:10 +01:00
Marco Burstein f719964487 bots: Create Jira Bot.
Users can get an issue from Jira Bot using it's key, and get a response
like the following:

    Issue BOTS-13: Create Jira Bot
     - Type: Task
     - Creator: skunkmb
     - Project: Bots
     - Priority: Medium
     - Status: To Do

Users can create or edit an issue with Jira Bot with its
 - summary,
 - project,
 - type,
 - description,
 - assignee,
 - priority,
 - labels, and
 - due date
2017-12-29 11:21:18 -05:00
Viraat Chandra d8c6cb7c0a interactive bots: Create Baremetrics bot. 2017-12-29 11:50:33 +01:00
Privisus b80a0cb297 interactive bots: Create Merels bot. 2017-12-29 10:48:52 +01:00
Viraat Chandra a2557ccbe6 interactive bots: Create Mention bot. 2017-12-28 16:33:00 -05:00
Shivam Gera 6121002b35 Update giphy.py 2017-12-28 16:22:20 -05:00
Robert Hönig c3348750d9 zulip_bots: Supply bots with 'full_content' of message.
This adds the 'full_message' field to the message dict
passed to bots.

Fixes #138.
2017-12-26 08:17:26 -05:00
Robert Hönig 79627002d6 zulip_bots: Add test for run_message_handler_for_bot(). 2017-12-26 08:17:26 -05:00
Robert Hönig 464b2612cc zulip_bots: Make FakeClient accept arbitrary arguments. 2017-12-26 08:17:26 -05:00
sColin16 b9905e5fc8 Game Adapter Class: Allow superusers to moderate bots. 2017-12-25 09:43:53 -05:00
sColin16 2c8b369d14 interactive bots: Extracted GameAdapter Class. 2017-12-25 09:43:53 -05:00
sColin16 35829218b7 interactive bots: Create connect four bot. 2017-12-23 16:02:50 -03:30
neiljp (Neil Pilgrim) 7d493d64c5 mypy: Remove type ignore in generate_manifest.py and simplify.
mypy 0.560 incorporates PR python/typeshed#1748, allowing extended
type-checking of cmd and log components of distutils such as this.
2017-12-21 18:43:42 -05:00
fredfishgames 7acf2c396b Update dialogflow bot to show user friendly messages 2017-12-19 16:34:13 -05:00
Nikhil Kumar Mishra d3916b945d github_detail: Limit bot to 5 requests per message.
Fixes #172 .
2017-12-19 14:41:39 -05:00
Jerry Zhang ce8979df7a interactive bots: Improve documentation for tictactoe bot. 2017-12-18 10:38:13 -05:00
Marco Burstein 878691a745 bots: Create Wit.ai Bot.
Wit.ai Bot communicates with the Wit.ai API. It can be configured with
any Wit.ai token and allows for setting up a custom handler function to
handle Wit.ai responses.
2017-12-18 10:32:05 -05:00
Robert Hönig b306324bfa zulip_bots: Make BotTestCase the only helper library.
Renames StubBotTestCase to BotTestCase and removes
legacy code for supporting both names.
2017-12-14 05:56:55 -05:00
Robert Hönig a475077da9 zulip_bots: Use utf-8 when reading fixtures.
This prevents issues with Python using platform
specific encodings, such as CP1252 on Windows.
2017-12-14 05:56:55 -05:00
neiljp (Neil Pilgrim) ced3a97b3f TicTacToe: Extract sanitized_move from TicTacToeGame as coords_from_command. 2017-12-12 17:11:29 -06:00
neiljp (Neil Pilgrim) c6e9beb2a1 TicTacToe: Rename & simplify some functions.
Rename:
* win_conditions -> contains_winning_move
* check_validity -> is_valid_move
* sanitize_move -> sanitized_move
2017-12-12 17:11:29 -06:00
neiljp (Neil Pilgrim) a72764d7b8 TicTacToe: Improve encapsulation of board data in TicTacToeGame. 2017-12-12 17:11:29 -06:00
neiljp (Neil Pilgrim) aadf639e5e TicTacToe: Remove python2 compatibility imports 2017-12-12 17:11:29 -06:00
neiljp (Neil Pilgrim) cff3e30734 TicTacToe: Coalesce & refactor response messages. 2017-12-12 17:11:29 -06:00
neiljp (Neil Pilgrim) a7f7994302 TicTacToe: Use game objects instead of calling TicTacToeGame with self. 2017-12-12 17:11:29 -06:00
neiljp (Neil Pilgrim) b1dba0bd30 TicTacToe: Move tictactoe() text from game-logic to handle_message.
Also remove early debugging logic.
2017-12-12 17:11:29 -06:00
neiljp (Neil Pilgrim) 6d4b205595 TicTacToe: Use simple comparison instead of overly-complex first_time(). 2017-12-12 17:11:29 -06:00
neiljp (Neil Pilgrim) d10601b554 TicTacToe: Refactor new-game handling into existing section.
Also extend storage-update section; all related storage.put calls
are now together.
2017-12-12 17:11:29 -06:00
neiljp (Neil Pilgrim) 33e8517b87 TicTacToe: Decouple TicTacToeGame.tictactoe() string from move result.
This allows the storage update to be refactored into one block before
sending the result text.
2017-12-12 17:11:29 -06:00
neiljp (Neil Pilgrim) 5843801d13 TicTacToe: Simplify superfluous initial command logic. 2017-12-12 17:11:29 -06:00
neiljp (Neil Pilgrim) 969b984b80 TicTacToe tests: Extend tests to end of game lose condition & quit. 2017-12-12 17:11:29 -06:00
neiljp (Neil Pilgrim) 62d781a53e TicTacToe tests: Extend tests to end of game draw condition & quit. 2017-12-12 17:11:29 -06:00
neiljp (Neil Pilgrim) d686a3b337 bots (minor): Simplify test_link_shortener.py further.
* Rename test names to be more descriptive.
* Inline messages/response test.
2017-12-12 13:57:55 -06:00
Marco Burstein e9aa94f81c mypy: Add annotations for Link Shortener Bot.
Based on work started by @skunkmb.
2017-12-12 13:57:55 -06:00
Steve Howell f69d71c3b1 bots: Remove unneeded __future__ imports. 2017-12-12 07:32:14 -06:00
Steve Howell fd069dff82 lint: Require python3 shebangs.
This commit was originally from @fredfishgames, but it
needed a big rebase due to use letting it sit too long.
Also, we decided not to have shebangs at the top of test
files.
2017-12-12 07:14:16 -06:00
neiljp (Neil Pilgrim) 28687f18ca mypy: Add --disallow-any=generics & extend typing accordingly.
Also reset typing of ExternalBotHandler to Any after discussion.
2017-12-11 20:14:00 -06:00
fredfishgames 424a4bb631 add _ to googletranslate and googlesearch 2017-12-11 13:15:43 -06:00
fredfishgames 657c6d7b9c interactive bots: Create DialogFlow bot. 2017-12-11 13:15:43 -06:00
Sivagiri Visakan 277b384379 bots: Add 100% test coverage to define bot. 2017-12-11 12:49:43 -06:00
Sivagiri Visakan d663dd2f49 bots: Make wikipedia bot return an error message.
Previously the Wikipedia bot was replying with `null` in case of an error.
A change has been made to return an error message if an error occurs.
2017-12-11 12:49:43 -06:00
Steve Howell fe3b995590 Fix KeyboardInterrupt handler in terminal.py.
The exception name was wrong before.
2017-12-11 11:07:28 -06:00
Marco Burstein 3c66894aff incrementor: Clean up type annotation/conversion.
This adds mypy annotations, and we also make the type
conversions in `handle_message` be a little more clear.

(@showell helped clean up this commit a bit)
2017-12-11 10:59:40 -06:00
Steve Howell b4ff5230a9 mypy: Fix StateHandler annotations.
`get` and `put` deal with arbitrary JSON-serializable types,
so `Text` was an innacurate annotation.
2017-12-11 10:35:03 -06:00
Steve Howell 7bc79a8911 Extract StubBotTestCase.make_request_message().
This de-duplicates some code and also makes it a bit
easier in the future to override how we create messages.
2017-12-11 09:39:48 -06:00
Steve Howell 5686d603ef minor: Clean up test_lib imports. 2017-12-11 09:34:11 -06:00
Steve Howell 971b48cbfc Decouple mock_request_exception from StubBotTestCase.
Tests that need mock_request_exception can just import it
directly now.
2017-12-11 09:26:36 -06:00
Steve Howell 1dbb73a1c8 Extract test_file_utils.py.
This isolates all the code that depends on our current
directory structure, and it de-clutters test_lib.py a bit.
2017-12-11 09:23:24 -06:00
Steve Howell 5034220829 bots: Extract request_test_lib.py.
The new module mocks out calls to the requests library, which
is used by many of our bots that use third party services.

Mocking of requests.py is mostly orthogonal to our other
testing concerns.
2017-12-11 09:05:06 -06:00
Steve Howell fb8ee29bc1 zulip_bots/test_lib.py: Remove unneeded imports/shebang. 2017-12-11 08:26:50 -06:00
Steve Howell b4705c2343 bot tests: Remove BotTestCase.
All of the functionality of BotTestCase was either directly
moved to StubBotTestCase or replaced by similar functions,
and all bots have been ported to StubBotTestCase.
2017-12-11 08:26:50 -06:00
sColin16 6109bd198a interactive bots: Improve wikipedia bot. 2017-12-11 08:05:09 -06:00
sColin16 1221c7107f test_lib.py: Add mock_request_exception. 2017-12-11 08:05:09 -06:00
Steve Howell 0a05a28e34 test_virtual_fs.py: Use StubBotTestCase.
We use verify_dialog() now, and we also have a different
default email.
2017-12-11 08:00:02 -06:00
Steve Howell a7f6c0f142 Add display_recipient to StubBotTestCase.verify_dialog. 2017-12-11 07:57:36 -06:00
Marco Burstein 3c794b384b mypy: Add annotations for Yoda Bot. 2017-12-11 07:33:16 -06:00
Marco Burstein 8f64405bae mypy: Add annotations for Wikipedia Bot. 2017-12-11 07:26:43 -06:00
Marco Burstein 0467f83314 mypy: Add annotations for xkcd Bot. 2017-12-11 07:26:43 -06:00
neiljp (Neil Pilgrim) e01ecc9fde test_virtual_fs.py: Remove unneeded imports and shebang. 2017-12-11 07:16:54 -06:00
neiljp (Neil Pilgrim) 060211a131 bots: Simplify test_yoda.py. 2017-12-10 18:16:40 -08:00
neiljp (Neil Pilgrim) 20cb236fdd bots: Simplify test_weather.py. 2017-12-10 18:16:27 -08:00
neiljp (Neil Pilgrim) 84d92337be bots: Simplify test_googletranslate.py.
Also add sender_full_name parameter in StubBotTestCase.verify_reply().
2017-12-10 16:26:03 -08:00
neiljp (Neil Pilgrim) c8824cb2e5 bots: Simplify test_link_shortener.py. 2017-12-10 14:04:00 -08:00
Steve Howell f8cefc5352 minor: Fix imports in test_xkcd.py.
We no longer need the `future` imports and we can
use `StubBotTestCase` now.
2017-12-10 09:25:12 -06:00
Marco Burstein 700ce6a673 bots: Create Chess Bot.
Chess Bot is a bot that allows you to play chess against either another
user or the computer. Use `start with other user` or
`start as <color> with computer` to start a game.

In order to play against a computer, `chess.conf` must be set with the
key `stockfish_location` set to the location of the Stockfish program on
this computer.

Use `bot_handler.storage` to preserve game state across messages.

(@showell also did minor work here to have the test use verify_dialog()
and have the bot respond to empty messages)
2017-12-10 09:14:32 -06:00
Steve Howell 2fa677a3e0 bot tests: Extract StubBotTestCase._get_handlers().
This is mostly a pure refactoring, but it also ensures
that `initialize` is called in a consistent way by most
of our test helpers.  (This didn't cause problems before,
since some bots don't require initialization.)
2017-12-10 06:35:51 -08:00
Steve Howell 01f8366bea Improve test_bot_responds_to_empty_message().
This fixes the TODO of inlining get_response(), and it
makes a slightly tighter assertion about the response.
2017-12-10 06:20:19 -08:00
Nikhil Mishra 81b207795f followup bot: Fix help response and configure streams.
From @showell:

We had a PR here with lots going on, and the commits weren't
very well organized, and then there were some tricky merge
conflicts from another PR.  So I just squashed them all into
one commit.

What this does:
    * allow you to configure your followup stream
    * provide help in followup stream
    * add more testing to followup stream
    * add get_response() helper for tests

Fixes #173
Fixes #174
2017-12-10 05:23:35 -08:00
Kai Chen 1cdb0bffe6 mypy: Add annotations for encrypt. 2017-12-10 04:59:27 -08:00
Kai Chen b382eacd18 mypy: Add annotations for define. 2017-12-10 04:59:27 -08:00
Kai Chen d33e9b9d92 mypy: Add annotations for converter. 2017-12-10 04:59:27 -08:00
neiljp (Neil Pilgrim) 31853cfa80 Add test_bot_responds_to_empty_message to StubBotTestCase. 2017-12-09 15:06:41 -08:00
Sivagiri Visakan 6f9d010ed3 bots: Refactor Youtube bot. 2017-12-09 03:56:33 -08:00
Ivche1337 f947ff44f8 wikipedia bot: Return up to three links from wikipedia for keyword.
This change includes updates to the docs and tests as well.
2017-12-08 16:40:16 -08:00
Ivche1337 2597de87ef wikipedia bot: Fix page-not-found error. 2017-12-08 16:40:16 -08:00
fredfishgames ab9128d939 mypy: Add annotations for weather. 2017-12-08 14:55:35 -08:00
fredfishgames f7f54d159f mypy: Add annotations for virtual_fs. 2017-12-08 14:55:35 -08:00
fredfishgames a7f9c6e743 Fixed giphy warning message in bot tests 2017-12-08 14:52:44 -08:00
fredfishgames a026c48278 Added more googlesearch tests 2017-12-08 14:52:44 -08:00
fredfishgames 841efcde80 Added too many argument test for googletranslate bot. 2017-12-08 14:52:44 -08:00
neiljp (Neil Pilgrim) d4284f88f9 XKCD: Adjust tests to use loops, inline responses, remove comments. 2017-12-08 11:21:02 -08:00
neiljp (Neil Pilgrim) d97401df86 XKCD: Migrate tests to use verify_reply. 2017-12-08 11:21:02 -08:00
neiljp (Neil Pilgrim) 6c7a03e37a XKCD: Split single test into multiple tests. 2017-12-08 11:21:02 -08:00
fredfishgames 9492495f4b Removed self: Any from googlesearch 2017-12-08 10:48:42 -08:00
Steve Howell cb849611c8 bot tests: Add sender_full_name to verify_dialog. 2017-12-08 08:51:57 -08:00
fredfishgames 4c4a60d90f Remove self: Any mypy annotations 2017-12-08 08:46:21 -08:00
Steve Howell 5f70e17259 bots: Simplify test_github_details.py. 2017-12-07 20:15:33 -08:00
Steve Howell f421e90a64 bots: Simplify test_encrpyt.py. 2017-12-07 20:15:33 -08:00
Steve Howell 7285affbc4 bots: Simplify test_define.py. 2017-12-07 20:15:33 -08:00
Steve Howell 2c42b0e42e minor: Clean up test_converter.py.
This removes some imports and uses StubBotTestCase
and verify_dialog.
2017-12-07 20:15:33 -08:00
Steve Howell 6f0d5239e8 test_googlesearch: Remove self: Any annotations.
We can avoid `Any` annotations for `self`, since it is more
noise than signal and since the type of self is already
implicit from how Python classes work.
2017-12-07 19:40:32 -08:00
Steve Howell 011095018b Simplify TestGoogleSearchBot.
We use verify_reply() for all the tests and de-duplicate
help_message by just having a single test validate both
the '' and 'help' inputs.
2017-12-07 19:40:32 -08:00
Steve Howell c01fbe02e1 Remove unneeded imports in test_googlesearch.py. 2017-12-07 19:40:32 -08:00
fredfishgames 9d5fbc2b5b mypy: Add annotations for help. 2017-12-07 19:12:39 -08:00
fredfishgames 40c09b4b16 mypy: Add annotations for googlesearch. 2017-12-07 19:12:39 -08:00
fredfishgames b7dbe7af41 mypy: Add annotations for github_detail. 2017-12-07 19:12:39 -08:00
fredfishgames 1b16b54780 interactive bots: Create googletranslate bot. 2017-12-07 06:18:01 -08:00
Steve Howell 7a963916f2 bot tests: Use StubBotTestCase in test_giphy.py.
For three of the tests we use the simpler verify_reply()
API.  For the 403 test, we don't need to rely on setUp
any more to simulate everything for us, and we do more
surgical patching.
2017-12-06 20:29:36 -08:00
Steve Howell 87662da139 bot tests: Add StubBotTestCase.mock_config_info().
We now auto-initialize bots in verify_reply() and have
a mock_config_info() helper that can override the new
StubBotHandler.get_config_info().
2017-12-06 20:29:36 -08:00
Steve Howell be9570c9c4 minor: Remove unused imports in test_giphy.py. 2017-12-06 20:29:36 -08:00
Jerry Zhang 77e9be0783 bots/giphy: Use Python 3 type mypy annotations. 2017-12-07 00:22:57 -03:30
Jerry Zhang 95b8ea4751 bots/followup: Use Python 3 type mypy annotations. 2017-12-07 00:22:57 -03:30
Robert Hönig 1102057e35 zulip_bots: Make typing import work in Python 3.5.
See https://github.com/python/mypy/issues/1838.
2017-12-06 12:49:46 +01:00
Skunk 29e22c2c0a bots: Create Link Shortener Bot.
Create Link Shortener Bot using the goo.gl Link Shortening API.

Link Shortener Bot can be mentioned in a conversation, and it will
respond with shortened, goo.gl links for every URL in the message.

For example,

 > @link_shortener_bot @johnsmith Check out this file:
 > https://github.com/zulip/python-zulip-api/blob/master/zulip_bots/

and Link Shortener Bot would respond

 > https://github.com/zulip/python-zulip-api/blob/master/zulip_bots/:
 > https://goo.gl/Mt5z3c

In order to use Link Shortener Bot, an API key for goo.gl must be set
in `link_shortener.conf` in the `link_shortener` folder.
2017-12-05 06:08:30 -08:00
Rohitt Vashishtha 8cd310493a mypy: Annotate helloworld bot. 2017-12-04 07:27:20 -08:00
fredfishgames b157b817ae interactive bots: Improve googlesearch bot. 2017-12-03 14:03:47 -08:00
Skunk c2c79cf989 tests: Refactor mock_http_conversation with deduplicating.
Move `get_response` inside of `mock_http_conversation`, as it is not
used anywhere else. Also create `assert_called_with_fields`.
`assert_called_with_fields` calls the `assert_called_with` method of a
mock object by using an HTTP request and a list of fields to look for.
2017-12-03 10:26:42 -08:00
Skunk bd0462f7b5 tests: Extend mock_http_conversation to support POST requests. 2017-12-03 10:26:42 -08:00
Steve Howell fab9d46f93 Simplify test_wikipedia.py.
We now use StubBotTestCase.verify_reply().
2017-12-01 13:42:59 -08:00
Steve Howell 16e50e991b bot tests: Add StubBotTestCase.verify_reply(). 2017-12-01 13:42:59 -08:00
Steve Howell db08586df6 Promote mock_http_conversations to its superclass. 2017-12-01 13:42:59 -08:00
Steve Howell 3f79136dd7 bot tests: Introduce transcript in StubBotHandler.
This sets us up to validate more aspects of the conversation,
and it also introduces the more rigorously checked
`unique_response` helper.

(This also fixes a minor copy/paste error from a prior commit
that was harmless.)
2017-12-01 13:42:59 -08:00
Steve Howell c02e141f7f bot tests: Use StubBotTestCase for helloworld bot. 2017-12-01 07:00:20 -08:00
Steve Howell 4ede1a5564 bot tests: Use StubBotTestCase for help bot. 2017-12-01 07:00:20 -08:00
Steve Howell 6087cf95e2 bot tests: Use StubBotTestCase in tictactoe.
Note that we now only have one conversation, since the case
of sending to streams has the same mechanics as sending PMs.

We'll eventually want a separate test to drive out differences
in the actual mechanics of the reply.
2017-12-01 07:00:20 -08:00
Steve Howell 77dbe92ad8 minor: Remove some dead code in BotTestCaseBase. 2017-12-01 07:00:20 -08:00
Steve Howell c0ceb9857f Rewrite incrementor bot tests.
Using StubBotHandler makes it fairly easy to verify the key
feature of the incrementor bot, which is that it updates
messages sequentially.
2017-12-01 07:00:20 -08:00
Steve Howell fc251460fa bot tests: Eliminate BotTestCaseBase.
We now just put `test_bot_usage` in StubBotTestCase and have
BotTestCase inherit from that.
2017-12-01 07:00:20 -08:00
Steve Howell 205f7c16c7 Add StubBotTestCase and StubBotHandler.
We will start to use these for some of our bot test code.
2017-12-01 07:00:20 -08:00
Steve Howell fe662ed145 bot tests: Split up mock_http_conversation().
This method had two pretty easy-to-separate concerns:

    * find the fixture data using our directory conventions
    * use the fixture data to simulate a real HTTP request

Part of the goal here is to make the extracted functions a
bit easier to use in other TestCase-based classes without
needing to subclass from BotTestCaseBase, which is kind of
complex with its setUp/tearDown.
2017-12-01 07:00:20 -08:00
Steve Howell 0a477b0736 Extract get_bot_message_handler(). 2017-12-01 07:00:20 -08:00
neiljp (Neil Pilgrim) 39601d190c bot lib tests: Add test_send_reply. 2017-11-29 15:56:30 -08:00
Steve Howell efeac92d42 Add tools/test-lib.
This starts to add direct test coverage on
zulip_bots/zulip_bots/lib.py.

It is not yet integrated into tools/test-main.
2017-11-29 13:45:51 -08:00
neiljp (Neil Pilgrim) 3e135b8e1e bot testing: Enable testing of multiple responses from single messages. 2017-11-29 10:05:46 -08:00
Abhijeet Kaur 91c4ff668d bots: Clean up terminal.py for running bots directly.
Make terminal.py exit gracefully with a message.
Modify output bot reply for better understanding in multi-line
output.
2017-11-29 10:05:06 -08:00
Eeshan Garg c3ab265d3e packaging: Upgrade to release 0.3.9. 2017-11-29 01:23:12 -03:30
Robert Hönig 2cb43256e0 zulip_bots: Get 100% test coverage for giphy bot. 2017-11-28 15:42:22 -08:00
Robert Hönig 93edededdd zulip_bots: Use real Response object for mock_http_conversation(). 2017-11-28 15:42:22 -08:00
Robert Hönig 41d8ffc20e zulip_bots: Fix yoda bot response parsing. 2017-11-28 15:42:22 -08:00
Robert Hönig d6a4c02ba5 Rename bot storage endpoint from state to storage. 2017-11-28 20:41:59 +01:00
Steve Howell 80e4ef9f72 Create terminal.py to run bots in the terminal.
This program replaces zulip_bot_output.py, which had
gotten a little out of date.

It should be able to simulate a terminal conversation for
all of our bots, including those that use "advanced" features:

    third party config files: tested with giphy
    message updates: tested with incrementor
    storage: tested with virtual_fs and others
2017-11-28 10:52:13 -08:00
Steve Howell 536ba1843a Add a command line option to run.py for bot config files.
Before this change, we were looking for config files in
default locations in source control, which is not a good
place to look for them.  Now `run.py` and friends have a
command line argument where users can specify the config
files.

Note that the change to server.py is only a partial fix
to make it so that bots that don't use third party config
files won't crash.  That program needs an overhaul, anyway.
2017-11-28 10:52:13 -08:00
Steve Howell 57c90ddca0 refactor: Extract display_config_file_errors().
This will be useful for handling errors with third party
config files.
2017-11-28 10:52:13 -08:00
Steve Howell 8a15452525 bots: Require bots_details in ExternalBotHandler.
This parameter was defaulting to a dictionary, which is
a classic Python pitfall.
2017-11-28 10:52:13 -08:00
Steve Howell ef30261858 giphy: Make config_info an instance variable.
There was no reason to use a `global` here.
2017-11-28 10:52:13 -08:00
Eeshan Garg 50b5ec0f49 packages: Release 0.3.8 for all PyPI packages. 2017-11-27 23:34:38 -03:30
Robert Hönig a75f1abc60 zulip_bots: Add -c shortcut for --config-file for zulip-run-bots. 2017-11-27 16:45:37 +01:00
Robert Hönig ea6ddb2312 zulip_bots: Only cache storage.get(). Don't cache put(). 2017-11-24 10:44:34 -08:00
Steve Howell a32446f557 Report client.get_profile() errors nicely (e.g. API key).
This patch is particularly useful in the scenario that your
API key is wrong or out of date, but it's targeted more
generally at any error that `client.get_profile()` reports.
2017-11-22 11:15:00 -08:00
Steve Howell 043d963a99 Fail fast for bad connections with the API and bots.
The API has aggressive retry logic for connecting to a
server, which may make sense for situation where you have
connection blips or server restarts.

When you're first connecting to the API, however, connection
failures are almost certainly a sign of misconfiguration, so
now we fail fast.

The bot lib takes advantage of this API change by catching the
ZulipError exception and exiting gracefully.
2017-11-21 14:21:04 -08:00
Steve Howell a19278da65 Handle configparser errors more gracefully. 2017-11-21 11:54:59 -08:00
Steve Howell e216a29277 minor: Extract client_name local var. 2017-11-21 11:26:12 -08:00