Skip to content

Commit

Permalink
Merge pull request #6 from fabiothiroki/adapter
Browse files Browse the repository at this point in the history
Add adapter
  • Loading branch information
fabiothiroki committed Nov 2, 2021
2 parents 7c2cbb7 + 1c52987 commit 1234576
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 0 deletions.
10 changes: 10 additions & 0 deletions app/structural/adapter/EmailSenderAdapter.php
@@ -0,0 +1,10 @@
<?php

declare(strict_types=1);

namespace app\structural\adapter;

interface EmailSenderAdapter
{
public function sendEmail(string $recipient, string $content): void;
}
22 changes: 22 additions & 0 deletions app/structural/adapter/ThirdPartyEmailClient.php
@@ -0,0 +1,22 @@
<?php

declare(strict_types=1);

namespace app\structural\adapter;

class ThirdPartyEmailClient
{
public function __construct(
private string $apiKey,
private string $region,
) {
}

public function sendEmail(
string $recipient,
string $content,
): void {
echo sprintf("Using apiKey %s and region %s", $this->apiKey, $this->region);
echo sprintf("Sending email to %s and content %s", $recipient, $content);
}
}
17 changes: 17 additions & 0 deletions app/structural/adapter/ThirdPartyEmailSenderAdapter.php
@@ -0,0 +1,17 @@
<?php

declare(strict_types=1);

namespace app\structural\adapter;

