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 ac1e4424d3..04aace5c29 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -51,7 +51,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 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/pretix/testutils/mock.py b/src/pretix/testutils/mock.py index 66ee3fb52f..70768c11db 100644 --- a/src/pretix/testutils/mock.py +++ b/src/pretix/testutils/mock.py @@ -38,4 +38,9 @@ def mocker_context(): def get_redis_connection(alias="default", write=True): - return fakeredis.FakeStrictRedis(server=fakeredis.FakeServer.get_server("127.0.0.1:None:v(7, 0)", (7, 0))) + 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/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': '', diff --git a/src/tests/conftest.py b/src/tests/conftest.py index 49d9489f0c..fb065ef69a 100644 --- a/src/tests/conftest.py +++ b/src/tests/conftest.py @@ -85,27 +85,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 }