From d5cb0f304cfb7d0ca35aabc9fdfa21d06950e288 Mon Sep 17 00:00:00 2001 From: ErickSkrauch Date: Tue, 18 Jun 2019 01:19:07 +0300 Subject: [PATCH] Add tests for emails renderer api client and Yii2 wrapper component --- api/codeception.dist.yml | 1 - .../components/EmailsRenderer/Component.php | 5 +- .../components/EmailsRenderer/ApiTest.php | 58 +++++++++++++++++++ .../EmailsRenderer/ComponentTest.php | 53 +++++++++++++++++ 4 files changed, 113 insertions(+), 4 deletions(-) create mode 100644 common/tests/unit/components/EmailsRenderer/ApiTest.php create mode 100644 common/tests/unit/components/EmailsRenderer/ComponentTest.php diff --git a/api/codeception.dist.yml b/api/codeception.dist.yml index 527e806..4f785ce 100644 --- a/api/codeception.dist.yml +++ b/api/codeception.dist.yml @@ -20,7 +20,6 @@ coverage: - config/* - runtime/* - tests/* - - web/* - codeception.dist.yml - codeception.yml c3url: 'http://localhost/api/web/index.php' diff --git a/common/components/EmailsRenderer/Component.php b/common/components/EmailsRenderer/Component.php index 8adc39f..ceffa55 100644 --- a/common/components/EmailsRenderer/Component.php +++ b/common/components/EmailsRenderer/Component.php @@ -8,7 +8,6 @@ use common\emails\RendererInterface; use Yii; use yii\base\InvalidConfigException; use yii\helpers\ArrayHelper; -use yii\helpers\FileHelper; class Component extends \yii\base\Component implements RendererInterface { @@ -63,7 +62,7 @@ class Component extends \yii\base\Component implements RendererInterface { return $this->getApi()->getTemplate($request); } - private function getApi(): Api { + protected function getApi(): Api { if ($this->api === null) { $this->api = new Api($this->serviceUrl); } @@ -72,7 +71,7 @@ class Component extends \yii\base\Component implements RendererInterface { } private function buildBasePath(): string { - return FileHelper::normalizePath($this->baseDomain . '/' . $this->basePath, '/'); + return trim($this->baseDomain, '/') . '/' . trim($this->basePath, '/'); } } diff --git a/common/tests/unit/components/EmailsRenderer/ApiTest.php b/common/tests/unit/components/EmailsRenderer/ApiTest.php new file mode 100644 index 0000000..a5d439d --- /dev/null +++ b/common/tests/unit/components/EmailsRenderer/ApiTest.php @@ -0,0 +1,58 @@ +mockHandler = new MockHandler(); + $handlerStack = HandlerStack::create($this->mockHandler); + $this->history = []; + $handlerStack->push(Middleware::history($this->history), 'history'); + $client = new Client([ + 'handler' => $handlerStack, + 'base_uri' => 'http://emails-renderer', + ]); + $this->api = new Api('http://emails-renderer'); + $this->api->setClient($client); + } + + public function testGetTemplate() { + $this->mockHandler->append(new Response(200, [], 'mock-response')); + + $request = new TemplateRequest('mock-name', 'mock-locale', ['find-me' => 'please']); + $this->assertSame('mock-response', $this->api->getTemplate($request)); + + /** @var \Psr\Http\Message\RequestInterface $request */ + ['request' => $request] = $this->history[0]; + $this->assertSame('http://emails-renderer/templates/mock-locale/mock-name?find-me=please', (string)$request->getUri()); + } + +} diff --git a/common/tests/unit/components/EmailsRenderer/ComponentTest.php b/common/tests/unit/components/EmailsRenderer/ComponentTest.php new file mode 100644 index 0000000..ea95708 --- /dev/null +++ b/common/tests/unit/components/EmailsRenderer/ComponentTest.php @@ -0,0 +1,53 @@ +api = $this->createMock(Api::class); + $componentParams = [ + 'api' => $this->api, + 'serviceUrl' => 'http://emails-renderer', + 'basePath' => '/images/emails-templates', + ]; + $this->component = new class($componentParams) extends Component { + public $api; + + protected function getApi(): Api { + return $this->api; + } + }; + } + + public function testRender() { + $expectedRequest = new TemplateRequest('mock-name', 'mock-locale', [ + 'find-me' => 'please', + 'assetsHost' => 'http://localhost/images/emails-templates', + ]); + + $this->api->expects($this->once())->method('getTemplate')->with($expectedRequest)->willReturn('mock-template'); + + $result = $this->component->render('mock-name', 'mock-locale', ['find-me' => 'please']); + $this->assertSame('mock-template', $result); + } + +}