PHP izazov refaktorizacije koda

###TL;DR
Ako se nekome da zezati i malo provježbati svoje vještine, evo repo pa bacite pogled na readme radi pravila i cijele priče oko vježbe, da ne objašnjavam ja previše.


Naletio sam na PHP izazov koji će biti pogotovo zanimljiv onima koji tek počinju s automatiziranim testovima generalno a posebice u PHP-u. U izazovu se koristi Kahlan framework za testiranje, ništa što treba posebno učiti. Samo znaj da ga pokrećeš naravno s vendor/bin/kahlan i to je sve. Test spec je fakat lagan za čitanje.

###Uvod
Dobiješ gotov produkcijski kod koji je napisan božesačuvajproceduralno, naravno jedna klasa s jednom metodom i proceduralno je sve zbijeno u tu metodu.
Dobiješ i test spec, naravno produkcijski kod radi super sa testovima, odnosno svi testovi stvarno vraćaju zeleno.

###Zadatak
Tvoj zadatak je da refaktoriziraš kod da bude čitljiv i što više objektno-orijentiran, odnosno da ga možeš maintainati i nakon pola godine kad se vratiš na njega, za razliku od kako je početno napisan. Naravno, testovi su tu da potvrde da si kod uspješno refaktorizirao.

###Nakon što završiš
Nakon što završiš refaktorizaciju i svi testovi vraćaju zeleno, moraš otići u test spec i odkomentirati jedan set testova koji su cijelo vrijeme bili zakomentirani i potruditi se da implementiraš novi feature kako bi testovi opet prošli.

Ako se nekome da raditi, evo repo pa bacite pogledaj na readme da ne objašnjavam ja previše.

Ukoliko netko želi pogledati moje rješenje - klik ovdje.

Ako treba nekome pomoć, nabacite komentar.

@leffe tagiram te ako ti se da zezat malo, evo fine zabave. :]

Ovako setupirani zadaci su bas dobra vjezba za junior developere, ali po mogucnosti uz code review na kraju drugog para ociju. Nije dosta da testovi prolaze; prolaze i za “božesačuvajproceduralno” napisan kod. :wink:

Speaking of code review, ovako na brzinski prelet, imas nehendlani edge case - ako dođe item kojem je sell date danas. Tick bi trebao provjeriti stanje prije nego procesira date/quality, a ne nakon - cini kod robusnijim.

Yep, skužio sam prilikom rješavanja da u testovima fali nekoliko edge-caseova, pa sam onda išao tjerati testove do zelenog tako da mogu reć da sam kompletiro zadatak.
Svejedno, dobra vježba.

:+1:
Definitivno.