diff --git a/php/src/GildedRose.php b/php/src/GildedRose.php index 2a6b05ea..46da6663 100644 --- a/php/src/GildedRose.php +++ b/php/src/GildedRose.php @@ -14,9 +14,6 @@ final class GildedRose ) { } - /** - * @return void - */ public function updateQuality(): void { foreach ($this->items as $item) { diff --git a/php/src/ItemFactory.php b/php/src/ItemFactory.php index 6a379a8b..017362b5 100644 --- a/php/src/ItemFactory.php +++ b/php/src/ItemFactory.php @@ -4,27 +4,26 @@ declare(strict_types=1); namespace GildedRose; -use GildedRose\Items\Interface\ItemInterface; use GildedRose\Items\AgedBrieItem; use GildedRose\Items\BackstagePassItem; use GildedRose\Items\ConjuredItem; +use GildedRose\Items\Interface\ItemInterface; use GildedRose\Items\NormalItem; use GildedRose\Items\SulfurasItem; + class ItemFactory { public const AGED_BRIE_ITEM = 'Aged Brie'; + public const BACKSTAGE_ITEM = 'Backstage'; + public const SULFURAS_ITEM = 'Sulfuras'; + public const CONJURED_ITEM = 'Conjured'; - /** - * @param Item $item - * - * @return ItemInterface - */ public static function createItem(Item $item): ItemInterface { - return match(true) { + return match (true) { str_contains($item->name, self::AGED_BRIE_ITEM) => new AgedBrieItem(), str_contains($item->name, self::BACKSTAGE_ITEM) => new BackstagePassItem(), str_contains($item->name, self::SULFURAS_ITEM) => new SulfurasItem(), @@ -32,5 +31,4 @@ class ItemFactory default => new NormalItem() }; } - } diff --git a/php/src/Items/Abstract/AbstractItem.php b/php/src/Items/Abstract/AbstractItem.php index 064dad35..bed80807 100644 --- a/php/src/Items/Abstract/AbstractItem.php +++ b/php/src/Items/Abstract/AbstractItem.php @@ -10,28 +10,17 @@ use GildedRose\Items\Interface\ItemInterface; abstract class AbstractItem implements ItemInterface { private const MIN_QUALITY = 0; + private const MAX_QUALITY = 50; - /** - * @param Item $item - * - * @return void - */ abstract public function updateQuality(Item $item): void; - /** - * @param Item $item - * - * @return void - */ public function updateSellIn(Item $item): void { $this->decreaseSellIn($item); } - + /** - * @param Item $item - * * @return integer */ protected function getQualityDecrease(Item $item): int @@ -39,21 +28,13 @@ abstract class AbstractItem implements ItemInterface return $item->sellIn < 0 ? 2 : 1; } - /** - * @param Item $item - * - * @return void - */ protected function decreaseSellIn(Item $item): void { $item->sellIn--; } /** - * @param Item $item * @param integer $amount - * - * @return void */ protected function decreaseQuality(Item $item, int $amount = 1): void { @@ -61,10 +42,7 @@ abstract class AbstractItem implements ItemInterface } /** - * @param Item $item * @param integer $amount - * - * @return void */ protected function increaseQuality(Item $item, int $amount = 1): void { diff --git a/php/src/Items/AgedBrieItem.php b/php/src/Items/AgedBrieItem.php index cca45c52..41114952 100644 --- a/php/src/Items/AgedBrieItem.php +++ b/php/src/Items/AgedBrieItem.php @@ -10,11 +10,6 @@ use GildedRose\Items\Interface\ItemInterface; class AgedBrieItem extends AbstractItem implements ItemInterface { - /** - * @param Item $item - * - * @return void - */ public function updateQuality(Item $item): void { // "Aged Brie" actually increases in Quality the older it gets diff --git a/php/src/Items/BackstagePassItem.php b/php/src/Items/BackstagePassItem.php index a320155c..ee3e4652 100644 --- a/php/src/Items/BackstagePassItem.php +++ b/php/src/Items/BackstagePassItem.php @@ -10,14 +10,9 @@ use GildedRose\Items\Interface\ItemInterface; class BackstagePassItem extends AbstractItem implements ItemInterface { - /** - * @param Item $item - * - * @return void - */ public function updateQuality(Item $item): void { - match(true) { + match (true) { $item->sellIn <= 0 => $this->decreaseQuality($item, $item->quality), $item->sellIn <= 5 => $this->increaseQuality($item, 3), $item->sellIn <= 10 => $this->increaseQuality($item, 2), diff --git a/php/src/Items/ConjuredItem.php b/php/src/Items/ConjuredItem.php index 2847f409..4e5e3e07 100644 --- a/php/src/Items/ConjuredItem.php +++ b/php/src/Items/ConjuredItem.php @@ -10,11 +10,6 @@ use GildedRose\Items\Interface\ItemInterface; class ConjuredItem extends AbstractItem implements ItemInterface { - /** - * @param Item $item - * - * @return void - */ public function updateQuality(Item $item): void { // "Conjured" items degrade in Quality twice as fast as normal items diff --git a/php/src/Items/Interface/ItemInterface.php b/php/src/Items/Interface/ItemInterface.php index 21541a77..de2f568d 100644 --- a/php/src/Items/Interface/ItemInterface.php +++ b/php/src/Items/Interface/ItemInterface.php @@ -8,17 +8,7 @@ use GildedRose\Item; interface ItemInterface { - /** - * @param Item $item - * - * @return void - */ public function updateQuality(Item $item): void; - /** - * @param Item $item - * - * @return void - */ public function updateSellIn(Item $item): void; } diff --git a/php/src/Items/NormalItem.php b/php/src/Items/NormalItem.php index 9d577fd8..8fe34211 100644 --- a/php/src/Items/NormalItem.php +++ b/php/src/Items/NormalItem.php @@ -10,11 +10,6 @@ use GildedRose\Items\Interface\ItemInterface; class NormalItem extends AbstractItem implements ItemInterface { - /** - * @param Item $item - * - * @return void - */ public function updateQuality(Item $item): void { $this->decreaseQuality($item, $this->getQualityDecrease($item)); diff --git a/php/src/Items/SulfurasItem.php b/php/src/Items/SulfurasItem.php index 59eac473..e05f996f 100644 --- a/php/src/Items/SulfurasItem.php +++ b/php/src/Items/SulfurasItem.php @@ -10,11 +10,6 @@ use GildedRose\Items\Interface\ItemInterface; class SulfurasItem extends AbstractItem implements ItemInterface { - /** - * @param Item $item - * - * @return void - */ public function updateQuality(Item $item): void { // Do nothing, Sulfuras never changes in quality diff --git a/php/tests/GildedRoseTest.php b/php/tests/GildedRoseTest.php index 90a259a3..80c456da 100644 --- a/php/tests/GildedRoseTest.php +++ b/php/tests/GildedRoseTest.php @@ -10,31 +10,10 @@ use PHPUnit\Framework\TestCase; class GildedRoseTest extends TestCase { - /** - * @return array - */ - private function getPayloadItems(): array - { - return [ - new Item('+5 Dexterity Vest', 10, 20), - new Item('Aged Brie', 2, 0), - new Item('Elixir of the Mongoose', 5, 7), - new Item('Sulfuras, Hand of Ragnaros', 0, 80), - new Item('Sulfuras, Hand of Ragnaros', -1, 80), - new Item('Backstage passes to a TAFKAL80ETC concert', 15, 20), - new Item('Backstage passes to a TAFKAL80ETC concert', 10, 49), - new Item('Backstage passes to a TAFKAL80ETC concert', 5, 49), - new Item('Conjured Mana Cake', 3, 6), - ]; - } - - /** - * @return void - */ public function testQualityDegradesTwiceWhenSellInNegative(): void { $items = [ - new Item('Normal Item', 0, 12) + new Item('Normal Item', 0, 12), ]; $GildedRose = new GildedRose($items); $GildedRose->updateQuality(); @@ -42,13 +21,10 @@ class GildedRoseTest extends TestCase $this->assertEquals(10, $items[0]->quality); } - /** - * @return void - */ public function testWithQualityNeverNagative(): void { $items = [ - new Item('Normal Item', 9, 0) + new Item('Normal Item', 9, 0), ]; $GildedRose = new GildedRose($items); $GildedRose->updateQuality(); @@ -56,13 +32,10 @@ class GildedRoseTest extends TestCase $this->assertEquals(0, $items[0]->quality); } - /** - * @return void - */ public function testWithQualityNeverGreaterThan50(): void { $items = [ - new Item('Aged Brie', 9, 50) + new Item('Aged Brie', 9, 50), ]; $GildedRose = new GildedRose($items); $GildedRose->updateQuality(); @@ -70,13 +43,10 @@ class GildedRoseTest extends TestCase $this->assertEquals(50, $items[0]->quality); } - /** - * @return void - */ public function testAgedBrieIncreaseQualityWhenOlder(): void { $items = [ - new Item('Aged Brie', 10, 10) + new Item('Aged Brie', 10, 10), ]; $GildedRose = new GildedRose($items); $GildedRose->updateQuality(); @@ -84,13 +54,10 @@ class GildedRoseTest extends TestCase $this->assertEquals(11, $items[0]->quality); } - /** - * @return void - */ public function testAgedBrieIncraseQualityTwiceWhenSellInNagative(): void { $items = [ - new Item('Aged Brie', -1, 10) + new Item('Aged Brie', -1, 10), ]; $GildedRose = new GildedRose($items); $GildedRose->updateQuality(); @@ -98,13 +65,10 @@ class GildedRoseTest extends TestCase $this->assertEquals(12, $items[0]->quality); } - /** - * @return void - */ public function testSulfurasNeverChangeQuality(): void { $items = [ - new Item('Sulfuras', -1, 10) + new Item('Sulfuras', -1, 10), ]; $GildedRose = new GildedRose($items); $GildedRose->updateQuality(); @@ -112,13 +76,10 @@ class GildedRoseTest extends TestCase $this->assertEquals(10, $items[0]->quality); } - /** - * @return void - */ public function testBackstageIncreaseQualityBy2WhenSellInLessThanOrEqual10(): void { $items = [ - new Item('Backstage', 9, 10) + new Item('Backstage', 9, 10), ]; $GildedRose = new GildedRose($items); $GildedRose->updateQuality(); @@ -126,27 +87,21 @@ class GildedRoseTest extends TestCase $this->assertEquals(12, $items[0]->quality); } - /** - * @return void - */ public function testBackstageIncreaseQualityBy3WhenSellInLessThanOrEqual5(): void { $items = [ - new Item('Backstage', 4, 10) + new Item('Backstage', 4, 10), ]; $GildedRose = new GildedRose($items); $GildedRose->updateQuality(); $this->assertEquals(3, $items[0]->sellIn); $this->assertEquals(13, $items[0]->quality); } - - /** - * @return void - */ + public function testBackstageSetQualityZeroWhenSellInLessThanOrEqualZero(): void { $items = [ - new Item('Backstage', 0, 10) + new Item('Backstage', 0, 10), ]; $GildedRose = new GildedRose($items); $GildedRose->updateQuality(); @@ -154,13 +109,10 @@ class GildedRoseTest extends TestCase $this->assertEquals(0, $items[0]->quality); } - /** - * @return void - */ public function testConjuredDegradesQualityTwiceFastAsNormalItem(): void { $items = [ - new Item('Conjured', 10, 10) + new Item('Conjured', 10, 10), ]; $GildedRose = new GildedRose($items); $GildedRose->updateQuality(); @@ -168,16 +120,13 @@ class GildedRoseTest extends TestCase $this->assertEquals(8, $items[0]->quality); } - /** - * @return void - */ public function testUpdateSellInAndQualityWith10Days(): void { $dayTest = 10; $items = $this->getPayloadItems(); $GildedRose = new GildedRose($items); - - for ($i = 1; $i < $dayTest ; $i++) { + + for ($i = 1; $i < $dayTest; $i++) { $GildedRose->updateQuality(); } @@ -202,16 +151,13 @@ class GildedRoseTest extends TestCase $this->assertEquals(0, $items[8]->quality); } - /** - * @return void - */ public function testUpdateSellInAndQualityWith31Days(): void { $dayTest = 31; $items = $this->getPayloadItems(); $GildedRose = new GildedRose($items); - - for ($i = 1; $i < $dayTest ; $i++) { + + for ($i = 1; $i < $dayTest; $i++) { $GildedRose->updateQuality(); } @@ -235,4 +181,19 @@ class GildedRoseTest extends TestCase $this->assertEquals(0, $items[7]->quality); $this->assertEquals(0, $items[8]->quality); } + + private function getPayloadItems(): array + { + return [ + new Item('+5 Dexterity Vest', 10, 20), + new Item('Aged Brie', 2, 0), + new Item('Elixir of the Mongoose', 5, 7), + new Item('Sulfuras, Hand of Ragnaros', 0, 80), + new Item('Sulfuras, Hand of Ragnaros', -1, 80), + new Item('Backstage passes to a TAFKAL80ETC concert', 15, 20), + new Item('Backstage passes to a TAFKAL80ETC concert', 10, 49), + new Item('Backstage passes to a TAFKAL80ETC concert', 5, 49), + new Item('Conjured Mana Cake', 3, 6), + ]; + } }