final class ThirdPartyEmailSenderAdapter implements EmailSenderAdapter
{
public function __construct(private ThirdPartyEmailClient $emailClient)
{
}

public function sendEmail(string $recipient, string $content): void
{
$this->emailClient->sendEmail($recipient, $content);
}
}
3 changes: 3 additions & 0 deletions app/structural/adapter/docs/diagrams.md
@@ -0,0 +1,3 @@
[![](https://mermaid.ink/img/eyJjb2RlIjoic2VxdWVuY2VEaWFncmFtXG4gICAgU2lnblVwU2VydmljZS0tPj5UaGlyZFBhcnR5RW1haWxDbGllbnQ6IEkgd2FudCB0byBzZW5kIGFuIGVtYWlsIVxuICAgIFRoaXJkUGFydHlFbWFpbENsaWVudC0tPj5TaWduVXBTZXJ2aWNlOiBDb29sLCBnaXZlIG1lIGZpcnN0IGFuIGFwaUtleSBhbmQgYSByZWdpb24hXG4gICAgU2lnblVwU2VydmljZS0tPj5UaGlyZFBhcnR5RW1haWxDbGllbnQ6IEJ1dCBJIGp1c3QgaGF2ZSB0aGUgcmVjaXBpZW50IGFuZCBjb250ZW50ID0vXG4gICAgICAgICAgICAiLCJtZXJtYWlkIjp7InRoZW1lIjoiZGVmYXVsdCJ9LCJ1cGRhdGVFZGl0b3IiOmZhbHNlLCJhdXRvU3luYyI6dHJ1ZSwidXBkYXRlRGlhZ3JhbSI6ZmFsc2V9)](https://mermaid-js.github.io/mermaid-live-editor/edit/#eyJjb2RlIjoic2VxdWVuY2VEaWFncmFtXG4gICAgU2lnblVwU2VydmljZS0tPj5UaGlyZFBhcnR5RW1haWxDbGllbnQ6IEkgd2FudCB0byBzZW5kIGFuIGVtYWlsIVxuICAgIFRoaXJkUGFydHlFbWFpbENsaWVudC0tPj5TaWduVXBTZXJ2aWNlOiBDb29sLCBnaXZlIG1lIGZpcnN0IGFuIGFwaUtleSBhbmQgYSByZWdpb24hXG4gICAgU2lnblVwU2VydmljZS0tPj5UaGlyZFBhcnR5RW1haWxDbGllbnQ6IEJ1dCBJIGp1c3QgaGF2ZSB0aGUgcmVjaXBpZW50IGFuZCBjb250ZW50ID0vXG4gICAgICAgICAgICAiLCJtZXJtYWlkIjoie1xuICBcInRoZW1lXCI6IFwiZGVmYXVsdFwiXG59IiwidXBkYXRlRWRpdG9yIjpmYWxzZSwiYXV0b1N5bmMiOnRydWUsInVwZGF0ZURpYWdyYW0iOmZhbHNlfQ)

[![](https://mermaid.ink/img/eyJjb2RlIjoic2VxdWVuY2VEaWFncmFtXG4gICAgU2lnblVwU2VydmljZS0tPj5UaGlyZFBhcnR5RW1haWxTZW5kZXJBZGFwdGVyOiBJIHdhbnQgdG8gc2VuZCBhbiBlbWFpbCFcbiAgICBUaGlyZFBhcnR5RW1haWxTZW5kZXJBZGFwdGVyLS0-PlNpZ25VcFNlcnZpY2U6IEkganVzdCBuZWVkIGEgcmVjaWNwaWVudCBhbmQgdGhlIGNvbnRlbnQhXG4gICAgU2lnblVwU2VydmljZS0tPj5UaGlyZFBhcnR5RW1haWxTZW5kZXJBZGFwdGVyOiBPaCwgdGhhdCdzIGV4YWN0bHkgd2hhdCBJIGhhdmUhXG4gICAgVGhpcmRQYXJ0eUVtYWlsU2VuZGVyQWRhcHRlci0tPj5UaGlyZFBhcnR5RW1haWxDbGllbnQ6IFBsZWFzZSBzZW5kIHRoaXMgZW1haWxcbiAgICAgICAgICAgICIsIm1lcm1haWQiOnsidGhlbWUiOiJkZWZhdWx0In0sInVwZGF0ZUVkaXRvciI6ZmFsc2UsImF1dG9TeW5jIjp0cnVlLCJ1cGRhdGVEaWFncmFtIjpmYWxzZX0)](https://mermaid-js.github.io/mermaid-live-editor/edit/#eyJjb2RlIjoic2VxdWVuY2VEaWFncmFtXG4gICAgU2lnblVwU2VydmljZS0tPj5UaGlyZFBhcnR5RW1haWxTZW5kZXJBZGFwdGVyOiBJIHdhbnQgdG8gc2VuZCBhbiBlbWFpbCFcbiAgICBUaGlyZFBhcnR5RW1haWxTZW5kZXJBZGFwdGVyLS0-PlNpZ25VcFNlcnZpY2U6IEkganVzdCBuZWVkIGEgcmVjaWNwaWVudCBhbmQgdGhlIGNvbnRlbnQhXG4gICAgU2lnblVwU2VydmljZS0tPj5UaGlyZFBhcnR5RW1haWxTZW5kZXJBZGFwdGVyOiBPaCwgdGhhdCdzIGV4YWN0bHkgd2hhdCBJIGhhdmUhXG4gICAgVGhpcmRQYXJ0eUVtYWlsU2VuZGVyQWRhcHRlci0tPj5UaGlyZFBhcnR5RW1haWxDbGllbnQ6IFBsZWFzZSBzZW5kIHRoaXMgZW1haWxcbiAgICAgICAgICAgICIsIm1lcm1haWQiOiJ7XG4gIFwidGhlbWVcIjogXCJkZWZhdWx0XCJcbn0iLCJ1cGRhdGVFZGl0b3IiOmZhbHNlLCJhdXRvU3luYyI6dHJ1ZSwidXBkYXRlRGlhZ3JhbSI6ZmFsc2V9)
35 changes: 35 additions & 0 deletions tests/structural/adapter/AdapterTest.php
@@ -0,0 +1,35 @@
<?php

declare(strict_types=1);

namespace structural\adapter;

use app\structural\adapter\ThirdPartyEmailSenderAdapter;
use app\structural\adapter\ThirdPartyEmailClient;
use PHPUnit\Framework\TestCase;

final class AdapterTest extends TestCase
{
public function testThirdPartyEmailSenderAdapterAdapterUsesCorrectClient(): void
{
$emailClient = $this->createMock(ThirdPartyEmailClient::class);

$emailAdapter = new ThirdPartyEmailSenderAdapter($emailClient);

$emailClient->expects($this->once())
->method('sendEmail');

$emailAdapter->sendEmail(
'email@email.com',
'I love design patterns');
}

public function testThirdPartyClient(): void
{
$emailClient = new ThirdPartyEmailClient('apiKey', 'region');
$emailClient->sendEmail('email@email.com', 'I love design patterns');

$this->expectOutputRegex('/Using apiKey apiKey and region region/');
$this->expectOutputRegex('/Sending email to email@email.com and content I love design patterns/');
}
}

0 comments on commit 1234576

Please sign in to comment.