From 44085d93d05ec3f8e82ef172e67ffe73b8c4eeac Mon Sep 17 00:00:00 2001 From: Kacper Majczak Date: Mon, 12 Sep 2022 12:57:16 +0200 Subject: [PATCH] Add tests --- php/tests/GildedRoseTest.php | 109 +++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) diff --git a/php/tests/GildedRoseTest.php b/php/tests/GildedRoseTest.php index 7dd29849..856dfa27 100644 --- a/php/tests/GildedRoseTest.php +++ b/php/tests/GildedRoseTest.php @@ -17,4 +17,113 @@ class GildedRoseTest extends TestCase $gildedRose->updateQuality(); $this->assertSame('foo', $items[0]->name); } + + public function testQualityDegradesTwiceAsFastWhenSellDateHasPassed(): void + { + //Given + $items = [new Item('foo', 0, 5)]; + $gildedRose = new GildedRose($items); + + //When + $gildedRose->updateQuality(); + + //Then + $this->assertSame(3, $items[0]->quality); + } + + public function testQualityOfItemIsNeverNegative(): void + { + //Given + $items = [new Item('foo', 0, 0)]; + $gildedRose = new GildedRose($items); + + //When + $gildedRose->updateQuality(); + + //Then + $this->assertSame(0, $items[0]->quality); + } + + /** + * @dataProvider itemsThatIncreasesQualityWhenGetsOlder + */ + public function testItemIncreasesQualityWhenGetsOlder( + string $name, + int $sellIn, + int $resultSellIn, + int $quality, + int $resultQuality + ): void { + //Given + $items = [new Item($name, $sellIn, $quality)]; + $gildedRose = new GildedRose($items); + + //When + $gildedRose->updateQuality(); + + //Then + $this->assertSame($resultQuality, $items[0]->quality); + $this->assertSame($resultSellIn, $items[0]->sell_in); + } + + public function itemsThatIncreasesQualityWhenGetsOlder(): array + { + return [ + [ + 'name' => 'Aged Brie', + 'sell_in' => 10, + 'result_sell_in' => 9, + 'quality' => 5, + 'result_quality' => 6 + ], + 'Quality increases by 2 when there are 10 days or less' => [ + 'name' => 'Backstage passes to a TAFKAL80ETC concert', + 'sell_in' => 10, + 'result_sell_in' => 9, + 'quality' => 5, + 'result_quality' => 7 + ], + 'Quality increases by 3 when there are 5 days or less' => [ + 'name' => 'Backstage passes to a TAFKAL80ETC concert', + 'sell_in' => 5, + 'result_sell_in' => 4, + 'quality' => 5, + 'result_quality' => 8 + ], + 'Quality drops to 0 after the concert' => [ + 'name' => 'Backstage passes to a TAFKAL80ETC concert', + 'sell_in' => 0, + 'result_sell_in' => -1, + 'quality' => 5, + 'result_quality' => 0 + ], + ]; + } + + public function testQualityOfItemIsNeverAboveFifty(): void + { + //Given + $items = [new Item('Aged Brie', 5, 50)]; + $gildedRose = new GildedRose($items); + + //When + $gildedRose->updateQuality(); + + //Then + $this->assertSame(50, $items[0]->quality); + } + + public function testItemSulfurasNeverChangeItsProperties(): void + { + //Given + $items = [new Item('Sulfuras, Hand of Ragnaros', 5, 5)]; + $gildedRose = new GildedRose($items); + + //When + $gildedRose->updateQuality(); + + //Then + $this->assertSame(5, $items[0]->quality); + $this->assertSame(5, $items[0]->sell_in); + } }