|
2 | 2 |
|
3 | 3 | Herzlich willkommen zum Workshop API Design. |
4 | 4 |
|
5 | | -## Übungen |
| 5 | +## Übung: Von Playwright-Mocking zu Pact Consumer Tests |
6 | 6 |
|
7 | | -### API Design |
| 7 | +### Ausgangssituation |
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 | +Im Branch `playwright-pact` befinden sich drei Playwright-Testdateien im Verzeichnis `customer-client/test/`: |
12 | 10 |
|
13 | | -### API Testing |
| 11 | +- `customer-list.spec.ts` – Tests für die Kundenliste |
| 12 | +- `customer-detail.spec.ts` – Tests für die Kundendetailansicht inkl. Adressen |
| 13 | +- `create-customer.spec.ts` – Tests für das Anlegen eines neuen Kunden (**bereits auf Pact umgebaut, dient als Referenz**) |
14 | 14 |
|
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) |
| 15 | +Die Tests in `customer-list.spec.ts` und `customer-detail.spec.ts` verwenden aktuell Playwright's eingebautes `page.route()`, um API-Aufrufe direkt im Browser abzufangen und mit statischen Antworten zu mocken. Dieser Ansatz dokumentiert den API-Vertrag nicht maschinenlesbar und kann nicht automatisch gegen den echten Service verifiziert werden. |
17 | 16 |
|
18 | | -### API Security |
| 17 | +Das Hilfsmuster `pact-proxy.ts` stellt zwei Funktionen bereit: |
| 18 | +- `createProvider()` – erstellt einen Pact-Mock-Server mit Consumer- und Providernamen |
| 19 | +- `setupApiProxy(page, mockServerUrl)` – leitet alle API-Aufrufe der Seite transparent an den Pact-Mock-Server weiter |
19 | 20 |
|
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) |
| 21 | +### Aufgabe |
23 | 22 |
|
24 | | -### API Governance |
| 23 | +Baue die Playwright-Tests in `customer-list.spec.ts` und `customer-detail.spec.ts` so um, dass sie statt `page.route()` den Pact-Mock-Server nutzen. Orientiere dich dabei an `create-customer.spec.ts`. |
25 | 24 |
|
26 | | -- [Linting](https://github.com/openknowledge/workshop-api-design/tree/linting) |
| 25 | +Für jeden Test, der API-Aufrufe mockt, gilt folgendes Muster: |
27 | 26 |
|
28 | | -### API Management |
| 27 | +```typescript |
| 28 | +await createProvider() |
| 29 | + .addInteraction({ |
| 30 | + uponReceiving: 'Beschreibung der Anfrage', |
| 31 | + withRequest: { |
| 32 | + method: 'GET', |
| 33 | + path: '/customers/', |
| 34 | + }, |
| 35 | + willRespondWith: { |
| 36 | + status: 200, |
| 37 | + headers: { 'Content-Type': 'application/json' }, |
| 38 | + body: [ /* ... */ ], |
| 39 | + }, |
| 40 | + }) |
| 41 | + .executeTest(async (mockServer) => { |
| 42 | + await setupApiProxy(page, mockServer.url); |
| 43 | + // eigentlicher Test |
| 44 | + }); |
| 45 | +``` |
29 | 46 |
|
30 | | -- [Rate Limiting](https://github.com/openknowledge/workshop-api-design/tree/rate-limiting) |
31 | | -- [Backstage](https://github.com/openknowledge/workshop-api-design/tree/backstage) |
| 47 | +**Hinweise:** |
| 48 | +- Tests, die keinerlei API-Aufrufe machen (z. B. reine UI-Validierungen), müssen nicht umgebaut werden. |
| 49 | +- Wenn ein Test mehrere API-Endpunkte anspricht, können mehrere `.addInteraction()`-Aufrufe verkettet werden. |
| 50 | +- Nach dem Umbau werden die Pact-Dateien automatisch im Verzeichnis `pacts/` erzeugt. Prüfe, ob die erzeugten Pacts den erwarteten Vertrag korrekt abbilden. |
| 51 | +- `beforeEach`-Blöcke mit `page.route()` müssen in die jeweiligen `executeTest`-Callbacks verschoben werden, weil `setupApiProxy` erst innerhalb des Callbacks aufgerufen werden kann. |
32 | 52 |
|
33 | | -### API Operation |
| 53 | +### Ziel |
34 | 54 |
|
35 | | -- [Observability](https://github.com/openknowledge/workshop-api-design/tree/observability) |
| 55 | +Nach dem Umbau laufen alle Tests weiterhin erfolgreich, und im Verzeichnis `pacts/` liegt eine aktualisierte JSON-Datei mit den Consumer-Driven Contracts, die später gegen den echten Customer Service verifiziert werden können. |
36 | 56 |
|
37 | | -### API Evolution |
| 57 | +Der entstandene Contract kann mit dem Provider Test `CustomerServiceTest.java` im Customer Service gegen die echte Implementierung überprüft werden. |
38 | 58 |
|
39 | | -- [Versioning](https://github.com/openknowledge/workshop-api-design/tree/versioning) |
|
0 commit comments