Giter VIP home page Giter VIP logo

gwo's Introduction

Zadanie rekrutacyjne

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.

Dodatkowo punktowane zadanie

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 (ang. gross) wszystkich produktów w koszyku poprzez metodę getTotalPriceGross(). Zmodyfikuj także odpowiedź getDataForView() w klasie Order w taki sposób, aby każdy produkt miał podaną stawkę podatku (string, np. 23%) oraz cenę brutto i sumę koszyka brutto (będzie to wymagało również zmiany testu).

Uruchamianie testów

Docker

Do repozytorium dołączona jest konfiguracja PHP w kontenerze Dockera. Po uruchomieniu komendy:

docker-compose up

zostanie pobrany obraz PHP 7.2 oraz uruchomione testy (PHPUnit) i walidacja zgodności kodu z PSR-1 oraz PSR-2 (CodeSniffer).

Manualne

Wymagane jest posiadanie PHP 7.2 oraz Composera. W pierwszej kolejności należy zainstalować paczki Composerowe:

composer install

następnie uruchamiać testy i sniffing:

./vendor/bin/phpunit
./vendor/bin/phpcs -p

gwo's People

Contributors

zaftri avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.