Spaces:
No application file
No application file
| namespace Mautic\WebhookBundle\Tests\Http; | |
| use GuzzleHttp\Client as GuzzleClient; | |
| use GuzzleHttp\Psr7\Request; | |
| use GuzzleHttp\Psr7\Response; | |
| use Mautic\CoreBundle\Helper\CoreParametersHelper; | |
| use Mautic\WebhookBundle\Http\Client; | |
| use PHPUnit\Framework\MockObject\MockObject; | |
| use PHPUnit\Framework\TestCase; | |
| final class ClientTest extends TestCase | |
| { | |
| /** | |
| * @var MockObject&CoreParametersHelper | |
| */ | |
| private MockObject $parametersMock; | |
| /** | |
| * @var MockObject&GuzzleClient | |
| */ | |
| private MockObject $httpClientMock; | |
| private Client $client; | |
| protected function setUp(): void | |
| { | |
| parent::setUp(); | |
| $this->parametersMock = $this->createMock(CoreParametersHelper::class); | |
| $this->httpClientMock = $this->createMock(GuzzleClient::class); | |
| $this->client = new Client($this->parametersMock, $this->httpClientMock); | |
| } | |
| public function testPost(): void | |
| { | |
| $method = 'POST'; | |
| $url = 'url'; | |
| $payload = ['payload']; | |
| $siteUrl = 'siteUrl'; | |
| $headers = [ | |
| 'Content-Type' => 'application/json', | |
| 'X-Origin-Base-URL' => $siteUrl, | |
| ]; | |
| $response = new Response(); | |
| $this->parametersMock->expects($this->once()) | |
| ->method('get') | |
| ->with('site_url') | |
| ->willReturn($siteUrl); | |
| $this->httpClientMock->expects($this->once()) | |
| ->method('sendRequest') | |
| ->with($this->callback(function (Request $request) use ($method, $url, $headers, $payload) { | |
| $this->assertSame($method, $request->getMethod()); | |
| $this->assertSame($url, $request->getUri()->getPath()); | |
| foreach ($headers as $headerName => $headerValue) { | |
| $header = $request->getHeader($headerName); | |
| $this->assertSame($headerValue, $header[0]); | |
| } | |
| $this->assertSame(json_encode($payload), (string) $request->getBody()); | |
| return true; | |
| })) | |
| ->willReturn($response); | |
| $this->assertEquals($response, $this->client->post($url, $payload)); | |
| } | |
| } | |