Files
shopPRO/.paul/phases/17-cart-summary-transport-cost-fix/17-01-SUMMARY.md
Jacek eee22ef1c4 fix: poprawny koszt transportu na /koszyk-podsumowanie
Na podstronie /koszyk-podsumowanie transport z flaga delivery_free=1
byl pokazywany zawsze za 0,00 zl, niezaleznie od wartosci koszyka.
Teraz kontroler wylicza transport_cost_effective i free_delivery_applies
uwzgledniajac prog settings.free_delivery, a szablon uzywa tych kluczy.

- Nowa chroniona metoda ShopBasketController::calculateTransportCostForSummary
- Dodane 6 testow jednostkowych (ShopBasketControllerSummaryViewTest)
- Suita: 834 testy / 2318 assertions OK

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 20:50:15 +02:00

6.7 KiB

phase, plan, subsystem, tags, requires, provides, affects, tech-stack, key-files, key-decisions, patterns-established, duration, started, completed
phase plan subsystem tags requires provides affects tech-stack key-files key-decisions patterns-established duration started completed
17-cart-summary-transport-cost-fix 01 checkout
basket
transport
free-delivery
summary-view
php74
phase provides
13-basket-logging-ttl-token createOrderSubmitToken + TTL i logging w basketSave
Poprawna kalkulacja kosztu transportu na /koszyk-podsumowanie
Testowalna chroniona metoda ShopBasketController::calculateTransportCostForSummary
przyszle zmiany checkoutu
kupony
promocje darmowej dostawy
added patterns
Logika prezentacyjna kosztu transportu trzymana w kontrolerze, nie w szablonie
Chronione metody pomocnicze testowane przez ReflectionMethod
created modified
tests/Unit/front/Controllers/ShopBasketControllerSummaryViewTest.php
autoload/front/Controllers/ShopBasketController.php
templates/shop-basket/summary-view.php
Kalkulacja kosztu transportu zostaje w warstwie kontrolera (summaryView), nie w TransportRepository — Repository dostarcza dane, kontroler interpretuje je dla konkretnego widoku
Metoda calculateTransportCostForSummary pozostaje protected i jest testowana przez Reflection (public API kontrolera bez zmian)
Szablon summary-view otrzymuje gotowe klucze prezentacyjne (transport_cost_effective, free_delivery_applies) zamiast liczyc progi w locie
~25min 2026-04-20T00:00:00Z 2026-04-20T00:25:00Z

Phase 17 Plan 01: Cart summary transport cost fix — Summary

Na /koszyk-podsumowanie wybrany transport z flaga delivery_free=1 pokazuje teraz rzeczywisty koszt ponizej progu darmowej dostawy i 0,00 zl powyzej progu — zgodnie z logika listy transportow na /koszyk.

Performance

Metric Value
Duration ~25 min
Started 2026-04-20
Completed 2026-04-20
Tasks 4 completed (3 auto + 1 checkpoint)
Files modified 2 modified + 1 created

Acceptance Criteria Results

Criterion Status Notes
AC-1: Transport z delivery_free ponizej progu pokazuje rzeczywisty koszt Pass Test testTransportWithDeliveryFreeBelowThresholdShowsRealCost + manualna weryfikacja
AC-2: Transport z delivery_free powyzej progu pokazuje 0,00 zl Pass Test testTransportWithDeliveryFreeAboveThresholdShowsZero + manualna weryfikacja
AC-3: Transport bez flagi delivery_free zawsze pokazuje koszt Pass Test testTransportWithoutDeliveryFreeAlwaysShowsCost + manualna weryfikacja
AC-4: Suita PHPUnit zielona, nowy test przechodzi Pass 834/834 OK, 2318 assertions (6 nowych testow)

Accomplishments

  • Chroniona metoda ShopBasketController::calculateTransportCostForSummary() enkapsuluje regule progowa darmowej dostawy i jest czysto testowalna.
  • Szablon summary-view.php pozbyty dwoch duplikatow logiki delivery_free == 1 — uzywa teraz gotowych kluczy widokowych.
  • 6 testow jednostkowych pokrywa 3 AC i 3 edge case'y (transport null, prog 0, wartosc koszyka rowna progowi).
  • Pelna suita zgadza sie z docs/MEMORY.md (>800 testow, 821 -> 834 po fazie).

