|
1 | | -# Workshop API Design |
| 1 | +# Workshop Consumer-Driven Contract Testing |
2 | 2 |
|
3 | | -Herzlich willkommen zum Workshop API Design. |
| 3 | +Herzlich willkommen zum Workshop Consumer-Driven Contract Testing. |
4 | 4 |
|
5 | | -## Übungen |
| 5 | +## Übung: Playwright Tests mit WireMock |
6 | 6 |
|
7 | | -### API Design |
| 7 | +In dieser Übung werden die Playwright-Tests so angepasst, dass sie nicht mehr gegen den echten Backend-Service laufen, sondern alle HTTP-Requests über WireMock gemockt werden. |
8 | 8 |
|
9 | | -- [OpenAPI](https://github.com/openknowledge/workshop-api-design/tree/openapi) |
10 | | -- [Mocking](https://github.com/openknowledge/workshop-api-design/tree/wiremock) |
11 | | -- [AsyncAPI](https://github.com/openknowledge/workshop-api-design/tree/asyncapi) |
| 9 | +### Ausgangssituation |
12 | 10 |
|
13 | | -### API Testing |
| 11 | +Im Verzeichnis `customer-client/test/` befinden sich drei Testdateien: |
14 | 12 |
|
15 | | -- [Pact](https://github.com/openknowledge/workshop-api-design/tree/pact-mock-server) |
16 | | -- [Pact Pipeline](https://github.com/openknowledge/workshop-api-design/tree/pact) |
| 13 | +- `customer-list.spec.ts` – Tests für die Kundenliste |
| 14 | +- `customer-detail.spec.ts` – Tests für die Kundendetailseite (Adressen anlegen und bearbeiten) |
| 15 | +- `create-customer.spec.ts` – Tests für das Anlegen neuer Kunden |
17 | 16 |
|
18 | | -### API Security |
| 17 | +Die Tests laufen aktuell gegen den echten Backend-Service (`http://localhost:8181`). |
| 18 | +Im Verzeichnis `wiremock/mappings/` liegen bereits zwei WireMock-Mappings: |
19 | 19 |
|
20 | | -- [JWT](https://github.com/openknowledge/workshop-api-design/tree/jwt) |
21 | | -- [OAuth2](https://github.com/openknowledge/workshop-api-design/tree/oauth2) |
22 | | -- [OAuth2 mit PKCE](https://github.com/openknowledge/workshop-api-design/tree/oauth2-pkce) |
| 20 | +- `get-customers.json` – Mockt `GET /customers/` |
| 21 | +- `options-customers.json` – Mockt `OPTIONS /customers/` |
23 | 22 |
|
24 | | -### API Governance |
| 23 | +WireMock wird per Docker Compose gestartet und ist auf Port `8080` erreichbar: |
25 | 24 |
|
26 | | -- [Linting](https://github.com/openknowledge/workshop-api-design/tree/linting) |
| 25 | +```bash |
| 26 | +docker compose up wiremock |
| 27 | +``` |
27 | 28 |
|
28 | | -### API Management |
| 29 | +### Ziel |
29 | 30 |
|
30 | | -- [Rate Limiting](https://github.com/openknowledge/workshop-api-design/tree/rate-limiting) |
31 | | -- [Backstage](https://github.com/openknowledge/workshop-api-design/tree/backstage) |
| 31 | +Alle HTTP-Requests in den Playwright-Tests sollen durch WireMock-Mappings ersetzt werden, sodass der echte Backend-Service für die Tests nicht mehr benötigt wird. |
32 | 32 |
|
33 | | -### API Operation |
| 33 | +### Aufgaben |
34 | 34 |
|
35 | | -- [Observability](https://github.com/openknowledge/workshop-api-design/tree/observability) |
| 35 | +1. **Playwright auf WireMock umstellen** |
| 36 | + Ändere in `customer-client/playwright.config.ts` die `VITE_API_URL` so, dass sie auf den WireMock-Server (`http://localhost:8080`) zeigt. |
36 | 37 |
|
37 | | -### API Evolution |
| 38 | +2. **WireMock-Mappings für die Kundendetailseite anlegen** |
| 39 | + Für die Tests in `customer-detail.spec.ts` werden Kundendaten für `0815` (Max Mustermann) und `007` (James Bond) benötigt. Lege entsprechende Mappings an: |
| 40 | + - `GET /customers/0815` – Max Mustermann mit Rechnungs- und Lieferadresse |
| 41 | + - `GET /customers/007` – James Bond ohne Adressen |
| 42 | + - `PUT /customers/0815/billing-address` – Rechnungsadresse speichern |
| 43 | + - `PUT /customers/0815/delivery-address` – Lieferadresse speichern |
| 44 | + - Adressvalidierung (PLZ-Prüfung) für die entsprechenden Testszenarien |
38 | 45 |
|
39 | | -- [Versioning](https://github.com/openknowledge/workshop-api-design/tree/versioning) |
| 46 | +3. **WireMock-Mapping für das Anlegen neuer Kunden anlegen** |
| 47 | + Für `create-customer.spec.ts` wird ein `POST /customers/` benötigt, der einen neuen Kunden anlegt. |
| 48 | + |
| 49 | +4. **Alle Tests erfolgreich ausführen** |
| 50 | + Starte WireMock per Docker Compose und führe die Tests aus: |
| 51 | + ```bash |
| 52 | + docker compose up wiremock |
| 53 | + cd customer-client |
| 54 | + npm test |
| 55 | + ``` |
| 56 | + Alternativ kann auch `npm test:ui` verwendet werden, um sich die UI-Interaktionen in der Playwright UI anzusehen. |
| 57 | + |
| 58 | +### Tipps |
| 59 | + |
| 60 | +- WireMock-Mappings liegen als JSON-Dateien in `wiremock/mappings/`. WireMock lädt diese Dateien beim Start automatisch. |
| 61 | +- Die bestehenden Mappings (`get-customers.json`, `options-customers.json`) können als Vorlage für neue Mappings genutzt werden. |
| 62 | +- Für das Laden neuer Mappings ohne Neustart kann die WireMock Admin API unter `http://localhost:8080/__admin/mappings` genutzt – oder der WireMock-Container einfach neu gestartet werden. |
| 63 | +- Bei einem `GET`, `POST`- oder `PUT`-Request muss ggf. auch der entsprechende `OPTIONS`-Preflight-Request gemockt werden (CORS). |
| 64 | +- Die Adressvalidierung in `customer-detail.spec.ts` erwartet spezifische Fehlermeldungen – die Responses im Mapping müssen die exakten Fehlertexte aus den Tests zurückliefern. |
0 commit comments