Files
yookassa-sdk-php/tests/Common/AbstractRequestBuilderTest.php
T
Антон Н. Николаев cbcdbc8ae1 Обновленная версия SDK. Поддержка PHP 8+
Отказ от поддержки PHP < 8
Изменена структура файлов
Переработана логика работы с моделями
Добавлено использование валидатора данных в моделях
Массивы объектов заменены на объекты-коллекции
2023-06-07 17:23:48 +03:00

146 lines
3.5 KiB
PHP

<?php
namespace Tests\YooKassa\Common;
use Exception;
use InvalidArgumentException;
use PHPUnit\Framework\TestCase;
use YooKassa\Common\AbstractRequest;
use YooKassa\Common\AbstractRequestBuilder;
use YooKassa\Common\Exceptions\InvalidRequestException;
/**
* @internal
*/
class AbstractRequestBuilderTest extends TestCase
{
public function testBuild(): void
{
$builder = new TestAbstractRequestBuilder();
try {
$builder->build([]);
} catch (InvalidRequestException $e) {
$request = $builder->build([
'isValid' => true,
]);
self::assertTrue($request->isValid());
$mess = 'test message';
try {
$builder->build([
'throwException' => new Exception($mess),
]);
} catch (Exception $e) {
self::assertEquals($mess, $e->getPrevious()->getMessage());
return;
}
self::fail('Exception not thrown in setThrowException method');
return;
}
self::fail('Exception not thrown in build method');
}
public function testSetOptions(): void
{
$builder = new TestAbstractRequestBuilder();
$builder->setOptions([]);
try {
$builder->build();
} catch (InvalidRequestException $e) {
$builder->setOptions([
'is_valid' => true,
]);
self::assertTrue($builder->build()->isValid());
try {
$builder->setOptions('test');
} catch (Exception $e) {
self::assertInstanceOf(InvalidArgumentException::class, $e);
return;
}
self::fail('Exception not thrown in setOptions method');
}
self::fail('Exception not thrown in build method');
}
}
class TestAbstractRequestBuilder extends AbstractRequestBuilder
{
public function setIsValid($value)
{
$this->currentObject->setIsValid($value);
return $this;
}
/**
* @throws Exception
*/
public function setThrowException(Exception $e): TestAbstractRequestBuilder
{
$this->currentObject->setThrowException($e);
return $this;
}
/**
* Инициализирует пустой запрос
*
* @return TestAbstractRequestClass Инстанс запроса, который будем собирать
*/
protected function initCurrentObject(): TestAbstractRequestClass
{
return new TestAbstractRequestClass();
}
}
class TestAbstractRequestClass extends AbstractRequest
{
private bool $valid = false;
private ?Exception $exception = null;
/**
* @throws Exception
*/
public function setThrowException(Exception $e): void
{
$this->exception = $e;
}
public function setIsValid(bool $value): void
{
$this->valid = $value;
}
public function isValid(): bool
{
return $this->valid;
}
/**
* Валидирует текущий запрос, проверяет все ли нужные свойства установлены.
*
* @return bool True если запрос валиден, false если нет
*
* @throws Exception
*/
public function validate(): bool
{
if (null !== $this->exception) {
$this->setValidationError($this->exception->getMessage());
throw $this->exception;
}
return $this->valid;
}
}