mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 06:21:29 +00:00
To allow new domain to replace god object antipattern, make business logic work in gilded rose item classes
This commit is contained in:
parent
9fdc9ab29f
commit
c1b9f465d3
@ -15,5 +15,22 @@ class BackstagePassItem implements GildedRoseItem
|
|||||||
|
|
||||||
public function ageByOneDay(): void
|
public function ageByOneDay(): void
|
||||||
{
|
{
|
||||||
|
$this->item->sellIn -= 1;
|
||||||
|
|
||||||
|
if ($this->item->quality < 50) {
|
||||||
|
$this->item->quality += 1;
|
||||||
|
|
||||||
|
if ($this->item->sellIn <= 10 && $this->item->quality < 50) {
|
||||||
|
$this->item->quality += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->item->sellIn <= 5 && $this->item->quality < 50) {
|
||||||
|
$this->item->quality += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->item->sellIn < 0) {
|
||||||
|
$this->item->quality = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,5 +15,10 @@ class BrieItem implements GildedRoseItem
|
|||||||
|
|
||||||
public function ageByOneDay(): void
|
public function ageByOneDay(): void
|
||||||
{
|
{
|
||||||
|
$this->item->sellIn -= 1;
|
||||||
|
|
||||||
|
if ($this->item->quality < 50) {
|
||||||
|
$this->item->quality += 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,5 +13,10 @@ class DefaultItem implements GildedRoseItem
|
|||||||
|
|
||||||
public function ageByOneDay(): void
|
public function ageByOneDay(): void
|
||||||
{
|
{
|
||||||
|
$this->item->sellIn -= 1;
|
||||||
|
|
||||||
|
if ($this->item->quality >= 1) {
|
||||||
|
$this->item->quality -= 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
51
php/tests/phpunit/GildedRoseItem/BackstagePassItemTest.php
Normal file
51
php/tests/phpunit/GildedRoseItem/BackstagePassItemTest.php
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace PhpUnitTests\GildedRoseItem;
|
||||||
|
|
||||||
|
use ApprovalTests\Approvals;
|
||||||
|
use GildedRose\GildedRoseItem;
|
||||||
|
use GildedRose\GildedRoseItem\BackstagePassItem;
|
||||||
|
use GildedRose\GildedRoseItemFactory;
|
||||||
|
use GildedRose\Item;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
class BackstagePassItemTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testQualityIncreases(): void
|
||||||
|
{
|
||||||
|
$item = new Item(BackstagePassItem::NAME, 20, 20);
|
||||||
|
$gildedRoseItem = new BackstagePassItem($item);
|
||||||
|
$gildedRoseItem->ageByOneDay();
|
||||||
|
|
||||||
|
$this->assertEquals(21, $item->quality);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testQualityIncreasesFasterUnder10Days(): void
|
||||||
|
{
|
||||||
|
$item = new Item(BackstagePassItem::NAME, 10, 20);
|
||||||
|
$gildedRoseItem = new BackstagePassItem($item);
|
||||||
|
$gildedRoseItem->ageByOneDay();
|
||||||
|
|
||||||
|
$this->assertEquals(22, $item->quality);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testQualityIncreasesEvenFasterUnder5Days(): void
|
||||||
|
{
|
||||||
|
$item = new Item(BackstagePassItem::NAME, 5, 20);
|
||||||
|
$gildedRoseItem = new BackstagePassItem($item);
|
||||||
|
$gildedRoseItem->ageByOneDay();
|
||||||
|
|
||||||
|
$this->assertEquals(23, $item->quality);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testQualityIsZeroAfterConcert(): void
|
||||||
|
{
|
||||||
|
$item = new Item(BackstagePassItem::NAME, 0, 20);
|
||||||
|
$gildedRoseItem = new BackstagePassItem($item);
|
||||||
|
$gildedRoseItem->ageByOneDay();
|
||||||
|
|
||||||
|
$this->assertEquals(0, $item->quality);
|
||||||
|
}
|
||||||
|
}
|
||||||
33
php/tests/phpunit/GildedRoseItem/BrieItemTest.php
Normal file
33
php/tests/phpunit/GildedRoseItem/BrieItemTest.php
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace PhpUnitTests\GildedRoseItem;
|
||||||
|
|
||||||
|
use ApprovalTests\Approvals;
|
||||||
|
use GildedRose\GildedRoseItem;
|
||||||
|
use GildedRose\GildedRoseItem\BrieItem;
|
||||||
|
use GildedRose\GildedRoseItemFactory;
|
||||||
|
use GildedRose\Item;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
class BrieItemTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testQualityIncreases(): void
|
||||||
|
{
|
||||||
|
$item = new Item(BrieItem::NAME, 20, 20);
|
||||||
|
$gildedRoseItem = new BrieItem($item);
|
||||||
|
$gildedRoseItem->ageByOneDay();
|
||||||
|
|
||||||
|
$this->assertEquals(21, $item->quality);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testQualityCantGoOver50(): void
|
||||||
|
{
|
||||||
|
$item = new Item(BrieItem::NAME, 20, 50);
|
||||||
|
$gildedRoseItem = new BrieItem($item);
|
||||||
|
$gildedRoseItem->ageByOneDay();
|
||||||
|
|
||||||
|
$this->assertEquals(50, $item->quality);
|
||||||
|
}
|
||||||
|
}
|
||||||
34
php/tests/phpunit/GildedRoseItem/DefaultItemTest.php
Normal file
34
php/tests/phpunit/GildedRoseItem/DefaultItemTest.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace PhpUnitTests\GildedRoseItem;
|
||||||
|
|
||||||
|
use ApprovalTests\Approvals;
|
||||||
|
use GildedRose\GildedRoseItem;
|
||||||
|
use GildedRose\GildedRoseItem\DefaultItem;
|
||||||
|
use GildedRose\GildedRoseItemFactory;
|
||||||
|
use GildedRose\Item;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
class DefaultItemTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testNormalQualityReduction(): void
|
||||||
|
{
|
||||||
|
$item = new Item('foo', 20, 20);
|
||||||
|
$gildedRoseItem = new DefaultItem($item);
|
||||||
|
$gildedRoseItem->ageByOneDay();
|
||||||
|
|
||||||
|
$this->assertEquals(19, $item->quality);
|
||||||
|
$this->assertEquals(19, $item->sellIn);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testQualityCantBeNegative(): void
|
||||||
|
{
|
||||||
|
$item = new Item('foo', 20, 0);
|
||||||
|
$gildedRoseItem = new DefaultItem($item);
|
||||||
|
$gildedRoseItem->ageByOneDay();
|
||||||
|
|
||||||
|
$this->assertEquals(0, $item->quality);
|
||||||
|
}
|
||||||
|
}
|
||||||
25
php/tests/phpunit/GildedRoseItem/SulfurasItemTest.php
Normal file
25
php/tests/phpunit/GildedRoseItem/SulfurasItemTest.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace PhpUnitTests\GildedRoseItem;
|
||||||
|
|
||||||
|
use ApprovalTests\Approvals;
|
||||||
|
use GildedRose\GildedRoseItem;
|
||||||
|
use GildedRose\GildedRoseItem\SulfurasItem;
|
||||||
|
use GildedRose\GildedRoseItemFactory;
|
||||||
|
use GildedRose\Item;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
class SulfurasItemTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testTimelessness(): void
|
||||||
|
{
|
||||||
|
$item = new Item(SulfurasItem::NAME, 20, 20);
|
||||||
|
$gildedRoseItem = new SulfurasItem($item);
|
||||||
|
$gildedRoseItem->ageByOneDay();
|
||||||
|
|
||||||
|
$this->assertEquals(20, $item->quality);
|
||||||
|
$this->assertEquals(20, $item->sellIn);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user