From 565f5e2ea71fbc2981bbea6854967ea579a5d0ea Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 25 Oct 2024 16:44:22 +0200 Subject: [PATCH 1/4] Tests: Run fakeredis on different virtual ports per pytest worker (#4555) --- src/pretix/testutils/mock.py | 8 ++++++-- src/tests/conftest.py | 12 +++++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/pretix/testutils/mock.py b/src/pretix/testutils/mock.py index c4a920d6b8..30b9046ab2 100644 --- a/src/pretix/testutils/mock.py +++ b/src/pretix/testutils/mock.py @@ -39,5 +39,9 @@ def mocker_context(): def get_redis_connection(alias="default", write=True): - xdist_id = os.environ.get("PYTEST_XDIST_WORKER") or "None" - return fakeredis.FakeStrictRedis(server=fakeredis.FakeServer.get_server(f"127.0.0.1:None:v(7,0):{xdist_id}", (7, 0), server_type="redis")) + worker_id = os.environ.get("PYTEST_XDIST_WORKER") + if worker_id.startswith("gw"): + redis_port = 1000 + int(worker_id.replace("gw", "")) + else: + redis_port = 1000 + return fakeredis.FakeStrictRedis(server=fakeredis.FakeServer.get_server(f"127.0.0.1:{redis_port}:redis:v(7, 0)", (7, 0), server_type="redis")) diff --git a/src/tests/conftest.py b/src/tests/conftest.py index b78b025449..9480872cab 100644 --- a/src/tests/conftest.py +++ b/src/tests/conftest.py @@ -20,6 +20,7 @@ # . # import inspect +import os import pytest from django.test import override_settings @@ -82,27 +83,32 @@ def reset_locale(): @pytest.fixture def fakeredis_client(monkeypatch): + worker_id = os.environ.get("PYTEST_XDIST_WORKER") + if worker_id.startswith("gw"): + redis_port = 1000 + int(worker_id.replace("gw", "")) + else: + redis_port = 1000 with override_settings( HAS_REDIS=True, REAL_CACHE_USED=True, CACHES={ 'redis': { 'BACKEND': 'django.core.cache.backends.redis.RedisCache', - 'LOCATION': 'redis://127.0.0.1', + 'LOCATION': f'redis://127.0.0.1:{redis_port}', 'OPTIONS': { 'connection_class': FakeConnection } }, 'redis_session': { 'BACKEND': 'django.core.cache.backends.redis.RedisCache', - 'LOCATION': 'redis://127.0.0.1', + 'LOCATION': f'redis://127.0.0.1:{redis_port}', 'OPTIONS': { 'connection_class': FakeConnection } }, 'default': { 'BACKEND': 'django.core.cache.backends.redis.RedisCache', - 'LOCATION': 'redis://127.0.0.1', + 'LOCATION': f'redis://127.0.0.1:{redis_port}', 'OPTIONS': { 'connection_class': FakeConnection } From 0cd12906242fe8c5fe70458abe8fe9af14ad0b84 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 25 Oct 2024 17:04:16 +0200 Subject: [PATCH 2/4] Tests: Fix two flaky tests (#4557) * Test: Fix test that relies on unstable database result order * Tests: Fix test that fails between 0am and 1am --- src/pretix/control/views/typeahead.py | 4 ++-- src/pretix/presale/views/organizer.py | 4 ++-- src/tests/api/test_order_change.py | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pretix/control/views/typeahead.py b/src/pretix/control/views/typeahead.py index ac24881e06..017871ffd7 100644 --- a/src/pretix/control/views/typeahead.py +++ b/src/pretix/control/views/typeahead.py @@ -156,7 +156,7 @@ def event_list(request): max_fromto=Greatest(Max('subevents__date_to'), Max('subevents__date_from')) ).annotate( order_from=Coalesce('min_from', 'date_from'), - ).order_by('-order_from') + ).order_by('-order_from', 'slug') total = qs.count() pagesize = 20 @@ -318,7 +318,7 @@ def nav_context_list(request): max_fromto=Greatest(Max('subevents__date_to'), Max('subevents__date_from')) ).annotate( order_from=Coalesce('min_from', 'date_from'), - ).order_by('-order_from') + ).order_by('-order_from', 'slug') if request.user.has_active_staff_session(request.session.session_key): qs_orga = Organizer.objects.all() diff --git a/src/pretix/presale/views/organizer.py b/src/pretix/presale/views/organizer.py index 12d4fa378b..dcfb310e75 100644 --- a/src/pretix/presale/views/organizer.py +++ b/src/pretix/presale/views/organizer.py @@ -210,7 +210,7 @@ class EventListMixin: ) ).annotate( order_to=Coalesce('max_fromto', 'max_to', 'max_from', 'date_to', 'date_from'), - ).order_by('-order_to') + ).order_by('-order_to', 'name', 'slug') else: date_q = Q(date_to__gte=now()) | (Q(date_to__isnull=True) & Q(date_from__gte=now())) qs = qs.filter( @@ -219,7 +219,7 @@ class EventListMixin: ) ).annotate( order_from=Coalesce('min_from', 'date_from'), - ).order_by('order_from') + ).order_by('order_from', 'name', 'slug') qs = Event.annotated(filter_qs_by_attr( qs, self.request, match_subevents_with_conditions=Q(active=True) & Q(is_public=True) & date_q ), self.request.sales_channel) diff --git a/src/tests/api/test_order_change.py b/src/tests/api/test_order_change.py index ca271e1236..f40fb520c9 100644 --- a/src/tests/api/test_order_change.py +++ b/src/tests/api/test_order_change.py @@ -451,7 +451,7 @@ def test_order_create_invoice(token_client, organizer, event, order): "invoice_to_vat_id": "DE123", "invoice_to_beneficiary": "", "custom_field": None, - 'date': now().date().isoformat(), + 'date': now().astimezone(event.timezone).date().isoformat(), 'refers': None, 'locale': 'en', 'introductory_text': '', From cbee1b71fe72ef9f671a498ee0b63d2b667a75a6 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 25 Oct 2024 17:05:58 +0200 Subject: [PATCH 3/4] CI: Install dependencies with uv for speedup (#4558) --- .github/workflows/strings.yml | 4 ++-- .github/workflows/style.yml | 4 ++-- .github/workflows/tests.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/strings.yml b/.github/workflows/strings.yml index b01d8ec7c7..2a36eaadbe 100644 --- a/.github/workflows/strings.yml +++ b/.github/workflows/strings.yml @@ -37,7 +37,7 @@ jobs: - name: Install system packages run: sudo apt update && sudo apt install gettext - name: Install Dependencies - run: pip3 install -e ".[dev]" + run: pip3 install uv && uv pip install --system -e ".[dev]" - name: Compile messages run: python manage.py compilemessages working-directory: ./src @@ -62,7 +62,7 @@ jobs: - name: Install system packages run: sudo apt update && sudo apt install enchant-2 hunspell hunspell-de-de aspell-en aspell-de - name: Install Dependencies - run: pip3 install -e ".[dev]" + run: pip3 install uv && uv pip install --system -e ".[dev]" - name: Spellcheck translations run: potypo working-directory: ./src diff --git a/.github/workflows/style.yml b/.github/workflows/style.yml index 0c284155a2..4ecec238fb 100644 --- a/.github/workflows/style.yml +++ b/.github/workflows/style.yml @@ -35,7 +35,7 @@ jobs: restore-keys: | ${{ runner.os }}-pip- - name: Install Dependencies - run: pip3 install -e ".[dev]" psycopg2-binary + run: pip3 install uv && uv pip install --system -e ".[dev]" psycopg2-binary - name: Run isort run: isort -c . working-directory: ./src @@ -55,7 +55,7 @@ jobs: restore-keys: | ${{ runner.os }}-pip- - name: Install Dependencies - run: pip3 install -e ".[dev]" psycopg2-binary + run: pip3 install uv && uv pip install --system -e ".[dev]" psycopg2-binary - name: Run flake8 run: flake8 . working-directory: ./src diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index ee5068a43b..5b8bceaf88 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -52,7 +52,7 @@ jobs: - name: Install system dependencies run: sudo apt update && sudo apt install gettext - name: Install Python dependencies - run: pip3 install --ignore-requires-python -e ".[dev]" psycopg2-binary # We ignore that flake8 needs newer python as we don't run flake8 during tests + run: pip3 install uv && uv pip install --system -e ".[dev]" psycopg2-binary - name: Run checks run: python manage.py check working-directory: ./src From e4cef6e46b9a2ddf0f1c39de7d9b490974c1fa2a Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 25 Oct 2024 17:06:11 +0200 Subject: [PATCH 4/4] CI: Make sure apt is non-interactive (to not break act) (#4559) --- .github/workflows/build.yml | 2 +- .github/workflows/docs.yml | 2 +- .github/workflows/strings.yml | 2 +- .github/workflows/tests.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1dae98ee78..569822798e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -38,7 +38,7 @@ jobs: restore-keys: | ${{ runner.os }}-pip- - name: Install system dependencies - run: sudo apt update && sudo apt install gettext unzip + run: sudo apt update && sudo apt install -y gettext unzip - name: Install Python dependencies run: pip3 install -U setuptools build pip check-manifest - name: Run check-manifest diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index ab35c80018..7b1598129f 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -37,7 +37,7 @@ jobs: restore-keys: | ${{ runner.os }}-pip- - name: Install system packages - run: sudo apt update && sudo apt install enchant-2 hunspell aspell-en + run: sudo apt update && sudo apt install -y enchant-2 hunspell aspell-en - name: Install Dependencies run: pip3 install -Ur requirements.txt working-directory: ./doc diff --git a/.github/workflows/strings.yml b/.github/workflows/strings.yml index 2a36eaadbe..cfc580b9a7 100644 --- a/.github/workflows/strings.yml +++ b/.github/workflows/strings.yml @@ -35,7 +35,7 @@ jobs: restore-keys: | ${{ runner.os }}-pip- - name: Install system packages - run: sudo apt update && sudo apt install gettext + run: sudo apt update && sudo apt -y install gettext - name: Install Dependencies run: pip3 install uv && uv pip install --system -e ".[dev]" - name: Compile messages diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 5b8bceaf88..67f2204314 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -50,7 +50,7 @@ jobs: restore-keys: | ${{ runner.os }}-pip- - name: Install system dependencies - run: sudo apt update && sudo apt install gettext + run: sudo apt update && sudo apt install -y gettext - name: Install Python dependencies run: pip3 install uv && uv pip install --system -e ".[dev]" psycopg2-binary - name: Run checks