mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 22:41:30 +00:00
100% code coverage through unit tests
This commit is contained in:
parent
8249460e7e
commit
1255acfa93
@ -14,6 +14,11 @@ final class GildedRose
|
||||
) {
|
||||
}
|
||||
|
||||
public function getItems(): array
|
||||
{
|
||||
return $this->items;
|
||||
}
|
||||
|
||||
public function updateQuality(): void
|
||||
{
|
||||
foreach ($this->items as $item) {
|
||||
|
||||
@ -10,11 +10,399 @@ use PHPUnit\Framework\TestCase;
|
||||
|
||||
class GildedRoseTest extends TestCase
|
||||
{
|
||||
public function testFoo(): void
|
||||
{
|
||||
$items = [new Item('foo', 0, 0)];
|
||||
|
||||
/* -- FUNCTION TEMPLATE COPY ME --
|
||||
public function testFoo(): void
|
||||
{
|
||||
echo ("Starting " . __FUNCTION__ . PHP_EOL);
|
||||
$items = [];
|
||||
|
||||
$gildedRose = new GildedRose($items);
|
||||
$gildedRose->updateQuality();
|
||||
$this->assertSame('fixme', $items[0]->name);
|
||||
}
|
||||
|
||||
} // END TestFoo()
|
||||
*/
|
||||
|
||||
public function testSellInValueDegradesOverTime(): void
|
||||
{
|
||||
echo ("Starting " . __FUNCTION__ . PHP_EOL);
|
||||
|
||||
$name = 'Foo';
|
||||
$quality = 10;
|
||||
$sellIn = 10;
|
||||
|
||||
$items = [
|
||||
new Item($name, $sellIn, $quality),
|
||||
];
|
||||
|
||||
$gildedRose = new GildedRose($items);
|
||||
$setItems = $gildedRose->getItems();
|
||||
|
||||
// Make sure the data is the same as we insert
|
||||
$this->assertSame($name, $setItems[0]->name);
|
||||
$this->assertSame($sellIn, $setItems[0]->sellIn);
|
||||
$this->assertSame($quality, $setItems[0]->quality);
|
||||
|
||||
// Update the items
|
||||
$gildedRose->updateQuality();
|
||||
$updatedItems = $gildedRose->getItems();
|
||||
|
||||
$this->assertSame(($sellIn - 1), $updatedItems[0]->sellIn);
|
||||
|
||||
|
||||
} // END testSellInValueDegradesOverTime()
|
||||
|
||||
public function testStdQualityValueDegradesOverTime(): void
|
||||
{
|
||||
echo ("Starting " . __FUNCTION__ . PHP_EOL);
|
||||
|
||||
$name = 'Foo';
|
||||
$quality = 10;
|
||||
$sellIn = 10;
|
||||
|
||||
$items = [
|
||||
new Item($name, $sellIn, $quality),
|
||||
];
|
||||
|
||||
$gildedRose = new GildedRose($items);
|
||||
$setItems = $gildedRose->getItems();
|
||||
|
||||
// Make sure the data is the same as we insert
|
||||
$this->assertSame($name, $setItems[0]->name);
|
||||
$this->assertSame($sellIn, $setItems[0]->sellIn);
|
||||
$this->assertSame($quality, $setItems[0]->quality);
|
||||
|
||||
// Update the items
|
||||
$gildedRose->updateQuality();
|
||||
$updatedItems = $gildedRose->getItems();
|
||||
|
||||
$this->assertSame(($quality - 1), $updatedItems[0]->quality);
|
||||
} // END testStdQualityValueDegradesOverTime()
|
||||
|
||||
public function testAgedBrieQualityIncreaseOverTime(): void
|
||||
{
|
||||
echo ("Starting " . __FUNCTION__ . PHP_EOL);
|
||||
|
||||
$name = "Aged Brie";
|
||||
$sellIn = 10;
|
||||
$quality = 10;
|
||||
|
||||
$items = [
|
||||
new Item($name, $sellIn, $quality),
|
||||
];
|
||||
|
||||
$gildedRose = new GildedRose($items);
|
||||
$setItems = $gildedRose->getItems();
|
||||
$this->assertSame($name, $setItems[0]->name);
|
||||
$this->assertSame($sellIn, $setItems[0]->sellIn);
|
||||
$this->assertSame($quality, $setItems[0]->quality);
|
||||
|
||||
$gildedRose->updateQuality();
|
||||
$updatedItems = $gildedRose->getItems();
|
||||
|
||||
$this->assertSame($name, $updatedItems[0]->name);
|
||||
$this->assertSame(($sellIn - 1), $updatedItems[0]->sellIn);
|
||||
$this->assertSame(($quality + 1), $updatedItems[0]->quality);
|
||||
} // END testAgedBrieQualityIncreaseOverTime()
|
||||
|
||||
public function testAgedBrieQualityIncreasePastSellInButUnderMax(): void
|
||||
{
|
||||
echo ("Starting " . __FUNCTION__ . PHP_EOL);
|
||||
|
||||
$name = "Aged Brie";
|
||||
$sellIn = 10;
|
||||
$quality = 38;
|
||||
|
||||
$items = [
|
||||
new Item($name, $sellIn, $quality),
|
||||
];
|
||||
|
||||
$gildedRose = new GildedRose($items);
|
||||
|
||||
$updatedItems = [];
|
||||
$previousQuality = $quality;
|
||||
|
||||
for($i = 0; $i < $sellIn; $i++)
|
||||
{
|
||||
$gildedRose->updateQuality();
|
||||
$updatedItems = $gildedRose->getItems();
|
||||
$this->assertSame(($previousQuality + 1), $updatedItems[0]->quality);
|
||||
$previousQuality = $updatedItems[0]->quality;
|
||||
}
|
||||
|
||||
$this->assertSame(0, $updatedItems[0]->sellIn);
|
||||
|
||||
// Past the sell-in date
|
||||
for($i = 0; $i < 5; $i++)
|
||||
{
|
||||
$gildedRose->updateQuality();
|
||||
$updatedItems = $gildedRose->getItems();
|
||||
$this->assertLessThanOrEqual( $updatedItems[0]->quality, $previousQuality);
|
||||
$this->assertLessThanOrEqual(50, $updatedItems[0]->quality);
|
||||
$previousQuality = $updatedItems[0]->quality;
|
||||
}
|
||||
|
||||
|
||||
|
||||
} // END testAgedBrieQualityIncreaseOverTime()
|
||||
|
||||
public function testItemQualityNeverOver50(): void
|
||||
{
|
||||
echo ("Starting " . __FUNCTION__ . PHP_EOL);
|
||||
|
||||
$name = "Aged Brie";
|
||||
$sellIn = 10;
|
||||
$quality = 45;
|
||||
|
||||
$items = [
|
||||
new Item($name, $sellIn, $quality),
|
||||
];
|
||||
|
||||
$gildedRose = new GildedRose($items);
|
||||
$gildedRose->updateQuality();
|
||||
|
||||
for($i = 0; $i < $sellIn; $i++)
|
||||
{
|
||||
$updatedItems = $gildedRose->getItems();
|
||||
$this->assertSame($name, $updatedItems[0]->name);
|
||||
$this->assertLessThanOrEqual(50, $updatedItems[0]->quality);
|
||||
$gildedRose->updateQuality();
|
||||
}
|
||||
|
||||
|
||||
} // END testItemQualityNeverOver50()
|
||||
|
||||
public function testStdItemQualityNeverNegative(): void
|
||||
{
|
||||
echo ("Starting " . __FUNCTION__ . PHP_EOL);
|
||||
|
||||
$name = 'foo';
|
||||
$sellIn = 10;
|
||||
$quality = 5;
|
||||
|
||||
$items = [
|
||||
new Item($name, $sellIn, $quality),
|
||||
];
|
||||
|
||||
$gildedRose = new GildedRose($items);
|
||||
$gildedRose->updateQuality();
|
||||
|
||||
for($i = 0; $i < $sellIn; $i++)
|
||||
{
|
||||
$updatedItems = $gildedRose->getItems();
|
||||
$this->assertSame($name, $updatedItems[0]->name);
|
||||
$this->assertGreaterThanOrEqual(0, $updatedItems[0]->quality);
|
||||
$gildedRose->updateQuality();
|
||||
}
|
||||
|
||||
} // END testStdItemQualityNeverNegative()
|
||||
|
||||
public function testStdItemQualityDegradesTwiceAsFastPastSellIn(): void
|
||||
{
|
||||
echo ("Starting " . __FUNCTION__ . PHP_EOL);
|
||||
|
||||
$name = 'foo';
|
||||
$sellIn = 10;
|
||||
$quality = 20;
|
||||
|
||||
$items = [
|
||||
new Item($name, $sellIn, $quality),
|
||||
];
|
||||
|
||||
$gildedRose = new GildedRose($items);
|
||||
|
||||
$previousQuality = $quality;
|
||||
|
||||
$updatedItems = [];
|
||||
for($i = 0; $i < $sellIn; $i++)
|
||||
{
|
||||
$gildedRose->updateQuality();
|
||||
$updatedItems = $gildedRose->getItems();
|
||||
$this->assertSame(($previousQuality - 1), $updatedItems[0]->quality);
|
||||
$previousQuality = $updatedItems[0]->quality;
|
||||
}
|
||||
|
||||
$this->assertSame(0, $updatedItems[0]->sellIn);
|
||||
|
||||
for($i = 0; $i < 3; $i++)
|
||||
{
|
||||
$gildedRose->updateQuality();
|
||||
$updatedItems = $gildedRose->getItems();
|
||||
$this->assertSame(($previousQuality - 2), $updatedItems[0]->quality);
|
||||
$previousQuality = $updatedItems[0]->quality;
|
||||
}
|
||||
|
||||
} // END testStdItemQualityDegradesTwiceAsFastPastSellIn()
|
||||
|
||||
public function testSulfurasValuesNeverChange(): void
|
||||
{
|
||||
echo ("Starting " . __FUNCTION__ . PHP_EOL);
|
||||
|
||||
$name = 'Sulfuras, Hand of Ragnaros';
|
||||
$sellIn = 10;
|
||||
$quality = 80;
|
||||
|
||||
$items = [
|
||||
new Item($name, $sellIn, $quality),
|
||||
];
|
||||
|
||||
$gildedRose = new GildedRose($items);
|
||||
|
||||
$setItems = $gildedRose->getItems();
|
||||
|
||||
// Make sure the data is the same as we insert
|
||||
$this->assertSame($name, $setItems[0]->name);
|
||||
$this->assertSame($sellIn, $setItems[0]->sellIn);
|
||||
$this->assertSame($quality, $setItems[0]->quality);
|
||||
|
||||
$gildedRose->updateQuality();
|
||||
|
||||
$updatedItems = $gildedRose->getItems();
|
||||
$this->assertSame($name, $updatedItems[0]->name);
|
||||
$this->assertSame($sellIn, $updatedItems[0]->sellIn);
|
||||
$this->assertSame($quality, $updatedItems[0]->quality);
|
||||
|
||||
} // END testSulfurasValuesNeverChange()
|
||||
|
||||
public function testBackstagePassQualityIncreaseStandard(): void
|
||||
{
|
||||
echo ("Starting " . __FUNCTION__ . PHP_EOL);
|
||||
|
||||
$name = 'Backstage passes to a TAFKAL80ETC concert';
|
||||
$sellIn = 15;
|
||||
$quality = 10;
|
||||
|
||||
$items = [
|
||||
new Item($name, $sellIn, $quality),
|
||||
];
|
||||
|
||||
$gildedRose = new GildedRose($items);
|
||||
|
||||
$setItems = $gildedRose->getItems();
|
||||
|
||||
// Make sure the data is the same as we insert
|
||||
$this->assertSame($name, $setItems[0]->name);
|
||||
$this->assertSame($sellIn, $setItems[0]->sellIn);
|
||||
$this->assertSame($quality, $setItems[0]->quality);
|
||||
|
||||
$gildedRose->updateQuality();
|
||||
|
||||
$updatedItems = $gildedRose->getItems();
|
||||
$this->assertSame($name, $updatedItems[0]->name);
|
||||
$this->assertSame(($sellIn -1), $updatedItems[0]->sellIn);
|
||||
$this->assertSame(($quality + 1), $updatedItems[0]->quality);
|
||||
} // END testBackstagePassQualityIncreaseStandard()
|
||||
|
||||
public function testBackstagePassQualityIncreaseBy2Within10Days(): void
|
||||
{
|
||||
echo ("Starting " . __FUNCTION__ . PHP_EOL);
|
||||
|
||||
$name = 'Backstage passes to a TAFKAL80ETC concert';
|
||||
$sellIn = 11;
|
||||
$quality = 10;
|
||||
|
||||
$items = [
|
||||
new Item($name, $sellIn, $quality),
|
||||
];
|
||||
|
||||
$gildedRose = new GildedRose($items);
|
||||
|
||||
$setItems = $gildedRose->getItems();
|
||||
|
||||
// 11 days before
|
||||
$this->assertSame($name, $setItems[0]->name);
|
||||
$this->assertSame($sellIn, $setItems[0]->sellIn);
|
||||
$this->assertSame($quality, $setItems[0]->quality);
|
||||
|
||||
$gildedRose->updateQuality();
|
||||
|
||||
//10 days before
|
||||
$updatedItems = $gildedRose->getItems();
|
||||
$this->assertSame($name, $updatedItems[0]->name);
|
||||
$this->assertSame(($sellIn -1), $updatedItems[0]->sellIn);
|
||||
$this->assertSame(($quality + 1), $updatedItems[0]->quality);
|
||||
|
||||
$gildedRose->updateQuality();
|
||||
|
||||
// 9 days before
|
||||
$updatedItems = $gildedRose->getItems();
|
||||
$this->assertSame($name, $updatedItems[0]->name);
|
||||
$this->assertSame(($sellIn -2), $updatedItems[0]->sellIn);
|
||||
$this->assertSame(($quality + 3), $updatedItems[0]->quality);
|
||||
} // END testBackstagePassQualityIncreaseBy2Within10Days()
|
||||
|
||||
public function testBackstagePassQualityIncreaseBy3Within5Days(): void
|
||||
{
|
||||
echo ("Starting " . __FUNCTION__ . PHP_EOL);
|
||||
|
||||
$name = 'Backstage passes to a TAFKAL80ETC concert';
|
||||
$sellIn = 6;
|
||||
$quality = 10;
|
||||
|
||||
$items = [
|
||||
new Item($name, $sellIn, $quality),
|
||||
];
|
||||
|
||||
$gildedRose = new GildedRose($items);
|
||||
|
||||
$setItems = $gildedRose->getItems();
|
||||
|
||||
// 6 days before
|
||||
$this->assertSame($name, $setItems[0]->name);
|
||||
$this->assertSame($sellIn, $setItems[0]->sellIn);
|
||||
$this->assertSame($quality, $setItems[0]->quality);
|
||||
$gildedRose->updateQuality();
|
||||
|
||||
//5 days before
|
||||
$updatedItems = $gildedRose->getItems();
|
||||
$this->assertSame($name, $updatedItems[0]->name);
|
||||
$this->assertSame(($sellIn -1), $updatedItems[0]->sellIn);
|
||||
$this->assertSame(($quality + 2), $updatedItems[0]->quality);
|
||||
|
||||
$gildedRose->updateQuality();
|
||||
|
||||
// 4 days before
|
||||
$updatedItems = $gildedRose->getItems();
|
||||
$this->assertSame($name, $updatedItems[0]->name);
|
||||
$this->assertSame(($sellIn -2), $updatedItems[0]->sellIn);
|
||||
$this->assertSame(($quality + 5), $updatedItems[0]->quality);
|
||||
} // END testBackstagePassQualityIncreaseBy3Within5Days()
|
||||
|
||||
public function testBackstagePassQualityIs0AfterConcert(): void
|
||||
{
|
||||
echo ("Starting " . __FUNCTION__ . PHP_EOL);
|
||||
|
||||
$name = 'Backstage passes to a TAFKAL80ETC concert';
|
||||
$sellIn = 1;
|
||||
$quality = 10;
|
||||
|
||||
$items = [
|
||||
new Item($name, $sellIn, $quality),
|
||||
];
|
||||
|
||||
$gildedRose = new GildedRose($items);
|
||||
|
||||
$setItems = $gildedRose->getItems();
|
||||
|
||||
// 1 days before
|
||||
$this->assertSame($name, $setItems[0]->name);
|
||||
$this->assertSame($sellIn, $setItems[0]->sellIn);
|
||||
$this->assertSame($quality, $setItems[0]->quality);
|
||||
$gildedRose->updateQuality();
|
||||
|
||||
//0 days before
|
||||
$updatedItems = $gildedRose->getItems();
|
||||
$this->assertSame($name, $updatedItems[0]->name);
|
||||
$this->assertSame(($sellIn -1), $updatedItems[0]->sellIn);
|
||||
$this->assertSame(($quality + 3), $updatedItems[0]->quality);
|
||||
|
||||
$gildedRose->updateQuality();
|
||||
|
||||
// 1 days after
|
||||
$updatedItems = $gildedRose->getItems();
|
||||
$this->assertSame($name, $updatedItems[0]->name);
|
||||
$this->assertSame(($sellIn -2), $updatedItems[0]->sellIn);
|
||||
$this->assertSame(0, $updatedItems[0]->quality);
|
||||
} // END testBackstagePassQualityIs0AfterConcert()
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user