diff --git a/Creational/AbstractFactory/CsvWriter.php b/Creational/AbstractFactory/CsvWriter.php new file mode 100644 index 0000000..5ca665a --- /dev/null +++ b/Creational/AbstractFactory/CsvWriter.php @@ -0,0 +1,8 @@ +price = $price; - } - - public function calculatePrice(): int - { - return $this->price; - } -} diff --git a/Creational/AbstractFactory/JsonWriter.php b/Creational/AbstractFactory/JsonWriter.php new file mode 100644 index 0000000..ed85ebd --- /dev/null +++ b/Creational/AbstractFactory/JsonWriter.php @@ -0,0 +1,8 @@ +productPrice = $productPrice; - $this->shippingCosts = $shippingCosts; - } - - public function calculatePrice(): int - { - return $this->productPrice + $this->shippingCosts; - } -} diff --git a/Creational/AbstractFactory/Tests/AbstractFactoryTest.php b/Creational/AbstractFactory/Tests/AbstractFactoryTest.php index 890eae4..6e1e984 100644 --- a/Creational/AbstractFactory/Tests/AbstractFactoryTest.php +++ b/Creational/AbstractFactory/Tests/AbstractFactoryTest.php @@ -2,42 +2,31 @@ namespace DesignPatterns\Creational\AbstractFactory\Tests; -use DesignPatterns\Creational\AbstractFactory\DigitalProduct; -use DesignPatterns\Creational\AbstractFactory\ProductFactory; -use DesignPatterns\Creational\AbstractFactory\ShippableProduct; +use DesignPatterns\Creational\AbstractFactory\CsvWriter; +use DesignPatterns\Creational\AbstractFactory\JsonWriter; +use DesignPatterns\Creational\AbstractFactory\UnixWriterFactory; +use DesignPatterns\Creational\AbstractFactory\WinWriterFactory; +use DesignPatterns\Creational\AbstractFactory\WriterFactory; use PHPUnit\Framework\TestCase; class AbstractFactoryTest extends TestCase { - public function testCanCreateDigitalProduct() + public function provideFactory() { - $factory = new ProductFactory(); - $product = $factory->createDigitalProduct(150); - - $this->assertInstanceOf(DigitalProduct::class, $product); + return [ + [new UnixWriterFactory()], + [new WinWriterFactory()] + ]; } - public function testCanCreateShippableProduct() + /** + * @dataProvider provideFactory + * + * @param WriterFactory $writerFactory + */ + public function testCanCreateCsvWriterOnUnix(WriterFactory $writerFactory) { - $factory = new ProductFactory(); - $product = $factory->createShippableProduct(150); - - $this->assertInstanceOf(ShippableProduct::class, $product); - } - - public function testCanCalculatePriceForDigitalProduct() - { - $factory = new ProductFactory(); - $product = $factory->createDigitalProduct(150); - - $this->assertEquals(150, $product->calculatePrice()); - } - - public function testCanCalculatePriceForShippableProduct() - { - $factory = new ProductFactory(); - $product = $factory->createShippableProduct(150); - - $this->assertEquals(200, $product->calculatePrice()); + $this->assertInstanceOf(JsonWriter::class, $writerFactory->createJsonWriter()); + $this->assertInstanceOf(CsvWriter::class, $writerFactory->createCsvWriter()); } } diff --git a/Creational/AbstractFactory/UnixCsvWriter.php b/Creational/AbstractFactory/UnixCsvWriter.php new file mode 100644 index 0000000..4f81d77 --- /dev/null +++ b/Creational/AbstractFactory/UnixCsvWriter.php @@ -0,0 +1,11 @@ +