Awesome Testing

Markdown document

Podsumowanie sesji Codex

Lekcja 16: CRUD produktów i użytkowników

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

Podsumowanie sesji Codex

Zakres sesji

Sesja dotyczyła uzupełnienia testów CRUD produktów i użytkowników. Punktem wyjścia był projekt z działającą infrastrukturą admina, osobnym stagingiem https://aitesters.byst.re oraz istniejącymi testami odczytu produktów i użytkowników na https://awesome.byst.re.

Celem było rozsądne rozdzielenie odpowiedzialności między istniejące testy nie-adminowe i nowe testy administracyjne, a następnie pokrycie brakujących operacji tworzenia, odczytu, aktualizacji i usuwania bez modyfikowania danych seedowanych.

Prompty użyte w Codex

Sesję rozpoczęła prośba o kompleksowe pokrycie produktów i użytkowników oraz o samodzielne dobranie właściwej struktury plików:

Pracuję w folderze L13, czyli na najnowszej lekcji i odpowiadaj mi po angielsku,
bo ja mówię po polsku, więc odpowiadaj mi po angielsku. Chciałbym, żebyśmy mieli
już tak super pokryte testy dotyczące tworzenia produktów i dotyczące tworzenia,
usuwania, edycji, getowania użytkowników. Czyli mamy już jakieś testy na
użytkowników, mamy też jakieś testy na admina, bo zrobiliśmy przed chwilą
fixture'a, więc zrób mi osobne pliki z testami na tworzenie produktów, edycję
produktów, usuwanie produktów, getowanie produktów, chociaż to możemy już mieć,
bo klienci mogą to robić, więc podziel to jakoś mądrze. I chciałbym, żebyśmy też
mieli pokryte endpointy związane z userami, czyli getowanie userów, usuwanie.
Zastanów się, gdzie te testy powinny trafić i po prostu pracuj, aż to będzie
pokryte. Upewnij się, że testy przechodzą.

Co sprawdził Codex przed implementacją?

Codex przeczytał aktualny api-test-plan.md, api-docs.json, konfigurację Playwright, klientów HTTP, typy DTO, generatory, fixture'y oraz istniejące testy produktów i użytkowników. Baseline potwierdził, że 65 istniejących testów przechodzi.

Przegląd pokrycia wykazał, że nie trzeba dublować operacji, które już miały testy:

  • tworzenie użytkownika było pokryte przez POST /api/v1/users/signup,
  • lista i szczegóły użytkowników były pokryte przez GET /api/v1/users i GET /api/v1/users/{username},
  • lista i szczegóły produktów były pokryte przez GET /api/v1/products i GET /api/v1/products/{id},
  • tworzenie produktu było już testowane na stagingu admina.

Brakowało czterech operacji zapisu: aktualizacji i usuwania produktu oraz aktualizacji i usuwania użytkownika. Przed implementacją Codex sprawdził je przez curl na stagingu, używając wyłącznie wygenerowanych rekordów i usuwając je po eksploracji.

Eksploracja potwierdziła:

  • PUT /api/v1/products/{id} zwraca 200 dla admina, 400 dla błędnych pól, 401 bez JWT, 403 dla klienta i 404 dla nieistniejącego produktu,
  • aktualizacja produktu dopuszcza puste description i category, chociaż te pola są wymagane przy tworzeniu produktu,
  • DELETE /api/v1/products/{id} zwraca 204, a jego odpowiedź 404 ma puste body i nie zawiera Content-Type,
  • PUT /api/v1/users/{username} pozwala użytkownikowi edytować własny profil i adminowi edytować innego użytkownika,
  • edycja innego użytkownika przez klienta zwraca 403, a nieistniejąca nazwa użytkownika zwraca 404,
  • błędny email i zbyt krótkie imię lub nazwisko zwracają 400, mimo że OpenAPI nie deklaruje odpowiedzi 400 dla tej operacji,
  • DELETE /api/v1/users/{username} jest operacją adminową i zwraca odpowiednio 204, 401, 403 lub 404.

Co zaimplementował Codex?

Powstał osobny plik specyfikacji dla każdej brakującej operacji:

  • tests/api/admin/products/id.put.spec.ts,
  • tests/api/admin/products/id.delete.spec.ts,
  • tests/api/admin/users/username.put.spec.ts,
  • tests/api/admin/users/username.delete.spec.ts.

Test aktualizacji produktu pokrywa statusy 200, 400, 401, 403 i 404. Test usuwania produktu pokrywa 204, 401, 403 i 404. Aktualizacja użytkownika zawiera oba dozwolone warianty 200 — właściciela i admina — oraz 400, 401, 403 i 404. Usuwanie użytkownika obejmuje adminowe 204 oraz 401, 403 i 404.

Klient produktów otrzymał metody aktualizacji oraz jawne warianty bez autoryzacji dla aktualizacji i usuwania. Klient użytkowników otrzymał analogiczne metody dla edycji i usuwania. Dodano także typy requestów aktualizacji, odpowiedzi walidacyjnych oraz generator poprawnych danych do edycji profilu.

Nowy fixture disposableProduct tworzy unikalny produkt przed testem i usuwa go po teście. Fixture disposableStagingUser zapewnia analogiczny cykl życia użytkownika. Cleanup akceptuje 404 tylko wtedy, gdy właściwy test usuwania wcześniej poprawnie usunął ten sam wygenerowany rekord.

Wszystkie nowe testy zachowują kolejność grup według kodów odpowiedzi, inicjalizują klientów HTTP w beforeEach i stosują sekcje given, when, then.

Jakie korekty zostały zlecone po implementacji?

Przed zakończeniem właściwej części implementacyjnej użytkownik nie zlecił dodatkowych korekt. Codex samodzielnie utrzymał istniejące testy tworzenia i odczytu w ich dotychczasowych katalogach, zamiast tworzyć duplikaty pod ścieżką admina.

Co wyszło w review?

Review potwierdziło, że testy modyfikujące dane działają wyłącznie na wygenerowanych produktach i kontach. Żaden test nie usuwa ani nie edytuje danych seedowanych. Scenariusze właściciela, admina, braku JWT i niewłaściwej roli są odseparowane, a dynamiczne identyfikatory i znaczniki czasu są sprawdzane strukturalnie.

Do api-test-plan.md zapisano statusy, stabilne pola odpowiedzi, różnice między OpenAPI a live API, strategię cleanupu, listę dodanych plików oraz wyniki walidacji. Końcowy git diff --check nie wykazał błędów formatowania białych znaków.

Wynik testów

W trakcie sesji uzyskano następujące wyniki:

  • baseline przed implementacją: 65 testów zaliczonych,
  • cztery nowe specyfikacje CRUD: 19 testów zaliczonych,
  • pełny suite po implementacji: 84 testy zaliczone,
  • git diff --check: bez błędów.

Finalny efekt sesji

Produkty mają pokryte tworzenie, listę, szczegóły, aktualizację i usuwanie. Użytkownicy mają pokryte tworzenie konta, listę, szczegóły, edycję własnego profilu, edycję przez admina oraz usuwanie przez admina. Brakujące operacje administracyjne są rozdzielone na osobne pliki, używają izolowanych fixture'ów i odtwarzają zweryfikowane zachowanie live API dla głównych ścieżek pozytywnych, walidacyjnych, autoryzacyjnych i not found.