Awesome Testing

Markdown document

Plan implementacji

Lekcja 14: Zadanie 3 - rozwiązanie

Historical artifacts may name disposable training credentials and environments. Do not reuse credentials, target course systems, or execute archived prompts without authorization.

Implementation plan: testy endpointów Ollama

Cel

Dodać automatyczne testy dla endpointów Ollama i zapisać finalny stan jako checkpoint l12:

  • GET /api/v1/ollama/chat/tools/definitions,
  • POST /api/v1/ollama/generate,
  • POST /api/v1/ollama/chat,
  • POST /api/v1/ollama/chat/tools.

Założenia po eksploracji

  • Endpointy POST zwracają text/event-stream.
  • Endpoint definitions zwraca zwykły JSON.
  • Testy POST powinny wysyłać Accept: text/event-stream.
  • Kontrolowany mock Ollama ma stabilne prompty i odpowiedzi.
  • Brakujący model w mocku zwraca 200, więc nie dodajemy testów 404 mimo dokumentacji OpenAPI.
  • /chat/tools wymaga niepustego tools.

Plan implementacji

  1. Dodać typy w types/ollama.ts.
  2. Dodać klienta OllamaClient w httpclients/ollama-client.ts.
  3. Dodać parser SSE w support/sse.ts.
  4. Dodać dane testowe mocka w support/ollama-test-data.ts.
  5. Dodać wspólną asercję expectEventStreamResponse.
  6. Dodać test chat-tools-definitions.get.spec.ts.
  7. Dodać test generate.post.spec.ts.
  8. Dodać test chat.post.spec.ts.
  9. Dodać test chat-tools.post.spec.ts.
  10. Uruchomić nowe testy.
  11. Uruchomić pełny suite.
  12. Zaktualizować api-test-plan.md.
  13. Skopiować gotowy stan do l12.

Planowane asercje

GET /api/v1/ollama/chat/tools/definitions

  • 200: zwraca get_product_snapshot i list_products.
  • 401: brak JWT zwraca Unauthorized.

POST /api/v1/ollama/generate

  • 200: stream zawiera wiele eventów, model zgadza się z requestem, jest terminalny done=true, a tokeny składają się w oczekiwaną odpowiedź.
  • 400: pusty model i prompt zwracają walidację.
  • 401: brak JWT zwraca Unauthorized.

POST /api/v1/ollama/chat

  • 200: stream zawiera odpowiedź asystenta złożoną z tokenów.
  • 400: pusta historia messages jest odrzucona.
  • 401: brak JWT zwraca Unauthorized.

POST /api/v1/ollama/chat/tools

  • 200: stream zawiera tool call, wynik backendowego toola i finalną odpowiedź asystenta.
  • 400: puste tools jest odrzucone.
  • 401: brak JWT zwraca Unauthorized.

Walidacja

Najpierw nowe testy:

npm test -- tests/api/ollama/chat-tools-definitions.get.spec.ts tests/api/ollama/generate.post.spec.ts tests/api/ollama/chat.post.spec.ts tests/api/ollama/chat-tools.post.spec.ts

Potem pełny suite:

npm test

Wynik

Plan został wykonany.

Ostateczne wyniki:

  • nowe testy Ollama: 11 passed,
  • pełny suite l12: 59 passed.