From 9fdc9ab29f2236c7b1af8cecce6ffd27e4c9fbd8 Mon Sep 17 00:00:00 2001 From: Sam Burns Date: Wed, 24 Jan 2024 15:14:06 +0000 Subject: [PATCH] To prepare to move business logic out of god object antipattern, provide domain objects and factory pattern --- php/src/GildedRoseItem.php | 10 +++ php/src/GildedRoseItem/BackstagePassItem.php | 19 ++++++ php/src/GildedRoseItem/BrieItem.php | 19 ++++++ php/src/GildedRoseItem/DefaultItem.php | 17 ++++++ php/src/GildedRoseItem/SulfurasItem.php | 19 ++++++ php/src/GildedRoseItemFactory.php | 27 ++++++++ ...re => default-quality-degradation.feature} | 0 php/tests/phpunit/ExampleTest.php | 18 ------ .../phpunit/GildedRoseItemFactoryTest.php | 61 +++++++++++++++++++ 9 files changed, 172 insertions(+), 18 deletions(-) create mode 100644 php/src/GildedRoseItem.php create mode 100644 php/src/GildedRoseItem/BackstagePassItem.php create mode 100644 php/src/GildedRoseItem/BrieItem.php create mode 100644 php/src/GildedRoseItem/DefaultItem.php create mode 100644 php/src/GildedRoseItem/SulfurasItem.php create mode 100644 php/src/GildedRoseItemFactory.php rename php/tests/behat/feature_files/{default-quality-degradation copy 2.feature => default-quality-degradation.feature} (100%) delete mode 100644 php/tests/phpunit/ExampleTest.php create mode 100644 php/tests/phpunit/GildedRoseItemFactoryTest.php diff --git a/php/src/GildedRoseItem.php b/php/src/GildedRoseItem.php new file mode 100644 index 00000000..64e5df2b --- /dev/null +++ b/php/src/GildedRoseItem.php @@ -0,0 +1,10 @@ +name) { + case BrieItem::NAME: + return new BrieItem($item); + case BackstagePassItem::NAME: + return new BackstagePassItem($item); + case SulfurasItem::NAME: + return new SulfurasItem($item); + default: + return new DefaultItem($item); + } + } +} diff --git a/php/tests/behat/feature_files/default-quality-degradation copy 2.feature b/php/tests/behat/feature_files/default-quality-degradation.feature similarity index 100% rename from php/tests/behat/feature_files/default-quality-degradation copy 2.feature rename to php/tests/behat/feature_files/default-quality-degradation.feature diff --git a/php/tests/phpunit/ExampleTest.php b/php/tests/phpunit/ExampleTest.php deleted file mode 100644 index ea7b98a0..00000000 --- a/php/tests/phpunit/ExampleTest.php +++ /dev/null @@ -1,18 +0,0 @@ -assertTrue(true); - } -} diff --git a/php/tests/phpunit/GildedRoseItemFactoryTest.php b/php/tests/phpunit/GildedRoseItemFactoryTest.php new file mode 100644 index 00000000..66237fdb --- /dev/null +++ b/php/tests/phpunit/GildedRoseItemFactoryTest.php @@ -0,0 +1,61 @@ +factory = new GildedRoseItemFactory(); + } + + public function testCreatingDefaultItem(): void + { + $item = new Item('foo', 0, 0); + $gildedRoseItem = $this->factory->createGildedRoseItem($item); + + $this->assertInstanceOf(GildedRoseItem::class, $gildedRoseItem); + $this->assertInstanceOf(DefaultItem::class, $gildedRoseItem); + } + + public function testCreatingBrieItem(): void + { + $item = new Item('Aged Brie', 0, 0); + $gildedRoseItem = $this->factory->createGildedRoseItem($item); + + $this->assertInstanceOf(GildedRoseItem::class, $gildedRoseItem); + $this->assertInstanceOf(BrieItem::class, $gildedRoseItem); + } + + public function testCreatingBackstagePassItem(): void + { + $item = new Item('Backstage passes to a TAFKAL80ETC concert', 0, 0); + $gildedRoseItem = $this->factory->createGildedRoseItem($item); + + $this->assertInstanceOf(GildedRoseItem::class, $gildedRoseItem); + $this->assertInstanceOf(BackstagePassItem::class, $gildedRoseItem); + } + + public function testCreatingSulfuraItem(): void + { + $item = new Item('Sulfuras, Hand of Ragnaros', 0, 0); + $gildedRoseItem = $this->factory->createGildedRoseItem($item); + + $this->assertInstanceOf(GildedRoseItem::class, $gildedRoseItem); + $this->assertInstanceOf(SulfurasItem::class, $gildedRoseItem); + } +}