Stwórz obiektowy mechanizm (model) koszyka zakupowego w oparciu o testy (TDD).
Twoim zadaniem jest napisanie klas: Product (produkt), Item (pozycja w
koszyku), Cart (koszyk) oraz Order (zamówienie). Dodatkowe wytyczne:
- każdy produkt ma swoją nazwę i cenę,
- podczas dodawania produktu do koszyka użytkownik podaje liczbę zamawianych sztuk (ang. quantity),
- produkty mają zdefiniowaną minimalną liczbę sztuk, jaką można zamówić; domyślnie dla każdego produktu powinna ona wynosić 1; jeżeli użytkownik wybierze mniejszą ilość, należy zwrócić błąd (wyjątek),
- koszyk powinien operować na groszach – żeby uniknąć błędów operacji zmiennoprzecinkowych,
- kod powinien być zgodny z "Czystą Architekturą" (ang. Clean Architecture), w szczególności zwracając uwagę na zarządzanie wyjątkami, poprawne nazewnictwo metod i SRP.
W katalogu tests/ znajdują się testy, które określają strukturę wyżej
wymienionych klas. Przygotuj implementację mechanizmu w taki sposób, aby testy
się powiodły. Swoje rozwiązanie umieść w folderze src/.
Aby uprościć zadanie, nie przejmuj się przechowywaniem koszyka w sesji ani w bazie danych. Nie musisz także pisać kontrolerów, ani widoków. Zadanie polega wyłącznie na stworzeniu modelu.
Pilnuj formatowania zgodnego z PSR-1 i PSR-2. Pomoże Ci w tym Code Sniffer,
który jest skonfigurowany w pliku phpcs.xml.dist.
Do stworzonego mechanizmu dodaj testy i ich implementację. Warunki zadania:
Przy każdym produkcie wprowadź stawkę podatku (ang. tax) w wysokości 0%, 5%, 8% lub 23%, co umożliwi wyliczenie wartości brutto tego produktu.
Dodatkowo dodaj możliwość pobrania wartości brutto wszystkich produktów w
koszyku poprzez metodę getTotalPriceBrutto() i zmodyfikuj odpowiedź
getDataForView() w klasie Order w taki sposób, aby każdy produkt miał
podaną stawkę podatku (string) oraz cenę brutto i sumę koszyka brutto (będzie
to wymagało również zmiany testu).
Do repozytorium dołączona jest konfiguracja PHP w kontenerze Dockera. Po uruchomieniu komendy:
docker-compose upzostanie pobrany obraz PHP 7.2 oraz uruchomione testy (PHPUnit) i walidacja zgodności kodu z PSR-1 oraz PSR-2 (CodeSniffer).
Wymagane jest posiadanie PHP 7.2 oraz Composera. W pierwszej kolejności należy zainstalować paczki Composerowe:
composer installnastępnie uruchamiać testy i sniffing:
./vendor/bin/phpunit
./vendor/bin/phpcs -p