diff --git a/.github/workflows/check-lint.yml b/.github/workflows/check-lint.yml new file mode 100644 index 0000000..948a83e --- /dev/null +++ b/.github/workflows/check-lint.yml @@ -0,0 +1,71 @@ +name: lint + +on: + push: + branches-ignore: + - test + tags-ignore: + - "*" + pull_request: + branches: + - 'release/**' + +jobs: + test: + runs-on: ubuntu-latest + steps: + #---------------------------------------------- + # check-out repo and set-up python + #---------------------------------------------- + - name: Check out repository + uses: actions/checkout@v3 + - name: Set up python + id: setup-python + uses: actions/setup-python@v3 + with: + python-version: '3.10' + #---------------------------------------------- + # ----- install & configure poetry ----- + #---------------------------------------------- + - name: Install poetry + env: # Keep in sync with `POETRY_VERSION` in `Dockerfile` + POETRY_VERSION: "1.1.14" + run: | + curl -sSL "https://install.python-poetry.org" | python - + # Adding `poetry` to `$PATH`: + echo "$HOME/.local/bin" >> $GITHUB_PATH + + - name: Set up cache + uses: actions/cache@v3 + with: + path: .venv + key: venv-${{ matrix.python-version }}-${{ hashFiles('poetry.lock') }} + #---------------------------------------------- + # load cached venv if cache exists + #---------------------------------------------- + - name: Load cached venv + id: cached-poetry-dependencies + uses: actions/cache@v3 + with: + path: .venv + key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }} + #---------------------------------------------- + # install dependencies if cache does not exist + #---------------------------------------------- + - name: Install dependencies + run: | + poetry config virtualenvs.in-project true + poetry install + poetry run pip install -U pip + #---------------------------------------------- + # run test suite + #---------------------------------------------- + - name: Analysing the code with mypy + run: | + mypy . + - name: Analysing the code with flake8 + run: | + flake8 + - name: Analysing code with isort + run: | + isort --check-only app \ No newline at end of file diff --git a/.github/workflows/poetry-test.yml b/.github/workflows/poetry-test.yml index e50c200..3d598ff 100644 --- a/.github/workflows/poetry-test.yml +++ b/.github/workflows/poetry-test.yml @@ -18,10 +18,10 @@ jobs: # check-out repo and set-up python #---------------------------------------------- - name: Check out repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set up python id: setup-python - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: '3.10' #---------------------------------------------- @@ -29,7 +29,7 @@ jobs: #---------------------------------------------- - name: Install poetry env: # Keep in sync with `POETRY_VERSION` in `Dockerfile` - POETRY_VERSION: "1.1.13" + POETRY_VERSION: "1.1.14" run: | curl -sSL "https://install.python-poetry.org" | python - # Adding `poetry` to `$PATH`: @@ -45,7 +45,7 @@ jobs: #---------------------------------------------- - name: Load cached venv id: cached-poetry-dependencies - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: .venv key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }} diff --git a/app/main.py b/app/main.py index 1082404..bc5103e 100644 --- a/app/main.py +++ b/app/main.py @@ -26,8 +26,8 @@ async def on_shutdown(dp: Dispatcher) -> None: # Close DB connection (if used) if driver: driver.close() - await dispatcher.storage.close() - await dispatcher.storage.wait_closed() + await dp.storage.close() + await dp.storage.wait_closed() logger.warning('Bye!') diff --git a/app/tests/bot/test_bot.py b/app/tests/bot/test_bot.py index c1606e4..8b649bc 100644 --- a/app/tests/bot/test_bot.py +++ b/app/tests/bot/test_bot.py @@ -1,7 +1,9 @@ import pytest from aiogram import Bot, types +from aiogram.dispatcher.filters.builtin import Command from app.tests.conftest import FakeTelegram from app.tests.data.factories import UserFactory +from core.bot import dispatcher pytestmark = [ pytest.mark.asyncio, @@ -16,3 +18,16 @@ async def test_parse_site(bot: Bot) -> None: result = await bot.me assert result == user + + +async def test_command1(bot: Bot) -> None: + + dispatcher.bot = bot + handlers = dispatcher.message_handlers.handlers + for handler in handlers: + handl = list( + filter(lambda obj: isinstance(obj.filter, Command), handler.filters) + ) + if handl: + command = handl[0].filter.commands[0] + assert command