Added ui tests for discord bot #139
This commit is contained in:
parent
4a0f5c28c1
commit
9de66d4fd4
@ -14,29 +14,27 @@
|
|||||||
"permission": "src/modules/permission/permission.json",
|
"permission": "src/modules/permission/permission.json",
|
||||||
"stats": "src/modules/stats/stats.json",
|
"stats": "src/modules/stats/stats.json",
|
||||||
"technician": "src/modules/technician/technician.json",
|
"technician": "src/modules/technician/technician.json",
|
||||||
|
"ui-tests": "test/ui_tests/ui-tests.json",
|
||||||
|
"ui-tests-shared": "src/../test/ui_tests_shared/ui-tests-shared.json",
|
||||||
|
"ui-tests-tests": "test/ui_tests_tests/ui-tests-tests.json",
|
||||||
"get-version": "tools/get_version/get-version.json",
|
"get-version": "tools/get_version/get-version.json",
|
||||||
"post-build": "tools/post_build/post-build.json",
|
"post-build": "tools/post_build/post-build.json",
|
||||||
"set-version": "tools/set_version/set-version.json"
|
"set-version": "tools/set_version/set-version.json"
|
||||||
},
|
},
|
||||||
"Scripts": {
|
"Scripts": {
|
||||||
|
"test": "cpl run ui-tests",
|
||||||
"sv": "cpl set-version $ARGS",
|
"sv": "cpl set-version $ARGS",
|
||||||
"set-version": "cpl run set-version $ARGS; echo '';",
|
"set-version": "cpl run set-version $ARGS; echo '';",
|
||||||
|
|
||||||
"gv": "cpl get-version",
|
"gv": "cpl get-version",
|
||||||
"get-version": "export VERSION=$(cpl run get-version); echo $VERSION;",
|
"get-version": "export VERSION=$(cpl run get-version); echo $VERSION;",
|
||||||
|
|
||||||
"pre-build": "cpl set-version $ARGS",
|
"pre-build": "cpl set-version $ARGS",
|
||||||
"post-build": "cpl run post-build",
|
"post-build": "cpl run post-build",
|
||||||
|
|
||||||
"pre-prod": "cpl build",
|
"pre-prod": "cpl build",
|
||||||
"prod": "export KDB_ENVIRONMENT=production; export KDB_NAME=KDB-Prod; cpl start;",
|
"prod": "export KDB_ENVIRONMENT=production; export KDB_NAME=KDB-Prod; cpl start;",
|
||||||
|
|
||||||
"pre-stage": "cpl build",
|
"pre-stage": "cpl build",
|
||||||
"stage": "export KDB_ENVIRONMENT=staging; export KDB_NAME=KDB-Stage; cpl start;",
|
"stage": "export KDB_ENVIRONMENT=staging; export KDB_NAME=KDB-Stage; cpl start;",
|
||||||
|
|
||||||
"pre-dev": "cpl build",
|
"pre-dev": "cpl build",
|
||||||
"dev": "export KDB_ENVIRONMENT=development; export KDB_NAME=KDB-Dev; cpl start;",
|
"dev": "export KDB_ENVIRONMENT=development; export KDB_NAME=KDB-Dev; cpl start;",
|
||||||
|
|
||||||
"docker-build": "cpl build $ARGS; docker build -t kdb-bot/kdb-bot:$(cpl gv) .;",
|
"docker-build": "cpl build $ARGS; docker build -t kdb-bot/kdb-bot:$(cpl gv) .;",
|
||||||
"dc-up": "docker-compose up -d",
|
"dc-up": "docker-compose up -d",
|
||||||
"dc-down": "docker-compose down",
|
"dc-down": "docker-compose down",
|
||||||
|
28
kdb-bot/src/bot/startup_test_extension.py
Normal file
28
kdb-bot/src/bot/startup_test_extension.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import os
|
||||||
|
from datetime import datetime
|
||||||
|
from typing import Callable, Type, Optional
|
||||||
|
|
||||||
|
from cpl_core.application import StartupExtensionABC
|
||||||
|
from cpl_core.configuration import ConfigurationABC
|
||||||
|
from cpl_core.dependency_injection import ServiceCollectionABC
|
||||||
|
from cpl_core.environment import ApplicationEnvironmentABC
|
||||||
|
|
||||||
|
from bot_core.configuration.bot_logging_settings import BotLoggingSettings
|
||||||
|
from bot_core.configuration.bot_settings import BotSettings
|
||||||
|
from modules.base.configuration.base_settings import BaseSettings
|
||||||
|
from modules.boot_log.configuration.boot_log_settings import BootLogSettings
|
||||||
|
from modules.level.configuration.level_settings import LevelSettings
|
||||||
|
from modules.permission.configuration.permission_settings import PermissionSettings
|
||||||
|
|
||||||
|
|
||||||
|
class StartupTestExtension(StartupExtensionABC):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
StartupExtensionABC.__init__(self)
|
||||||
|
|
||||||
|
def configure_configuration(self, configuration: ConfigurationABC, environment: ApplicationEnvironmentABC):
|
||||||
|
# this shit has to be done here because we need settings in subsequent startup extensions
|
||||||
|
environment.set_working_directory(os.path.dirname(os.path.realpath(__file__)))
|
||||||
|
|
||||||
|
def configure_services(self, services: ServiceCollectionABC, env: ApplicationEnvironmentABC):
|
||||||
|
pass
|
0
kdb-bot/test/__init__.py
Normal file
0
kdb-bot/test/__init__.py
Normal file
1
kdb-bot/test/ui_tests/__init__.py
Normal file
1
kdb-bot/test/ui_tests/__init__.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
# imports:
|
16
kdb-bot/test/ui_tests/config/appsettings.edrafts-pc.json
Normal file
16
kdb-bot/test/ui_tests/config/appsettings.edrafts-pc.json
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"DatabaseSettings": {
|
||||||
|
"Host": "localhost",
|
||||||
|
"User": "kd_kdb",
|
||||||
|
"Password": "",
|
||||||
|
"Database": "keksdose_bot_dev",
|
||||||
|
"Charset": "utf8mb4",
|
||||||
|
"UseUnicode": "true",
|
||||||
|
"Buffered": "true",
|
||||||
|
"AuthPlugin": "mysql_native_password"
|
||||||
|
},
|
||||||
|
"DiscordBot": {
|
||||||
|
"Token": "",
|
||||||
|
"Prefix": "!kab-e "
|
||||||
|
}
|
||||||
|
}
|
20
kdb-bot/test/ui_tests/config/appsettings.json
Normal file
20
kdb-bot/test/ui_tests/config/appsettings.json
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"TimeFormatSettings": {
|
||||||
|
"DateFormat": "%Y-%m-%d",
|
||||||
|
"TimeFormat": "%H:%M:%S",
|
||||||
|
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
||||||
|
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
||||||
|
},
|
||||||
|
"LoggingSettings": {
|
||||||
|
"Path": "logs/$date_now/",
|
||||||
|
"Filename": "bot.log",
|
||||||
|
"ConsoleLogLevel": "ERROR",
|
||||||
|
"FileLogLevel": "WARN"
|
||||||
|
},
|
||||||
|
"Translation": {
|
||||||
|
"DefaultLanguage": "de",
|
||||||
|
"Languages": [
|
||||||
|
"de"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
34
kdb-bot/test/ui_tests/main.py
Normal file
34
kdb-bot/test/ui_tests/main.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
import asyncio
|
||||||
|
|
||||||
|
from cpl_core.application import ApplicationABC
|
||||||
|
from cpl_core.application import ApplicationBuilder
|
||||||
|
|
||||||
|
from bot.startup_test_extension import StartupTestExtension
|
||||||
|
from ui_tests.startup import Startup
|
||||||
|
from ui_tests_shared.declarations import Declarations
|
||||||
|
|
||||||
|
try:
|
||||||
|
from test_application import TestApplication
|
||||||
|
except ImportError:
|
||||||
|
from .test_application import TestApplication
|
||||||
|
|
||||||
|
|
||||||
|
def get_app() -> ApplicationABC:
|
||||||
|
app_builder = ApplicationBuilder(TestApplication) \
|
||||||
|
.use_extension(StartupTestExtension) \
|
||||||
|
.use_startup(Startup)
|
||||||
|
app = app_builder.build()
|
||||||
|
Declarations.app = app
|
||||||
|
return app
|
||||||
|
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
app = get_app()
|
||||||
|
await app.run_async()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
import nest_asyncio
|
||||||
|
|
||||||
|
nest_asyncio.apply()
|
||||||
|
asyncio.run(main())
|
56
kdb-bot/test/ui_tests/startup.py
Normal file
56
kdb-bot/test/ui_tests/startup.py
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
import os
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
from cpl_core.application import StartupABC
|
||||||
|
from cpl_core.configuration import ConfigurationABC
|
||||||
|
from cpl_core.database import DatabaseSettings
|
||||||
|
from cpl_core.database.context import DatabaseContext
|
||||||
|
from cpl_core.dependency_injection import ServiceProviderABC, ServiceCollectionABC
|
||||||
|
from cpl_core.environment import ApplicationEnvironment
|
||||||
|
from cpl_discord import get_discord_collection
|
||||||
|
from cpl_discord.discord_event_types_enum import DiscordEventTypesEnum
|
||||||
|
|
||||||
|
from ui_tests.test_on_ready_event import TestOnReadyEvent
|
||||||
|
|
||||||
|
|
||||||
|
class Startup(StartupABC):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
StartupABC.__init__(self)
|
||||||
|
|
||||||
|
self._config: Optional[ConfigurationABC] = None
|
||||||
|
|
||||||
|
def configure_configuration(self, configuration: ConfigurationABC, environment: ApplicationEnvironment) -> ConfigurationABC:
|
||||||
|
configuration.add_environment_variables('KDB-TEST_')
|
||||||
|
configuration.add_environment_variables('DISCORD_')
|
||||||
|
|
||||||
|
cwd = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
configuration.add_json_file(f'{cwd}/config/appsettings.json', optional=False)
|
||||||
|
configuration.add_json_file(f'{cwd}/config/appsettings.{environment.host_name}.json', optional=True)
|
||||||
|
|
||||||
|
self._config = configuration
|
||||||
|
return configuration
|
||||||
|
|
||||||
|
def configure_services(self, services: ServiceCollectionABC, environment: ApplicationEnvironment) -> ServiceProviderABC:
|
||||||
|
services.add_logging()
|
||||||
|
services.add_translation()
|
||||||
|
db_settings: DatabaseSettings = self._config.get_configuration(DatabaseSettings)
|
||||||
|
db_settings_with_pw = DatabaseSettings()
|
||||||
|
pw = self._config.get_configuration('DB_PASSWORD')
|
||||||
|
db_settings_with_pw.from_dict({
|
||||||
|
"Host": db_settings.host,
|
||||||
|
"User": db_settings.user,
|
||||||
|
"Password": '' if pw is None else pw,
|
||||||
|
"Database": db_settings.database,
|
||||||
|
"Charset": db_settings.charset,
|
||||||
|
"UseUnicode": db_settings.use_unicode,
|
||||||
|
"Buffered": db_settings.buffered,
|
||||||
|
"AuthPlugin": db_settings.auth_plugin
|
||||||
|
})
|
||||||
|
services.add_db_context(DatabaseContext, db_settings_with_pw)
|
||||||
|
|
||||||
|
services.add_discord()
|
||||||
|
dc = get_discord_collection(services)
|
||||||
|
dc.add_event(DiscordEventTypesEnum.on_ready.value, TestOnReadyEvent)
|
||||||
|
|
||||||
|
return services.build_service_provider()
|
34
kdb-bot/test/ui_tests/test_application.py
Normal file
34
kdb-bot/test/ui_tests/test_application.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
from cpl_core.configuration import ConfigurationABC
|
||||||
|
from cpl_core.dependency_injection import ServiceProviderABC
|
||||||
|
from cpl_discord.application import DiscordBotApplicationABC
|
||||||
|
from cpl_discord.service import DiscordBotServiceABC
|
||||||
|
from cpl_translation import TranslationSettings, TranslationServiceABC
|
||||||
|
|
||||||
|
|
||||||
|
class TestApplication(DiscordBotApplicationABC):
|
||||||
|
|
||||||
|
def __init__(self, config: ConfigurationABC, services: ServiceProviderABC):
|
||||||
|
DiscordBotApplicationABC.__init__(self, config, services)
|
||||||
|
|
||||||
|
self._config = config
|
||||||
|
self._services = services
|
||||||
|
|
||||||
|
self._bot: DiscordBotServiceABC = services.get_service(DiscordBotServiceABC)
|
||||||
|
self._translation: TranslationServiceABC = services.get_service(TranslationServiceABC)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def config(self) -> ConfigurationABC:
|
||||||
|
return self._config
|
||||||
|
|
||||||
|
@property
|
||||||
|
def services(self) -> ServiceProviderABC:
|
||||||
|
return self._services
|
||||||
|
|
||||||
|
async def configure(self):
|
||||||
|
self._translation.load_by_settings(self._configuration.get_configuration(TranslationSettings))
|
||||||
|
|
||||||
|
async def main(self):
|
||||||
|
await self._bot.start_async()
|
||||||
|
|
||||||
|
async def stop_async(self):
|
||||||
|
await self._bot.close()
|
43
kdb-bot/test/ui_tests/test_on_ready_event.py
Normal file
43
kdb-bot/test/ui_tests/test_on_ready_event.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
import os
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
from cpl_core.console import Console, ForegroundColorEnum
|
||||||
|
from cpl_core.dependency_injection import ServiceProviderABC
|
||||||
|
from cpl_core.logging import LoggerABC
|
||||||
|
from cpl_discord.events import OnReadyABC
|
||||||
|
from cpl_discord.service import DiscordBotServiceABC
|
||||||
|
from cpl_translation import TranslatePipe
|
||||||
|
|
||||||
|
from bot_core.abc.client_utils_service_abc import ClientUtilsServiceABC
|
||||||
|
|
||||||
|
|
||||||
|
class TestOnReadyEvent(OnReadyABC):
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
logger: LoggerABC,
|
||||||
|
bot: DiscordBotServiceABC,
|
||||||
|
services: ServiceProviderABC,
|
||||||
|
client_utils: ClientUtilsServiceABC,
|
||||||
|
t: TranslatePipe
|
||||||
|
):
|
||||||
|
OnReadyABC.__init__(self)
|
||||||
|
|
||||||
|
self._logger = logger
|
||||||
|
self._bot = bot
|
||||||
|
self._services = services
|
||||||
|
self._client_utils = client_utils
|
||||||
|
self._t = t
|
||||||
|
|
||||||
|
async def on_ready(self):
|
||||||
|
Console.write_line('\nStarting tests:\n')
|
||||||
|
loader = unittest.TestLoader()
|
||||||
|
path = f'{os.path.dirname(os.path.realpath(__file__))}/../'
|
||||||
|
tests = loader.discover(path, pattern='*_test_case.py')
|
||||||
|
runner = unittest.TextTestRunner()
|
||||||
|
runner.run(tests)
|
||||||
|
# for cls in CommandTestABC.__subclasses__():
|
||||||
|
# service: CommandTestABC = self._services.get_service(cls)
|
||||||
|
# await service.run(self._tests)
|
||||||
|
|
||||||
|
await self._bot.close()
|
0
kdb-bot/test/ui_tests/ui-tests.json
Normal file
0
kdb-bot/test/ui_tests/ui-tests.json
Normal file
1
kdb-bot/test/ui_tests_shared/__init__.py
Normal file
1
kdb-bot/test/ui_tests_shared/__init__.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
# imports:
|
46
kdb-bot/test/ui_tests_shared/command_test_case_with_app.py
Normal file
46
kdb-bot/test/ui_tests_shared/command_test_case_with_app.py
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
import time
|
||||||
|
|
||||||
|
from cpl_discord.service import DiscordBotServiceABC
|
||||||
|
from cpl_translation import TranslatePipe
|
||||||
|
from selenium import webdriver
|
||||||
|
from selenium.common import NoSuchElementException, StaleElementReferenceException
|
||||||
|
from selenium.webdriver import Keys
|
||||||
|
from selenium.webdriver.common.by import By
|
||||||
|
from selenium.webdriver.remote.webelement import WebElement
|
||||||
|
from selenium.webdriver.support import expected_conditions
|
||||||
|
from selenium.webdriver.support.wait import WebDriverWait
|
||||||
|
|
||||||
|
from ui_tests_shared.test_case_with_app import TestCaseWithApp
|
||||||
|
|
||||||
|
|
||||||
|
class CommandTestCaseWithApp(TestCaseWithApp):
|
||||||
|
_cmd: WebElement
|
||||||
|
|
||||||
|
_bot = None
|
||||||
|
_t = None
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpClass(cls):
|
||||||
|
TestCaseWithApp.setUpClass()
|
||||||
|
cls._bot = cls._services.get_service(DiscordBotServiceABC)
|
||||||
|
cls._t = cls._services.get_service(TranslatePipe)
|
||||||
|
|
||||||
|
def send_command(self, cmd: str):
|
||||||
|
self._driver.get('https://discord.com/channels/910199451145076828/911578636899987526')
|
||||||
|
time.sleep(2)
|
||||||
|
|
||||||
|
cmd_element_ident = (By.XPATH, '/html/body/div[1]/div[2]/div/div[1]/div/div[2]/div/div[1]/div/div/div[3]/div[2]/main/form/div/div[1]/div/div[3]/div/div[2]/div')
|
||||||
|
cmd_element = self._driver.find_element(*cmd_element_ident)
|
||||||
|
cmd_element.send_keys(f'/{cmd}')
|
||||||
|
time.sleep(2)
|
||||||
|
|
||||||
|
ignored_exceptions = (NoSuchElementException, StaleElementReferenceException,)
|
||||||
|
WebDriverWait(self._driver, 20, ignored_exceptions=ignored_exceptions).until(
|
||||||
|
expected_conditions.presence_of_element_located((
|
||||||
|
By.XPATH,
|
||||||
|
'/html/body/div[1]/div[2]/div/div[1]/div/div[2]/div/div[1]/div/div/div[3]/div[2]/main/form/div/div[2]/div/div/div[5]'
|
||||||
|
))
|
||||||
|
).click()
|
||||||
|
time.sleep(2)
|
||||||
|
self._driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div/div[1]/div/div[2]/div/div[1]/div/div/div[3]/div/main/form/div/div[2]/div/div[2]/div/div').send_keys(
|
||||||
|
Keys.ENTER)
|
7
kdb-bot/test/ui_tests_shared/declarations.py
Normal file
7
kdb-bot/test/ui_tests_shared/declarations.py
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
from ui_tests.test_application import TestApplication
|
||||||
|
|
||||||
|
|
||||||
|
class Declarations:
|
||||||
|
app: Optional[TestApplication] = None
|
9
kdb-bot/test/ui_tests_shared/decorators.py
Normal file
9
kdb-bot/test/ui_tests_shared/decorators.py
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import asyncio
|
||||||
|
|
||||||
|
|
||||||
|
def async_test(coro):
|
||||||
|
def wrapper(*args, **kwargs):
|
||||||
|
loop = asyncio.get_running_loop()
|
||||||
|
return loop.run_until_complete(coro(*args, **kwargs))
|
||||||
|
|
||||||
|
return wrapper
|
61
kdb-bot/test/ui_tests_shared/test_case_with_app.py
Normal file
61
kdb-bot/test/ui_tests_shared/test_case_with_app.py
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
import time
|
||||||
|
import unittest
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
from cpl_core.configuration import ConfigurationABC
|
||||||
|
from cpl_core.dependency_injection import ServiceProviderABC
|
||||||
|
from selenium import webdriver
|
||||||
|
from selenium.webdriver import Keys
|
||||||
|
from selenium.webdriver.common.by import By
|
||||||
|
from selenium.webdriver.support import expected_conditions
|
||||||
|
from selenium.webdriver.support.wait import WebDriverWait
|
||||||
|
|
||||||
|
from ui_tests.main import get_app
|
||||||
|
from ui_tests_shared.declarations import Declarations
|
||||||
|
|
||||||
|
|
||||||
|
class TestCaseWithApp(unittest.TestCase):
|
||||||
|
options = webdriver.ChromeOptions()
|
||||||
|
options.add_experimental_option('useAutomationExtension', False)
|
||||||
|
options.add_experimental_option("excludeSwitches", ["enable-automation"])
|
||||||
|
|
||||||
|
_config: Optional[ConfigurationABC] = None
|
||||||
|
_services: Optional[ServiceProviderABC] = None
|
||||||
|
_driver = webdriver.Chrome(options=options)
|
||||||
|
|
||||||
|
_is_logged_in = False
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpClass(cls):
|
||||||
|
if Declarations.app is None:
|
||||||
|
get_app()
|
||||||
|
|
||||||
|
cls._config = Declarations.app.config
|
||||||
|
cls._services = Declarations.app.services
|
||||||
|
cls._login()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _login(cls):
|
||||||
|
if cls._is_logged_in:
|
||||||
|
return
|
||||||
|
|
||||||
|
# use full xpath: https://stackoverflow.com/questions/71179006/how-can-selenium-python-chrome-find-web-elements-visible-in-dev-tools-but-no
|
||||||
|
|
||||||
|
cls._driver.get('https://discord.com/login')
|
||||||
|
|
||||||
|
WebDriverWait(cls._driver, 20).until(expected_conditions.presence_of_element_located((By.NAME, 'email')))
|
||||||
|
|
||||||
|
mail = cls._driver.find_element(By.NAME, 'email')
|
||||||
|
mail.clear()
|
||||||
|
mail.send_keys("dev.sven.heidemann@sh-edraft.de")
|
||||||
|
mail.send_keys(Keys.RETURN)
|
||||||
|
|
||||||
|
pw = cls._driver.find_element(By.NAME, 'password')
|
||||||
|
pw.clear()
|
||||||
|
pw.send_keys("Heidemann1410")
|
||||||
|
pw.send_keys(Keys.RETURN)
|
||||||
|
time.sleep(1)
|
||||||
|
pw.send_keys(Keys.RETURN)
|
||||||
|
|
||||||
|
WebDriverWait(cls._driver, 20).until(expected_conditions.url_matches('https://discord.com/channels/@me'))
|
||||||
|
time.sleep(4)
|
46
kdb-bot/test/ui_tests_shared/ui-tests-shared.json
Normal file
46
kdb-bot/test/ui_tests_shared/ui-tests-shared.json
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
"ProjectSettings": {
|
||||||
|
"Name": "ui-tests-shared",
|
||||||
|
"Version": {
|
||||||
|
"Major": "0",
|
||||||
|
"Minor": "0",
|
||||||
|
"Micro": "0"
|
||||||
|
},
|
||||||
|
"Author": "",
|
||||||
|
"AuthorEmail": "",
|
||||||
|
"Description": "",
|
||||||
|
"LongDescription": "",
|
||||||
|
"URL": "",
|
||||||
|
"CopyrightDate": "",
|
||||||
|
"CopyrightName": "",
|
||||||
|
"LicenseName": "",
|
||||||
|
"LicenseDescription": "",
|
||||||
|
"Dependencies": [
|
||||||
|
"cpl-core>=2022.10.0.post9"
|
||||||
|
],
|
||||||
|
"DevDependencies": [
|
||||||
|
"cpl-cli>=2022.10.0"
|
||||||
|
],
|
||||||
|
"PythonVersion": ">=3.10.4",
|
||||||
|
"PythonPath": {
|
||||||
|
"linux": ""
|
||||||
|
},
|
||||||
|
"Classifiers": []
|
||||||
|
},
|
||||||
|
"BuildSettings": {
|
||||||
|
"ProjectType": "console",
|
||||||
|
"SourcePath": "",
|
||||||
|
"OutputPath": "../../dist",
|
||||||
|
"Main": "ui_tests_shared.main",
|
||||||
|
"EntryPoint": "ui-tests-shared",
|
||||||
|
"IncludePackageData": false,
|
||||||
|
"Included": [],
|
||||||
|
"Excluded": [
|
||||||
|
"*/__pycache__",
|
||||||
|
"*/logs",
|
||||||
|
"*/tests"
|
||||||
|
],
|
||||||
|
"PackageData": {},
|
||||||
|
"ProjectReferences": []
|
||||||
|
}
|
||||||
|
}
|
1
kdb-bot/test/ui_tests_tests/__init__.py
Normal file
1
kdb-bot/test/ui_tests_tests/__init__.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
# imports:
|
15
kdb-bot/test/ui_tests_tests/appsettings.json
Normal file
15
kdb-bot/test/ui_tests_tests/appsettings.json
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"TimeFormatSettings": {
|
||||||
|
"DateFormat": "%Y-%m-%d",
|
||||||
|
"TimeFormat": "%H:%M:%S",
|
||||||
|
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
||||||
|
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
||||||
|
},
|
||||||
|
|
||||||
|
"LoggingSettings": {
|
||||||
|
"Path": "logs/",
|
||||||
|
"Filename": "log_$start_time.log",
|
||||||
|
"ConsoleLogLevel": "ERROR",
|
||||||
|
"FileLogLevel": "WARN"
|
||||||
|
}
|
||||||
|
}
|
0
kdb-bot/test/ui_tests_tests/cases/__init__.py
Normal file
0
kdb-bot/test/ui_tests_tests/cases/__init__.py
Normal file
22
kdb-bot/test/ui_tests_tests/cases/ping_test_case.py
Normal file
22
kdb-bot/test/ui_tests_tests/cases/ping_test_case.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import discord
|
||||||
|
|
||||||
|
from ui_tests_shared.command_test_case_with_app import CommandTestCaseWithApp
|
||||||
|
from ui_tests_shared.decorators import async_test
|
||||||
|
|
||||||
|
|
||||||
|
class PingTestCase(CommandTestCaseWithApp):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@async_test
|
||||||
|
async def test_ping(self):
|
||||||
|
correct_response = self._t.transform('modules.base.pong')
|
||||||
|
self.assertIsNotNone(correct_response)
|
||||||
|
self.send_command('ping')
|
||||||
|
|
||||||
|
def check(m: discord.Message):
|
||||||
|
return m.content == correct_response and m.author.id == 998159802393964594
|
||||||
|
|
||||||
|
response = await self._bot.wait_for('message', check=check)
|
||||||
|
self.assertEqual(response.content, correct_response)
|
46
kdb-bot/test/ui_tests_tests/ui-tests-tests.json
Normal file
46
kdb-bot/test/ui_tests_tests/ui-tests-tests.json
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
"ProjectSettings": {
|
||||||
|
"Name": "ui-tests-tests",
|
||||||
|
"Version": {
|
||||||
|
"Major": "0",
|
||||||
|
"Minor": "0",
|
||||||
|
"Micro": "0"
|
||||||
|
},
|
||||||
|
"Author": "",
|
||||||
|
"AuthorEmail": "",
|
||||||
|
"Description": "",
|
||||||
|
"LongDescription": "",
|
||||||
|
"URL": "",
|
||||||
|
"CopyrightDate": "",
|
||||||
|
"CopyrightName": "",
|
||||||
|
"LicenseName": "",
|
||||||
|
"LicenseDescription": "",
|
||||||
|
"Dependencies": [
|
||||||
|
"cpl-core>=2022.10.0.post9"
|
||||||
|
],
|
||||||
|
"DevDependencies": [
|
||||||
|
"cpl-cli>=2022.10.0"
|
||||||
|
],
|
||||||
|
"PythonVersion": ">=3.10.4",
|
||||||
|
"PythonPath": {
|
||||||
|
"linux": ""
|
||||||
|
},
|
||||||
|
"Classifiers": []
|
||||||
|
},
|
||||||
|
"BuildSettings": {
|
||||||
|
"ProjectType": "console",
|
||||||
|
"SourcePath": "",
|
||||||
|
"OutputPath": "../../dist",
|
||||||
|
"Main": "ui_tests__tests.main",
|
||||||
|
"EntryPoint": "ui-tests_tests",
|
||||||
|
"IncludePackageData": false,
|
||||||
|
"Included": [],
|
||||||
|
"Excluded": [
|
||||||
|
"*/__pycache__",
|
||||||
|
"*/logs",
|
||||||
|
"*/tests"
|
||||||
|
],
|
||||||
|
"PackageData": {},
|
||||||
|
"ProjectReferences": []
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user