Improved test architecture #139
This commit is contained in:
@@ -9,6 +9,7 @@ from cpl_core.dependency_injection import ServiceProviderABC, ServiceCollectionA
|
||||
from cpl_core.environment import ApplicationEnvironment
|
||||
from cpl_discord import get_discord_collection
|
||||
from cpl_discord.discord_event_types_enum import DiscordEventTypesEnum
|
||||
from dotenv import load_dotenv
|
||||
|
||||
from ui_tests.test_on_ready_event import TestOnReadyEvent
|
||||
|
||||
@@ -21,6 +22,7 @@ class Startup(StartupABC):
|
||||
self._config: Optional[ConfigurationABC] = None
|
||||
|
||||
def configure_configuration(self, configuration: ConfigurationABC, environment: ApplicationEnvironment) -> ConfigurationABC:
|
||||
load_dotenv()
|
||||
configuration.add_environment_variables('KDB_TEST_')
|
||||
configuration.add_environment_variables('DISCORD_')
|
||||
|
||||
|
@@ -1,9 +1,12 @@
|
||||
from cpl_core.configuration import ConfigurationABC
|
||||
from cpl_core.dependency_injection import ServiceProviderABC
|
||||
from cpl_discord.application import DiscordBotApplicationABC
|
||||
from cpl_discord.configuration import DiscordBotSettings
|
||||
from cpl_discord.service import DiscordBotServiceABC
|
||||
from cpl_translation import TranslationSettings, TranslationServiceABC
|
||||
|
||||
from bot_core.configuration.bot_settings import BotSettings
|
||||
|
||||
|
||||
class TestApplication(DiscordBotApplicationABC):
|
||||
|
||||
@@ -16,6 +19,28 @@ class TestApplication(DiscordBotApplicationABC):
|
||||
self._bot: DiscordBotServiceABC = services.get_service(DiscordBotServiceABC)
|
||||
self._translation: TranslationServiceABC = services.get_service(TranslationServiceABC)
|
||||
|
||||
discord_bot_settings: DiscordBotSettings = config.get_configuration(DiscordBotSettings)
|
||||
self._discord_settings = self._get_settings(discord_bot_settings)
|
||||
|
||||
def _get_settings(self, settings_from_config: DiscordBotSettings) -> DiscordBotSettings:
|
||||
new_settings = DiscordBotSettings()
|
||||
token = None if settings_from_config is None else settings_from_config.token
|
||||
prefix = None if settings_from_config is None else settings_from_config.prefix
|
||||
env_token = self._config.get_configuration('TOKEN')
|
||||
env_prefix = self._config.get_configuration('PREFIX')
|
||||
|
||||
new_settings.from_dict({
|
||||
'Token': env_token if token is None or token == '' else token,
|
||||
'Prefix': ('! ' if self._is_string_invalid(env_prefix) else env_prefix) if self._is_string_invalid(prefix) else prefix
|
||||
})
|
||||
if new_settings.token is None or new_settings.token == '':
|
||||
raise Exception('You have to configure discord token by appsettings or environment variables')
|
||||
return new_settings
|
||||
|
||||
@staticmethod
|
||||
def _is_string_invalid(x):
|
||||
return x is None or x == ''
|
||||
|
||||
@property
|
||||
def config(self) -> ConfigurationABC:
|
||||
return self._config
|
||||
@@ -28,6 +53,11 @@ class TestApplication(DiscordBotApplicationABC):
|
||||
self._translation.load_by_settings(self._configuration.get_configuration(TranslationSettings))
|
||||
|
||||
async def main(self):
|
||||
if self._config.get_configuration('IS_UNITTEST'):
|
||||
await self._bot.login(self._discord_settings.token)
|
||||
self._bot.loop.create_task(self._bot.connect())
|
||||
return
|
||||
|
||||
await self._bot.start_async()
|
||||
|
||||
async def stop_async(self):
|
||||
|
@@ -1,6 +1,7 @@
|
||||
import os
|
||||
import unittest
|
||||
|
||||
from cpl_core.configuration import ConfigurationABC
|
||||
from cpl_core.console import Console, ForegroundColorEnum
|
||||
from cpl_core.dependency_injection import ServiceProviderABC
|
||||
from cpl_core.logging import LoggerABC
|
||||
@@ -15,7 +16,7 @@ class TestOnReadyEvent(OnReadyABC):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
logger: LoggerABC,
|
||||
config: ConfigurationABC,
|
||||
bot: DiscordBotServiceABC,
|
||||
services: ServiceProviderABC,
|
||||
client_utils: ClientUtilsServiceABC,
|
||||
@@ -23,13 +24,16 @@ class TestOnReadyEvent(OnReadyABC):
|
||||
):
|
||||
OnReadyABC.__init__(self)
|
||||
|
||||
self._logger = logger
|
||||
self._config = config
|
||||
self._bot = bot
|
||||
self._services = services
|
||||
self._client_utils = client_utils
|
||||
self._t = t
|
||||
|
||||
async def on_ready(self):
|
||||
if self._config.get_configuration('IS_UNITTEST'):
|
||||
return
|
||||
|
||||
Console.write_line('\nStarting tests:\n')
|
||||
loader = unittest.TestLoader()
|
||||
path = f'{os.path.dirname(os.path.realpath(__file__))}/../'
|
||||
|
Reference in New Issue
Block a user