updateQuality(); $this->assertEquals(-1, $items[0]->sellIn); $this->assertEquals(10, $items[0]->quality); } /** * @return void */ public function testWithQualityNeverNagative(): void { $items = [ new Item('Normal Item', 9, 0) ]; $GildedRose = new GildedRose($items); $GildedRose->updateQuality(); $this->assertEquals(8, $items[0]->sellIn); $this->assertEquals(0, $items[0]->quality); } /** * @return void */ public function testWithQualityNeverGreaterThan50(): void { $items = [ new Item('Aged Brie', 9, 50) ]; $GildedRose = new GildedRose($items); $GildedRose->updateQuality(); $this->assertEquals(8, $items[0]->sellIn); $this->assertEquals(50, $items[0]->quality); } /** * @return void */ public function testAgedBrieIncreaseQualityWhenOlder(): void { $items = [ new Item('Aged Brie', 10, 10) ]; $GildedRose = new GildedRose($items); $GildedRose->updateQuality(); $this->assertEquals(9, $items[0]->sellIn); $this->assertEquals(11, $items[0]->quality); } /** * @return void */ public function testAgedBrieIncraseQualityTwiceWhenSellInNagative(): void { $items = [ new Item('Aged Brie', -1, 10) ]; $GildedRose = new GildedRose($items); $GildedRose->updateQuality(); $this->assertEquals(-2, $items[0]->sellIn); $this->assertEquals(12, $items[0]->quality); } /** * @return void */ public function testSulfurasNeverChangeQuality(): void { $items = [ new Item('Sulfuras', -1, 10) ]; $GildedRose = new GildedRose($items); $GildedRose->updateQuality(); $this->assertEquals(-2, $items[0]->sellIn); $this->assertEquals(10, $items[0]->quality); } /** * @return void */ public function testBackstageIncreaseQualityBy2WhenSellInLessThanOrEqual10(): void { $items = [ new Item('Backstage', 9, 10) ]; $GildedRose = new GildedRose($items); $GildedRose->updateQuality(); $this->assertEquals(8, $items[0]->sellIn); $this->assertEquals(12, $items[0]->quality); } /** * @return void */ public function testBackstageIncreaseQualityBy3WhenSellInLessThanOrEqual5(): void { $items = [ 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) ]; $GildedRose = new GildedRose($items); $GildedRose->updateQuality(); $this->assertEquals(-1, $items[0]->sellIn); $this->assertEquals(0, $items[0]->quality); } /** * @return void */ public function testConjuredDegradesQualityTwiceFastAsNormalItem(): void { $items = [ new Item('Conjured', 10, 10) ]; $GildedRose = new GildedRose($items); $GildedRose->updateQuality(); $this->assertEquals(9, $items[0]->sellIn); $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++) { $GildedRose->updateQuality(); } $this->assertEquals(1, $items[0]->sellIn); $this->assertEquals(-7, $items[1]->sellIn); $this->assertEquals(-4, $items[2]->sellIn); $this->assertEquals(-9, $items[3]->sellIn); $this->assertEquals(-10, $items[4]->sellIn); $this->assertEquals(6, $items[5]->sellIn); $this->assertEquals(1, $items[6]->sellIn); $this->assertEquals(-4, $items[7]->sellIn); $this->assertEquals(-6, $items[8]->sellIn); $this->assertEquals(11, $items[0]->quality); $this->assertEquals(16, $items[1]->quality); $this->assertEquals(0, $items[2]->quality); $this->assertEquals(80, $items[3]->quality); $this->assertEquals(80, $items[4]->quality); $this->assertEquals(34, $items[5]->quality); $this->assertEquals(50, $items[6]->quality); $this->assertEquals(0, $items[7]->quality); $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++) { $GildedRose->updateQuality(); } $this->assertEquals(-20, $items[0]->sellIn); $this->assertEquals(-28, $items[1]->sellIn); $this->assertEquals(-25, $items[2]->sellIn); $this->assertEquals(-30, $items[3]->sellIn); $this->assertEquals(-31, $items[4]->sellIn); $this->assertEquals(-15, $items[5]->sellIn); $this->assertEquals(-20, $items[6]->sellIn); $this->assertEquals(-25, $items[7]->sellIn); $this->assertEquals(-27, $items[8]->sellIn); $this->assertEquals(0, $items[0]->quality); $this->assertEquals(50, $items[1]->quality); $this->assertEquals(0, $items[2]->quality); $this->assertEquals(80, $items[3]->quality); $this->assertEquals(80, $items[4]->quality); $this->assertEquals(0, $items[5]->quality); $this->assertEquals(0, $items[6]->quality); $this->assertEquals(0, $items[7]->quality); $this->assertEquals(0, $items[8]->quality); } }