Skip to content

Commit 11f3add

Browse files
committed
test: Add Pact mock server
1 parent 09863a3 commit 11f3add

14 files changed

Lines changed: 1997 additions & 229 deletions

File tree

.github/workflows/build.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ jobs:
3939
run: npm run test
4040
working-directory: customer-client
4141

42+
- name: Upload pact files
43+
uses: actions/upload-artifact@v4
44+
with:
45+
name: pact-files
46+
path: pacts/
47+
4248
- name: Upload Playwright report
4349
uses: actions/upload-artifact@v4
4450
if: failure()
@@ -47,6 +53,7 @@ jobs:
4753
path: customer-client/playwright-report/
4854

4955
build:
56+
needs: build-client
5057
runs-on: ubuntu-latest
5158
steps:
5259
- name: Checkout
@@ -59,6 +66,12 @@ jobs:
5966
distribution: 'temurin'
6067
cache: maven
6168

69+
- name: Download pact files
70+
uses: actions/download-artifact@v4
71+
with:
72+
name: pact-files
73+
path: pacts/
74+
6275
- name: Set up Node.js
6376
uses: actions/setup-node@v4
6477
with:

README.md

Lines changed: 43 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,25 +15,55 @@ Herzlich willkommen zum Workshop API Design.
1515
- [Pact](https://github.com/openknowledge/workshop-api-design/tree/pact-mock-server)
1616
- [Pact Pipeline](https://github.com/openknowledge/workshop-api-design/tree/pact)
1717

18-
### API Security
18+
## Übung: Von Playwright-Mocking zu Pact Consumer Tests
1919

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+
### Ausgangssituation
2321

24-
### API Governance
22+
Im Branch `playwright-pact` befinden sich drei Playwright-Testdateien im Verzeichnis `customer-client/test/`:
2523

26-
- [Linting](https://github.com/openknowledge/workshop-api-design/tree/linting)
24+
- `customer-list.spec.ts` – Tests für die Kundenliste
25+
- `customer-detail.spec.ts` – Tests für die Kundendetailansicht inkl. Adressen
26+
- `create-customer.spec.ts` – Tests für das Anlegen eines neuen Kunden (**bereits auf Pact umgebaut, dient als Referenz**)
2727

28-
### API Management
28+
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.
2929

30-
- [Rate Limiting](https://github.com/openknowledge/workshop-api-design/tree/rate-limiting)
31-
- [Backstage](https://github.com/openknowledge/workshop-api-design/tree/backstage)
30+
Das Hilfsmuster `pact-proxy.ts` stellt zwei Funktionen bereit:
31+
- `createProvider()` – erstellt einen Pact-Mock-Server mit Consumer- und Providernamen
32+
- `setupApiProxy(page, mockServerUrl)` – leitet alle API-Aufrufe der Seite transparent an den Pact-Mock-Server weiter
3233

33-
### API Operation
34+
### Aufgabe
3435

35-
- [Observability](https://github.com/openknowledge/workshop-api-design/tree/observability)
36+
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`.
3637

37-
### API Evolution
38+
Für jeden Test, der API-Aufrufe mockt, gilt folgendes Muster:
39+
40+
```typescript
41+
await createProvider()
42+
.addInteraction({
43+
uponReceiving: 'Beschreibung der Anfrage',
44+
withRequest: {
45+
method: 'GET',
46+
path: '/customers/',
47+
},
48+
willRespondWith: {
49+
status: 200,
50+
headers: { 'Content-Type': 'application/json' },
51+
body: [ /* ... */ ],
52+
},
53+
})
54+
.executeTest(async (mockServer) => {
55+
await setupApiProxy(page, mockServer.url);
56+
// eigentlicher Test
57+
});
58+
```
59+
60+
**Hinweise:**
61+
- Tests, die keinerlei API-Aufrufe machen (z. B. reine UI-Validierungen), müssen nicht umgebaut werden.
62+
- Wenn ein Test mehrere API-Endpunkte anspricht, können mehrere `.addInteraction()`-Aufrufe verkettet werden.
63+
- Nach dem Umbau werden die Pact-Dateien automatisch im Verzeichnis `pacts/` erzeugt. Prüfe, ob die erzeugten Pacts den erwarteten Vertrag korrekt abbilden.
64+
- `beforeEach`-Blöcke mit `page.route()` müssen in die jeweiligen `executeTest`-Callbacks verschoben werden, weil `setupApiProxy` erst innerhalb des Callbacks aufgerufen werden kann.
65+
66+
### Ziel
67+
68+
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.
3869

39-
- [Versioning](https://github.com/openknowledge/workshop-api-design/tree/versioning)

0 commit comments

Comments
 (0)