Skip to content

Synthetics: het testproduct en de bestelcheck

Een check op de Freeze AI-VM loopt elk uur de bestelflow van de winkel door: het testproduct openen, in de winkelwagen leggen, de checkout als gast invullen en op "Afrekenen" klikken. Vlak vóór de betaling stopt hij. Faalt een stap, dan komt er een melding op ntfy (freeze-ai-alerts) met een screenshot.

Ontwerp: repo Voorman/watchtower, docs/plans/2026-11-05-freeze-ai-synthetics.md. Todo: .planning/todos/pending/synthetics-testproduct.md.

Het testproduct

  • Slug synthetics-testproduct, naam "Synthetics testproduct", € 1, één variant.
  • Niet gelist (is_listed uit): niet in de shop, zoekresultaten, categorieën, sitemap of productfeed. De pagina /producten/synthetics-testproduct werkt wel, met noindex.
  • Niet verwijderen of activeren in de shop. Zonder dit product meldt de check elk uur een storing.
  • Maken of herstellen (idempotent, veilig op productie):
python manage.py ensure_synthetic_product

Op staging: ssh freeze-staging, dan in /opt/webshop COMPOSE_FILE=docker-compose.staging.yml docker compose exec -T backend python manage.py ensure_synthetic_product.

is_listed werkt voor elk product: uit = alleen bereikbaar via de directe link. In de Django-admin staat het veld bij de productstatus en als filter.

Waarom er nooit een order ontstaat

  1. De check breekt het checkout-verzoek (POST /api/orders/checkout/) in de browser af en controleert alleen wat er verstuurd zou worden.
  2. Vangnet: komt het verzoek toch aan, dan antwoordt de checkout met 422 {"code": "synthetic_product"} zolang het testproduct in de winkelwagen zit, vóór er een order of Mollie-betaling wordt gemaakt (apps/orders/views.py, checkout).

De check zet ook freeze_intern (geen PostHog-events) en blokkeert de herinneringsmail en de nieuwsbrief in de browser. Het testadres is synthetics@freezedesign.nl.

Opruimen

Celery beat cart-purge-stale (taak cart.purge_stale, dagelijks 02:30) verwijdert gastwinkelwagens zonder order die 30 dagen niet zijn bijgewerkt, en daarna de verlopen sessies (clearsessions). Dat ruimt ook de lege winkelwagens van de check op. Winkelwagens van klantaccounts en winkelwagens met een order blijven staan.