Task Commits

Commit transition-phase jeszcze nie wykonany w tym UNIFY (patrz Deviations).

Task Commit Type Description
Task 1: Calc effective cost w kontrolerze (pending) fix ShopBasketController::summaryView + calculateTransportCostForSummary
Task 2: summary-view.php uzywa nowych kluczy (pending) fix Usuniety odwolanie do transport.delivery_free w bloku podsumowania
Task 3: Nowy test jednostkowy (pending) test ShopBasketControllerSummaryViewTest (6 testow)

Files Created/Modified

File Change Purpose
autoload/front/Controllers/ShopBasketController.php Modified Dodana protected method calculateTransportCostForSummary; summaryView przekazuje transport_cost_effective + free_delivery_applies
templates/shop-basket/summary-view.php Modified Wiersz kosztu transportu i suma koncowa uzywaja nowych kluczy zamiast transport.delivery_free
tests/Unit/front/Controllers/ShopBasketControllerSummaryViewTest.php Created 6 testow jednostkowych dla logiki kalkulacji kosztu

Decisions Made

Decision Rationale Impact
Kalkulacja w kontrolerze, nie w TransportRepository Repository juz ma transportMethodsFront robiace to samo, ale dla listy metod — dla pojedynczego wybranego transportu to decyzja widokowa nalezaca do kontrolera Brak zmiany publicznego API Repository
protected + Reflection do testow Zgodne z istniejacym wzorcem ShopBasketControllerTest (Reflection), nie rozszerza publicznego API Test izolowany od sesji i globali
Boundary na prog > 0 Jesli settings.free_delivery = 0, darmowa dostawa jest wylaczona (brak progu = brak regul) Ochrona przed niezamierzonym zerowaniem kosztu w sklepach bez tej funkcji

Deviations from Plan

Summary

Type Count Impact
Auto-fixed 0
Scope additions 2 2 dodatkowe edge-case testy (boundary rowny prog + prog 0)
Deferred 1 Git commit transition-phase do wykonania w transition-phase lub rece

Total impact: Bez scope creepu; dodatki to defensywne testy edge-case'ow.

Auto-fixed Issues

None.

Scope Additions

1. Test dla wartosci koszyka rownej progowi

  • Found during: Task 3 (test jednostkowy)
  • Issue: Plan AC-2 mowi "powyzej progu", granica rowna progowi nie byla pokryta
  • Fix: Dodany testTransportWithDeliveryFreeAtExactThresholdShowsZero
  • Rationale: Stare transportMethodsFront uzywa >= — utrzymana spojnosc

2. Test dla settings.free_delivery = 0

  • Found during: Task 1 (implementacja)
  • Issue: Sklepy bez ustawionego progu darmowej dostawy nie mogly miec zerowanych transportow; guard na > 0 wart pokrycia testem
  • Fix: Dodany testZeroFreeDeliveryThresholdDisablesFreeDelivery

Deferred Items

  • Transition-phase git commit do uruchomienia w ramach /paul:transition lub recznego commita (spojne z historycznym wzorcem faz 15 i 16).

Issues Encountered

Issue Resolution
test.ps1 nie istnieje w repo (pomimo wzmianki w CLAUDE.md) Uruchomiono phpunit.phar bezposrednio przez C:/xampp/php/php.exe phpunit.phar -c phpunit.xml

Next Phase Readiness

Ready:

  • Logika kosztu transportu w checkoutu spojna miedzy /koszyk i /koszyk-podsumowanie.
  • Pelna suita zielona.

Concerns:

  • Git commit nie wykonany automatycznie — nalezy domknac w transition-phase.
  • CLAUDE.md odwoluje sie do ./test.ps1 ktorego nie ma w repo — do rozwazenia porzadkowo.

Blockers:

  • None.

Phase: 17-cart-summary-transport-cost-fix, Plan: 01 Completed: 2026-04-20