diff --git a/.github/FUNDING.yml b/.github/FUNDING.yaml similarity index 100% rename from .github/FUNDING.yml rename to .github/FUNDING.yaml diff --git a/.github/dependabot.yml b/.github/dependabot.yaml similarity index 100% rename from .github/dependabot.yml rename to .github/dependabot.yaml diff --git a/.github/workflows/ruff.yml b/.github/workflows/code-quality.yaml similarity index 63% rename from .github/workflows/ruff.yml rename to .github/workflows/code-quality.yaml index 920ac071c..f8b270587 100644 --- a/.github/workflows/ruff.yml +++ b/.github/workflows/code-quality.yaml @@ -1,4 +1,4 @@ -name: ๐Ÿ Code Quality +name: code-quality on: push: @@ -6,13 +6,13 @@ on: paths: - "**.py" - "app/pyproject.toml" - - ".github/workflows/ruff.yml" + - ".github/workflows/ruff.yaml" pull_request: branches: [main] paths: - "**.py" - "app/pyproject.toml" - - ".github/workflows/ruff.yml" + - ".github/workflows/ruff.yaml" concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -20,24 +20,24 @@ concurrency: jobs: ruff-check: - name: ๐Ÿ” Lint & Format Check + name: lint & format check runs-on: ubuntu-latest timeout-minutes: 10 strategy: matrix: - python-version: ["3.13"] + python-version: ["3.14"] steps: - - name: ๐Ÿ“ฅ Checkout repository - uses: actions/checkout@v4 + - name: checkout repository + uses: actions/checkout@v6 - - name: ๐Ÿ Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 + - name: set up python ${{ matrix.python-version }} + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - - name: ๐Ÿ’พ Cache pip dependencies - uses: actions/cache@v4 + - name: cache pip dependencies + uses: actions/cache@v5 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ hashFiles('**/requirements*.txt', '**/pyproject.toml') }} @@ -45,24 +45,24 @@ jobs: ${{ runner.os }}-pip-${{ matrix.python-version }}- ${{ runner.os }}-pip- - - name: ๐Ÿ“ฆ Install Ruff + - name: install ruff run: | python -m pip install --upgrade pip pip install ruff - - name: โœจ Check code formatting + - name: check code formatting run: | ruff format --check --diff . - - name: ๐Ÿ” Lint code + - name: lint code run: | ruff check --output-format=github . - - name: ๐Ÿ“Š Generate Ruff report + - name: generate ruff report if: failure() run: | - echo "## ๐Ÿ Ruff Issues Found" >> $GITHUB_STEP_SUMMARY - echo "The following issues were found by Ruff:" >> $GITHUB_STEP_SUMMARY + echo "## ruff issues found" >> $GITHUB_STEP_SUMMARY + echo "the following issues were found by ruff:" >> $GITHUB_STEP_SUMMARY echo '```' >> $GITHUB_STEP_SUMMARY ruff check --output-format=text . >> $GITHUB_STEP_SUMMARY || true echo '```' >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yaml similarity index 64% rename from .github/workflows/e2e-tests.yml rename to .github/workflows/e2e-tests.yaml index 3e11245b0..20a8b92ab 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yaml @@ -1,10 +1,10 @@ -name: ๐Ÿงช E2E Tests +name: e2e-tests on: workflow_dispatch: inputs: test_path: - description: "Specific test to run (e.g., e2e/auth/test_login.py::TestLoginSuccess)" + description: "specific test to run (e.g., e2e/auth/test_login.py::TestLoginSuccess)" required: false default: "e2e/" push: @@ -12,13 +12,13 @@ on: paths: - "app/**" - "tests/**" - - ".github/workflows/e2e-tests.yml" + - ".github/workflows/e2e-tests.yaml" pull_request: branches: [main] paths: - "app/**" - "tests/**" - - ".github/workflows/e2e-tests.yml" + - ".github/workflows/e2e-tests.yaml" concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -30,27 +30,27 @@ jobs: timeout-minutes: 15 steps: - - name: Checkout repository - uses: actions/checkout@v4 + - name: checkout repository + uses: actions/checkout@v6 - - name: Set up Python 3.13 - uses: actions/setup-python@v5 + - name: set up python 3.14 + uses: actions/setup-python@v6 with: - python-version: "3.13" + python-version: "3.14" - - name: Install uv - uses: astral-sh/setup-uv@v4 + - name: install uv + uses: astral-sh/setup-uv@v7 with: enable-cache: true cache-dependency-glob: "app/pyproject.toml" - - name: Install dependencies + - name: install dependencies run: | cd app uv sync --extra test uv run playwright install chromium --with-deps - - name: Run E2E tests + - name: run e2e tests run: | cd app uv run pytest ../tests/${{ github.event.inputs.test_path || 'e2e/' }} -v --tb=short diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 000000000..97f261bb6 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,7 @@ +repos: + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.14.8 + hooks: + - id: ruff-check + args: [--fix] + - id: ruff-format diff --git a/tests/e2e/auth/test_logout.py b/tests/e2e/auth/test_logout.py index 7b6007fbb..84b2c5495 100644 --- a/tests/e2e/auth/test_logout.py +++ b/tests/e2e/auth/test_logout.py @@ -2,7 +2,10 @@ E2E tests for the logout functionality. """ +import re + import pytest +from playwright.sync_api import expect from tests.e2e.pages.base_page import BasePage from tests.e2e.pages.login_page import LoginPage @@ -251,7 +254,11 @@ def test_logout_and_login_as_different_user( # Login as test user login_page.navigate("/login/redirect=&") login_page.login(test_user.username, test_user.password) - page.wait_for_url("**/", timeout=5000) + page.wait_for_load_state("networkidle") + # Use regex to match home URL with or without trailing slash + expect(page).to_have_url( + re.compile(rf"^{re.escape(flask_server['base_url'])}/?$"), timeout=10000 + ) # Verify logged in as different user navbar.expect_logged_in()