createApiClient();
$payload = $this->invokeBuildPersonalDataRequestData($apiClient, 'customer@example.com', 'Adressdaten', 123, 456);
$xml = $this->serializePayload($payload);
self::assertStringContainsString('J', $xml);
self::assertStringNotContainsString('', $xml);
self::assertStringContainsString('customer@example.com', $xml);
self::assertStringContainsString('123', $xml);
self::assertStringContainsString('456', $xml);
}
public function testPersonalDataRequestOmitsOptionalIdentifiersWhenNotProvided(): void
{
$apiClient = $this->createApiClient();
$payload = $this->invokeBuildPersonalDataRequestData($apiClient, 'customer@example.com', 'Adressdaten');
$xml = $this->serializePayload($payload);
self::assertStringContainsString('J', $xml);
self::assertStringNotContainsString('', $xml);
self::assertStringContainsString('customer@example.com', $xml);
self::assertStringNotContainsString('', $xml);
self::assertStringNotContainsString('', $xml);
}
/**
* @return array
*/
private function invokeBuildPersonalDataRequestData(
ApiClient $apiClient,
string $email,
string $art,
?int $addressId = null,
?int $personId = null
): array
{
$method = new \ReflectionMethod(ApiClient::class, 'buildCustomerDataRequestData');
$method->setAccessible(true);
/** @var array $payload */
$payload = $method->invoke($apiClient, $email, $art, $addressId, $personId);
return $payload;
}
/**
* @param array $payload
*/
private function serializePayload(array $payload): string
{
return (new Serializer([], [new XmlEncoder()]))->serialize($payload, 'xml', [
XmlEncoder::ROOT_NODE_NAME => 'anfrage',
XmlEncoder::ENCODING => 'UTF-8',
]);
}
private function createApiClient(): ApiClient
{
return new ApiClient(
$this->createMock(SerializerInterface::class),
$this->createMock(ApiResponseParser::class),
$this->createMock(FilesystemOperator::class),
$this->createMock(LoggerInterface::class),
$this->createMock(BookingDataProcessor::class),
new RequestStack(),
new RequestIdGenerator(),
[
'bpn_username' => 'test-user',
'bpn_password' => 'test-password',
'bpn_api_ip' => '127.0.0.1',
'bpn_api_ports' => [9000],
],
);
}
}