diff --git a/app/structural/adapter/EmailSenderAdapter.php b/app/structural/adapter/EmailSenderAdapter.php new file mode 100644 index 0000000..61ab0d9 --- /dev/null +++ b/app/structural/adapter/EmailSenderAdapter.php @@ -0,0 +1,10 @@ +apiKey, $this->region); + echo sprintf("Sending email to %s and content %s", $recipient, $content); + } +} diff --git a/app/structural/adapter/ThirdPartyEmailSenderAdapter.php b/app/structural/adapter/ThirdPartyEmailSenderAdapter.php new file mode 100644 index 0000000..a60f285 --- /dev/null +++ b/app/structural/adapter/ThirdPartyEmailSenderAdapter.php @@ -0,0 +1,17 @@ +emailClient->sendEmail($recipient, $content); + } +} diff --git a/app/structural/adapter/docs/diagrams.md b/app/structural/adapter/docs/diagrams.md new file mode 100644 index 0000000..b8ed0fa --- /dev/null +++ b/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) \ No newline at end of file diff --git a/tests/structural/adapter/AdapterTest.php b/tests/structural/adapter/AdapterTest.php new file mode 100644 index 0000000..15ac706 --- /dev/null +++ b/tests/structural/adapter/AdapterTest.php @@ -0,0 +1,35 @@ +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/'); + } +} \ No newline at end of file