From a3e2e6b8139226adf2bcd6340901f1fd282e1a5f Mon Sep 17 00:00:00 2001 From: nils Date: Mon, 25 Nov 2024 08:05:08 +0100 Subject: [PATCH 1/5] Generate URL for oneToMany using comma separated style for many-array --- src/lib/api.ts | 3 ++- src/lib/motisUtils.ts | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/lib/api.ts b/src/lib/api.ts index ce16aaa3..d05983c7 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -1,7 +1,7 @@ import type { Company, Vehicle } from './types'; import { Coordinates, Location } from './location'; import { MAX_MATCHING_DISTANCE, MAX_TRAVEL_SECONDS, MOTIS_BASE_URL } from './constants'; -import { coordinatesToPlace, coordinatesToStr } from './motisUtils'; +import { coordinatesToPlace, coordinatesToStr, customQuerySerializer } from './motisUtils'; import { type Duration, type PlanResponse } from './motis/types.gen'; import { oneToMany as oneToManyMotis, plan as planMotis } from './motis/services.gen'; import { secondsToMs } from './time_utils'; @@ -122,6 +122,7 @@ export const oneToMany = async ( ): Promise => { return await oneToManyMotis({ baseUrl: MOTIS_BASE_URL, + querySerializer: customQuerySerializer, query: { one: coordinatesToStr(one), many: many.map(coordinatesToStr), diff --git a/src/lib/motisUtils.ts b/src/lib/motisUtils.ts index b4c1f3c7..f5d6efd5 100644 --- a/src/lib/motisUtils.ts +++ b/src/lib/motisUtils.ts @@ -7,3 +7,31 @@ export const coordinatesToStr = (c: Coordinates) => { export const coordinatesToPlace = (c: Coordinates) => { return `${c.lat},${c.lng},0`; }; + +export const customQuerySerializer = (params: Record): string => { + const qs: string[] = []; + + const append = (key: string, value: unknown) => { + qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`); + }; + + const encodePair = (key: string, value: unknown) => { + if (value === undefined || value === null) { + return; + } + + if (value instanceof Date) { + append(key, value.toISOString()); + } else if (Array.isArray(value)) { + append(key, value.join(',')); + } else if (typeof value === 'object') { + Object.entries(value).forEach(([k, v]) => encodePair(`${key}[${k}]`, v)); + } else { + append(key, value); + } + }; + + Object.entries(params).forEach(([key, value]) => encodePair(key, value)); + + return qs.length ? `?${qs.join('&')}` : ''; +}; From 66241620098c832e2a9a4a8bba21bee73aa708c9 Mon Sep 17 00:00:00 2001 From: nils Date: Mon, 25 Nov 2024 11:53:10 +0100 Subject: [PATCH 2/5] Use QuerySerializerOptions instead of creating custum serializer --- src/lib/api.ts | 5 +++-- src/lib/motisUtils.ts | 28 ---------------------------- 2 files changed, 3 insertions(+), 30 deletions(-) diff --git a/src/lib/api.ts b/src/lib/api.ts index d05983c7..58792297 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -1,10 +1,11 @@ import type { Company, Vehicle } from './types'; import { Coordinates, Location } from './location'; import { MAX_MATCHING_DISTANCE, MAX_TRAVEL_SECONDS, MOTIS_BASE_URL } from './constants'; -import { coordinatesToPlace, coordinatesToStr, customQuerySerializer } from './motisUtils'; +import { coordinatesToPlace, coordinatesToStr } from './motisUtils'; import { type Duration, type PlanResponse } from './motis/types.gen'; import { oneToMany as oneToManyMotis, plan as planMotis } from './motis/services.gen'; import { secondsToMs } from './time_utils'; +import type { QuerySerializerOptions } from '@hey-api/client-fetch'; export const getCompany = async (id: number): Promise => { const response = await fetch(`/api/company?id=${id}`); @@ -122,7 +123,7 @@ export const oneToMany = async ( ): Promise => { return await oneToManyMotis({ baseUrl: MOTIS_BASE_URL, - querySerializer: customQuerySerializer, + querySerializer: { array: { explode: false } } as QuerySerializerOptions, query: { one: coordinatesToStr(one), many: many.map(coordinatesToStr), diff --git a/src/lib/motisUtils.ts b/src/lib/motisUtils.ts index f5d6efd5..b4c1f3c7 100644 --- a/src/lib/motisUtils.ts +++ b/src/lib/motisUtils.ts @@ -7,31 +7,3 @@ export const coordinatesToStr = (c: Coordinates) => { export const coordinatesToPlace = (c: Coordinates) => { return `${c.lat},${c.lng},0`; }; - -export const customQuerySerializer = (params: Record): string => { - const qs: string[] = []; - - const append = (key: string, value: unknown) => { - qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`); - }; - - const encodePair = (key: string, value: unknown) => { - if (value === undefined || value === null) { - return; - } - - if (value instanceof Date) { - append(key, value.toISOString()); - } else if (Array.isArray(value)) { - append(key, value.join(',')); - } else if (typeof value === 'object') { - Object.entries(value).forEach(([k, v]) => encodePair(`${key}[${k}]`, v)); - } else { - append(key, value); - } - }; - - Object.entries(params).forEach(([key, value]) => encodePair(key, value)); - - return qs.length ? `?${qs.join('&')}` : ''; -}; From 8a600bcef7a796da862dab638451c1d361bcc7be Mon Sep 17 00:00:00 2001 From: nils Date: Mon, 25 Nov 2024 12:04:14 +0100 Subject: [PATCH 3/5] Add screenshot --- tests/entrepreneurAssignsRoles.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/entrepreneurAssignsRoles.ts b/tests/entrepreneurAssignsRoles.ts index 971ffa14..79fe087b 100644 --- a/tests/entrepreneurAssignsRoles.ts +++ b/tests/entrepreneurAssignsRoles.ts @@ -24,6 +24,7 @@ test('Activate drivers', async ({ page }) => { test('Deactivate driver', async ({ page }) => { await login(page, ENTREPENEUR); + await page.screenshot({ path: 'screenshots/afterLoggingInEntrepreneur.png', fullPage: true }); await page.getByRole('link', { name: 'Fahrer' }).click(); await page .getByRole('row', { name: 'driver2@test.de Zugang zum Unternehmen löschen' }) From 2bad33574ef54bd0b2e55e20a5942ba74329f3b8 Mon Sep 17 00:00:00 2001 From: nils Date: Mon, 25 Nov 2024 18:59:47 +0100 Subject: [PATCH 4/5] wip --- .github/workflows/ui.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ui.yml b/.github/workflows/ui.yml index 15323445..1a4f8992 100644 --- a/.github/workflows/ui.yml +++ b/.github/workflows/ui.yml @@ -39,6 +39,8 @@ jobs: docker compose up -d pg sleep 5 echo "CREATE DATABASE prima;" | PGPASSWORD=pw psql postgresql://localhost:6500 --user postgres + docker logs pg + docker logs prima-prima-1 npx playwright test - name: Unit Tests From 33795be8202a0f59bb6c82bff95ac261d1e7e45d Mon Sep 17 00:00:00 2001 From: nils Date: Mon, 25 Nov 2024 19:11:35 +0100 Subject: [PATCH 5/5] wip --- .github/workflows/ui.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/ui.yml b/.github/workflows/ui.yml index 1a4f8992..15323445 100644 --- a/.github/workflows/ui.yml +++ b/.github/workflows/ui.yml @@ -39,8 +39,6 @@ jobs: docker compose up -d pg sleep 5 echo "CREATE DATABASE prima;" | PGPASSWORD=pw psql postgresql://localhost:6500 --user postgres - docker logs pg - docker logs prima-prima-1 npx playwright test - name: Unit Tests