Examples for presentation.

This commit is contained in:
giedrius
2024-11-19 13:57:03 +02:00
commit 41f2b5eec1
23 changed files with 3351 additions and 0 deletions

58
tests/Unit/BadTest.php Normal file
View File

@@ -0,0 +1,58 @@
<?php
namespace Tests\Unit;
use Example\Bad\APIService;
use Example\Bad\CalculatorService;
use Example\Bad\Controller;
use Example\Bad\Repository;
use Example\Bad\Product;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\Psr7\Response;
use PDO;
use PDOStatement;
use PHPUnit\Framework\TestCase;
class BadTest extends TestCase
{
public function testBad()
{
$guzzleClient = $this->createMock(Client::class);
// make call of controller from the guzzle client
$guzzleClient->method('request')->willReturn(
new Response(200, [],
'[
{ "sku" : "x1234", "amount": "10" },
{ "sku" : "x1235", "amount": "20" },
{ "sku" : "x4567", "amount": "5" }
]'
)
);
$pdo = $this->createMock(PDO::class);
$pdoResult = $this->createMock(PDOStatement::class);
$pdoResult->method('fetchAll')->willReturn([
(new Product())->setSku("x1234")->setPrice(10),
(new Product())->setSku("x1235")->setPrice(20),
(new Product())->setSku("x4567")->setPrice(30),
]);
$pdo->method('query')->willReturn($pdoResult);
$dbService = new Repository($pdo);
$apiService = new ApiService($dbService, $guzzleClient);
$calculatorService = new CalculatorService(0.20, $apiService);
$controller = new Controller($calculatorService);
$products = $controller->getProducts(new Request('get', '/api', [], 'cosmetics'));
$expectedProducts = [
(new Product())->setSku("x1234")->setPrice(12)->setQuantity(10),
(new Product())->setSku("x1235")->setPrice(24)->setQuantity(20),
(new Product())->setSku("x4567")->setPrice(36)->setQuantity(5),
];
$this->assertEquals($expectedProducts, $products);
}
}

63
tests/Unit/GoodTest.php Normal file
View File

@@ -0,0 +1,63 @@
<?php
namespace Tests\Unit;
use Example\Good\ApiClient;
use Example\Good\Controller;
use Example\Good\Product;
use Example\Good\Repository;
use Example\Good\VATCalculator;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\Psr7\Response;
use PDO;
use PDOStatement;
use PHPUnit\Framework\TestCase;
class GoodTest extends TestCase
{
public function testGood()
{
$guzzleClient = $this->createMock(Client::class);
// make call of controller from the guzzle client
$guzzleClient->method('request')->willReturnCallback(
function () {
return new Response(200, [],
'[
{ "sku" : "x1234", "amount": "10" },
{ "sku" : "x1235", "amount": "20" },
{ "sku" : "x4567", "amount": "5" }
]'
);
}
);
$pdo = $this->createMock(PDO::class);
$pdoResult = $this->createMock(PDOStatement::class);
$pdoResult->method('fetchAll')->willReturn([
(new Product())->setSku("x1234")->setPrice(10),
(new Product())->setSku("x1235")->setPrice(20),
(new Product())->setSku("x4567")->setPrice(30),
]);
$pdo->method('query')->willReturn($pdoResult);
$dbService = new Repository($pdo);
$apiService = new ApiClient($guzzleClient);
$vatCalculator = new VATCalculator(20);
$controller = new Controller($apiService, $dbService, $vatCalculator);
$products = $controller->getProducts(new Request('get', '/api', [], 'cosmetics'));
$expectedProducts = [
(new Product())->setSku("x1234")->setPrice(12)->setQuantity(10),
(new Product())->setSku("x1235")->setPrice(24)->setQuantity(20),
(new Product())->setSku("x4567")->setPrice(36)->setQuantity(5),
];
$this->assertEquals($expectedProducts, $products);
}
}

View File

@@ -0,0 +1,63 @@
<?php
namespace Tests\Unit;
use Example\VeryGood\ApiClient;
use Example\VeryGood\Controller;
use Example\VeryGood\Product;
use Example\VeryGood\Repository;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\Psr7\Response;
use PDO;
use PDOStatement;
use PHPUnit\Framework\TestCase;
class VeryGoodTest extends TestCase
{
public function testVeryGood2()
{
$guzzleClient = $this->createMock(Client::class);
// make call of controller from the guzzle client
$guzzleClient->method('request')->willReturnCallback(
function () {
return new Response(200, [],
'[
{ "sku" : "x1234", "amount": "10" },
{ "sku" : "x1235", "amount": "20" },
{ "sku" : "x4567", "amount": "5" }
]'
);
}
);
$pdo = $this->createMock(PDO::class);
$pdoResult = $this->createMock(PDOStatement::class);
$pdoResult->method('fetchAll')->willReturn([
(new Product())->setSku("x1234")->setPrice(10),
(new Product())->setSku("x1235")->setPrice(20),
(new Product())->setSku("x4567")->setPrice(30),
]);
$pdo->method('query')->willReturn($pdoResult);
$dbService = new Repository($pdo);
$apiService = new ApiClient($guzzleClient);
$controller = new Controller($apiService, $dbService, 20);
$products = $controller->getProducts(new Request('get', '/api', [], 'cosmetics'));
$expectedProducts = [
(new Product())->setSku("x1234")->setPrice(12)->setQuantity(10),
(new Product())->setSku("x1235")->setPrice(24)->setQuantity(20),
(new Product())->setSku("x4567")->setPrice(36)->setQuantity(5),
];
$this->assertEquals($expectedProducts, $products);
}
}