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.
This commit is contained in:
Steve Howell 2017-12-11 09:23:24 -06:00
parent 5034220829
commit 1dbb73a1c8
2 changed files with 40 additions and 22 deletions

View file

@ -0,0 +1,35 @@
import json
import os
from importlib import import_module
from typing import Any, Dict
'''
This module helps us find files in the bots directory. Our
directory structure is currently:
zulip_bots/zulip_bots/bots/
<bot name>/
<bot name>.py
fixtures/
'''
def get_bot_message_handler(bot_name):
# type: (str) -> Any
# message_handler is of type 'Any', since it can contain any bot's
# handler class. Eventually, we want bot's handler classes to
# inherit from a common prototype specifying the handle_message
# function.
lib_module = import_module('zulip_bots.bots.{bot}.{bot}'.format(bot=bot_name)) # type: Any
return lib_module.handler_class()
def read_bot_fixture_data(bot_name, test_name):
# type: (str, str) -> Dict[str, Any]
base_path = os.path.realpath(os.path.join(os.path.dirname(
os.path.abspath(__file__)), 'bots', bot_name, 'fixtures'))
http_data_path = os.path.join(base_path, '{}.json'.format(test_name))
with open(http_data_path) as f:
content = f.read()
http_data = json.loads(content)
return http_data

View file

@ -1,10 +1,7 @@
import json
import mock
import os
from mock import patch
from importlib import import_module
from unittest import TestCase
from typing import List, Dict, Any, Tuple
@ -19,6 +16,11 @@ from zulip_bots.simple_lib import (
SimpleMessageServer,
)
from zulip_bots.test_file_utils import (
get_bot_message_handler,
read_bot_fixture_data,
)
class StubBotHandler:
def __init__(self):
# type: () -> None
@ -169,22 +171,3 @@ class StubBotTestCase(TestCase):
def mock_config_info(self, config_info):
# type: (Dict[str, str]) -> Any
return patch('zulip_bots.test_lib.StubBotHandler.get_config_info', return_value=config_info)
def get_bot_message_handler(bot_name):
# type: (str) -> Any
# message_handler is of type 'Any', since it can contain any bot's
# handler class. Eventually, we want bot's handler classes to
# inherit from a common prototype specifying the handle_message
# function.
lib_module = import_module('zulip_bots.bots.{bot}.{bot}'.format(bot=bot_name)) # type: Any
return lib_module.handler_class()
def read_bot_fixture_data(bot_name, test_name):
# type: (str, str) -> Dict[str, Any]
base_path = os.path.realpath(os.path.join(os.path.dirname(
os.path.abspath(__file__)), 'bots', bot_name, 'fixtures'))
http_data_path = os.path.join(base_path, '{}.json'.format(test_name))
with open(http_data_path) as f:
content = f.read()
http_data = json.loads(content)
return http_data