Spaces:
No application file
No application file
declare(strict_types=1); | |
namespace Mautic\PluginBundle\Tests\Integration; | |
use GuzzleHttp\Client; | |
use GuzzleHttp\Psr7\Response; | |
use GuzzleHttp\RequestOptions; | |
use Mautic\PluginBundle\Integration\AbstractIntegration; | |
use PHPUnit\Framework\Assert; | |
use PHPUnit\Framework\MockObject\MockObject; | |
use Psr\Http\Message\ResponseInterface; | |
class AbstractIntegrationTest extends AbstractIntegrationTestCase | |
{ | |
public function testPopulatedLeadDataReturnsIntAndNotDncEntityForMauticContactIsContactableByEmail(): void | |
{ | |
/** | |
* @var MockObject&AbstractIntegration | |
*/ | |
$integration = $this->getMockBuilder(AbstractIntegration::class) | |
->setConstructorArgs([ | |
$this->dispatcher, | |
$this->cache, | |
$this->em, | |
$this->session, | |
$this->request, | |
$this->router, | |
$this->translator, | |
$this->logger, | |
$this->encryptionHelper, | |
$this->leadModel, | |
$this->companyModel, | |
$this->pathsHelper, | |
$this->notificationModel, | |
$this->fieldModel, | |
$this->integrationEntityModel, | |
$this->doNotContact, | |
]) | |
->onlyMethods(['getName', 'getAuthenticationType', 'getAvailableLeadFields']) | |
->getMock(); | |
$integration->method('getAvailableLeadFields') | |
->willReturn( | |
[ | |
'dnc' => [ | |
'type' => 'bool', | |
'required' => false, | |
'label' => 'DNC', | |
], | |
] | |
); | |
$this->assertEquals( | |
['dnc' => 0], | |
$integration->populateLeadData( | |
['id' => 1], | |
[ | |
'leadFields' => [ | |
'dnc' => 'mauticContactIsContactableByEmail', | |
], | |
] | |
) | |
); | |
} | |
/** | |
* @dataProvider requestProvider | |
* | |
* @param mixed[] $parameters | |
* @param mixed[] $settings | |
*/ | |
public function testMakeRequest(string $uri, array $parameters, string $method, array $settings, object $assertRequest): void | |
{ | |
/** | |
* @var MockObject&AbstractIntegration | |
*/ | |
$integration = $this->getMockBuilder(AbstractIntegration::class) | |
->setConstructorArgs([ | |
$this->dispatcher, | |
$this->cache, | |
$this->em, | |
$this->session, | |
$this->request, | |
$this->router, | |
$this->translator, | |
$this->logger, | |
$this->encryptionHelper, | |
$this->leadModel, | |
$this->companyModel, | |
$this->pathsHelper, | |
$this->notificationModel, | |
$this->fieldModel, | |
$this->integrationEntityModel, | |
$this->doNotContact, | |
]) | |
->onlyMethods(['getName', 'getAuthenticationType', 'makeHttpClient']) | |
->getMock(); | |
$integration->method('makeHttpClient') | |
->willReturn( | |
new class($assertRequest) extends Client { | |
public function __construct( | |
private object $assertRequest | |
) { | |
} | |
/** | |
* @param mixed[] $options | |
*/ | |
public function request(string $method, $uri = '', array $options = []): ResponseInterface | |
{ | |
$this->assertRequest->assert($method, $uri, $options); | |
return new Response(); | |
} | |
} | |
); | |
$this->assertEquals([], $integration->makeRequest($uri, $parameters, $method, $settings)); | |
} | |
/** | |
* @return iterable<mixed[]> | |
*/ | |
public static function requestProvider(): iterable | |
{ | |
// Test with JSON. | |
yield [ | |
'https://some.uri', | |
['this will be' => 'encoded to json string'], | |
'POST', | |
[ | |
'ignore_event_dispatch' => true, | |
'encode_parameters' => 'json', | |
], | |
new class() { | |
/** | |
* @param mixed[] $options | |
*/ | |
public function assert(string $method, string $uri = '', array $options = []): void | |
{ | |
Assert::assertSame('POST', $method); | |
Assert::assertSame('https://some.uri', $uri); | |
Assert::assertSame( | |
[ | |
RequestOptions::BODY => '{"this will be":"encoded to json string"}', | |
'headers' => ['Content-Type' => 'application/json'], | |
'timeout' => 10, | |
], | |
$options | |
); | |
} | |
}, | |
]; | |
// Test with form params. | |
yield [ | |
'https://some.uri', | |
['this will be' => 'encoded to form array'], | |
'POST', | |
['ignore_event_dispatch' => true], | |
new class() { | |
/** | |
* @param mixed[] $options | |
*/ | |
public function assert(string $method, string $uri = '', array $options = []): void | |
{ | |
Assert::assertSame('POST', $method); | |
Assert::assertSame('https://some.uri', $uri); | |
Assert::assertSame( | |
[ | |
RequestOptions::FORM_PARAMS => ['this will be' => 'encoded to form array'], | |
'headers' => [], | |
'timeout' => 10, | |
], | |
$options | |
); | |
} | |
}, | |
]; | |
} | |
} | |