diff --git a/src/LoggingPostRequestSender.php b/src/LoggingPostRequestSender.php new file mode 100644 index 0000000..028581a --- /dev/null +++ b/src/LoggingPostRequestSender.php @@ -0,0 +1,34 @@ +logger->log( + $this->logLevel, + 'Post request to ' . $url, + array_diff_key( $fields, array_flip( $this->fieldsToOmit ) ) + ); + + return $this->requestSender->post( $url, $fields ); + } + +} diff --git a/src/PostRequestSender.php b/src/PostRequestSender.php index 0e97789..94c7369 100644 --- a/src/PostRequestSender.php +++ b/src/PostRequestSender.php @@ -5,12 +5,15 @@ namespace Jeroen\PostRequestSender; use Psr\Http\Message\ResponseInterface; +use Throwable; interface PostRequestSender { /** * @param string $url * @param array $fields + * + * @throws Throwable */ public function post( string $url, array $fields ): ResponseInterface; diff --git a/tests/LoggingPostRequestSenderTest.php b/tests/LoggingPostRequestSenderTest.php new file mode 100644 index 0000000..28779f6 --- /dev/null +++ b/tests/LoggingPostRequestSenderTest.php @@ -0,0 +1,64 @@ +post( 'https://first.url', [ 'foo' => 'bar' ] ); + $sender->post( 'https://second.url', [ 'baz' => 'bah', 'pew' => 1337 ] ); + + $this->assertSame( + [ 'Post request to https://first.url', 'Post request to https://second.url' ], + $loggerSpy->getLogCalls()->getMessages() + ); + + $this->assertSame( + [ 'baz' => 'bah', 'pew' => 1337 ], + $loggerSpy->getLogCalls()->getLastCall()?->getContext() + ); + + $this->assertSame( + LogLevel::INFO, + $loggerSpy->getLogCalls()->getLastCall()?->getLevel() + ); + } + + public function testOmitsExcludedFields(): void { + $loggerSpy = new LoggerSpy(); + + $sender = new LoggingPostRequestSender( + new StubPostRequestSender(), + $loggerSpy, + fieldsToOmit: [ 'secret' ] + ); + + $sender->post( 'https://example.url', [ 'foo' => 'bar', 'secret' => 1337, 'baz' => 'bah' ] ); + + $this->assertSame( + [ 'foo' => 'bar', 'baz' => 'bah' ], + $loggerSpy->getLogCalls()->getLastCall()?->getContext() + ); + } + +}