mirror of
https://github.com/anthonyaxenov/atol-online.git
synced 2024-11-22 03:24:33 +00:00
Реализован и покрыт тестами AgentInfo
(переименован из Agent
)
This commit is contained in:
parent
16c8d8a676
commit
e0d792d3a4
168
src/Entities/AgentInfo.php
Normal file
168
src/Entities/AgentInfo.php
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
|
||||||
|
*
|
||||||
|
* This code is licensed under MIT.
|
||||||
|
* Этот код распространяется по лицензии MIT.
|
||||||
|
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types = 1);
|
||||||
|
|
||||||
|
namespace AtolOnline\Entities;
|
||||||
|
|
||||||
|
use AtolOnline\Enums\AgentTypes;
|
||||||
|
use AtolOnline\Exceptions\InvalidEnumValueException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Класс, описывающий данные агента
|
||||||
|
*
|
||||||
|
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 26-28
|
||||||
|
*/
|
||||||
|
class AgentInfo extends Entity
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string|null Признак агента (1057)
|
||||||
|
*/
|
||||||
|
protected ?string $type = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var PayingAgent|null Платёжный агент
|
||||||
|
*/
|
||||||
|
protected ?PayingAgent $paying_agent = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var ReceivePaymentsOperator|null Оператор по приёму платежей
|
||||||
|
*/
|
||||||
|
protected ?ReceivePaymentsOperator $receive_payments_operator = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var MoneyTransferOperator|null Оператор перевода
|
||||||
|
*/
|
||||||
|
protected ?MoneyTransferOperator $money_transfer_operator = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Конструктор
|
||||||
|
*
|
||||||
|
* @param string|null $type Признак агента (1057)
|
||||||
|
* @param PayingAgent|null $paying_agent Платёжный агент
|
||||||
|
* @param ReceivePaymentsOperator|null $receive_payments_operator Оператор по приёму платежей
|
||||||
|
* @param MoneyTransferOperator|null $money_transfer_operator Оператор перевода
|
||||||
|
* @throws InvalidEnumValueException
|
||||||
|
*/
|
||||||
|
public function __construct(
|
||||||
|
?string $type = null,
|
||||||
|
?PayingAgent $paying_agent = null,
|
||||||
|
?ReceivePaymentsOperator $receive_payments_operator = null,
|
||||||
|
?MoneyTransferOperator $money_transfer_operator = null,
|
||||||
|
) {
|
||||||
|
!is_null($type) && AgentTypes::isValid($type) && $this->setType($type);
|
||||||
|
!is_null($paying_agent) && $this->setPayingAgent($paying_agent);
|
||||||
|
!is_null($receive_payments_operator) && $this->setReceivePaymentsOperator($receive_payments_operator);
|
||||||
|
!is_null($money_transfer_operator) && $this->setMoneyTransferOperator($money_transfer_operator);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Возвращает установленный признак оператора
|
||||||
|
*
|
||||||
|
* @return string|null
|
||||||
|
*/
|
||||||
|
public function getType(): ?string
|
||||||
|
{
|
||||||
|
return $this->type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Устанавливает признак оператора
|
||||||
|
*
|
||||||
|
* @param string|null $type
|
||||||
|
* @return AgentInfo
|
||||||
|
*/
|
||||||
|
public function setType(?string $type): AgentInfo
|
||||||
|
{
|
||||||
|
$this->type = $type;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Взвращает установленного платёжного агента
|
||||||
|
*
|
||||||
|
* @return PayingAgent|null
|
||||||
|
*/
|
||||||
|
public function getPayingAgent(): ?PayingAgent
|
||||||
|
{
|
||||||
|
return $this->paying_agent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Устанавливает платёжного агента
|
||||||
|
*
|
||||||
|
* @param PayingAgent|null $paying_agent
|
||||||
|
* @return AgentInfo
|
||||||
|
*/
|
||||||
|
public function setPayingAgent(?PayingAgent $paying_agent): AgentInfo
|
||||||
|
{
|
||||||
|
$this->paying_agent = $paying_agent;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Возвращает установленного оператора по приёму платежей
|
||||||
|
*
|
||||||
|
* @return ReceivePaymentsOperator|null
|
||||||
|
*/
|
||||||
|
public function getReceivePaymentsOperator(): ?ReceivePaymentsOperator
|
||||||
|
{
|
||||||
|
return $this->receive_payments_operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Устанавливает оператора по приёму платежей
|
||||||
|
*
|
||||||
|
* @param ReceivePaymentsOperator|null $receive_payments_operator
|
||||||
|
* @return AgentInfo
|
||||||
|
*/
|
||||||
|
public function setReceivePaymentsOperator(?ReceivePaymentsOperator $receive_payments_operator): AgentInfo
|
||||||
|
{
|
||||||
|
$this->receive_payments_operator = $receive_payments_operator;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Возвращает установленного оператора перевода
|
||||||
|
*
|
||||||
|
* @return MoneyTransferOperator|null
|
||||||
|
*/
|
||||||
|
public function getMoneyTransferOperator(): ?MoneyTransferOperator
|
||||||
|
{
|
||||||
|
return $this->money_transfer_operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Устанавливает оператора перевода
|
||||||
|
*
|
||||||
|
* @param MoneyTransferOperator|null $money_transfer_operator
|
||||||
|
* @return AgentInfo
|
||||||
|
*/
|
||||||
|
public function setMoneyTransferOperator(?MoneyTransferOperator $money_transfer_operator): AgentInfo
|
||||||
|
{
|
||||||
|
$this->money_transfer_operator = $money_transfer_operator;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function jsonSerialize(): array
|
||||||
|
{
|
||||||
|
$json = [];
|
||||||
|
$this->getType() && $json['type'] = $this->getType();
|
||||||
|
$this->getPayingAgent()?->jsonSerialize() && $json['paying_agent'] = $this
|
||||||
|
->getPayingAgent()->jsonSerialize();
|
||||||
|
$this->getReceivePaymentsOperator()?->jsonSerialize() && $json['receive_payments_operator'] = $this
|
||||||
|
->getReceivePaymentsOperator()->jsonSerialize();
|
||||||
|
$this->getMoneyTransferOperator()?->jsonSerialize() && $json['money_transfer_operator'] = $this
|
||||||
|
->getMoneyTransferOperator()->jsonSerialize();
|
||||||
|
return $json;
|
||||||
|
}
|
||||||
|
}
|
@ -67,16 +67,16 @@ class BasicTestCase extends TestCase
|
|||||||
* Тестирует является ли объект приводимым к json-строке согласно схеме АТОЛ Онлайн
|
* Тестирует является ли объект приводимым к json-строке согласно схеме АТОЛ Онлайн
|
||||||
*
|
*
|
||||||
* @param Entity $entity
|
* @param Entity $entity
|
||||||
* @param array $json_structure
|
* @param array|null $json_structure
|
||||||
* @covers \AtolOnline\Entities\Entity::jsonSerialize
|
* @covers \AtolOnline\Entities\Entity::jsonSerialize
|
||||||
* @covers \AtolOnline\Entities\Entity::__toString
|
* @covers \AtolOnline\Entities\Entity::__toString
|
||||||
*/
|
*/
|
||||||
public function assertAtolable(Entity $entity, array $json_structure = []): void
|
public function assertAtolable(Entity $entity, ?array $json_structure = null): void
|
||||||
{
|
{
|
||||||
$this->assertIsArray($entity->jsonSerialize());
|
$this->assertIsArray($entity->jsonSerialize());
|
||||||
$this->assertIsString((string)$entity);
|
$this->assertIsString((string)$entity);
|
||||||
$this->assertJson((string)$entity);
|
$this->assertJson((string)$entity);
|
||||||
if ($json_structure) {
|
if (!is_null($json_structure)) {
|
||||||
$this->assertEquals(json_encode($json_structure), (string)$entity);
|
$this->assertEquals(json_encode($json_structure), (string)$entity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
118
tests/AtolOnline/Tests/Entities/AgentInfoTest.php
Normal file
118
tests/AtolOnline/Tests/Entities/AgentInfoTest.php
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
|
||||||
|
*
|
||||||
|
* This code is licensed under MIT.
|
||||||
|
* Этот код распространяется по лицензии MIT.
|
||||||
|
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace AtolOnline\Tests\Entities;
|
||||||
|
|
||||||
|
use AtolOnline\{
|
||||||
|
Entities\AgentInfo,
|
||||||
|
Entities\MoneyTransferOperator,
|
||||||
|
Entities\PayingAgent,
|
||||||
|
Entities\ReceivePaymentsOperator,
|
||||||
|
Enums\AgentTypes,
|
||||||
|
Exceptions\InvalidEnumValueException,
|
||||||
|
Exceptions\InvalidInnLengthException,
|
||||||
|
Exceptions\InvalidPhoneException,
|
||||||
|
Exceptions\TooLongPayingAgentOperationException,
|
||||||
|
Tests\BasicTestCase
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Набор тестов для проверки работы класса агента
|
||||||
|
*/
|
||||||
|
class AgentInfoTest extends BasicTestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Тестирует конструктор без передачи значений и корректное приведение к json
|
||||||
|
*
|
||||||
|
* @covers \AtolOnline\Entities\AgentInfo
|
||||||
|
* @covers \AtolOnline\Entities\AgentInfo::jsonSerialize
|
||||||
|
*/
|
||||||
|
public function testConstructorWithoutArgs(): void
|
||||||
|
{
|
||||||
|
$this->assertAtolable(new AgentInfo(), []);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Тестирует конструктор с передачей значений и корректное приведение к json
|
||||||
|
*
|
||||||
|
* @covers \AtolOnline\Entities\AgentInfo
|
||||||
|
* @covers \AtolOnline\Entities\AgentInfo::jsonSerialize
|
||||||
|
* @covers \AtolOnline\Entities\AgentInfo::setType
|
||||||
|
* @covers \AtolOnline\Entities\AgentInfo::getType
|
||||||
|
* @covers \AtolOnline\Entities\AgentInfo::setPayingAgent
|
||||||
|
* @covers \AtolOnline\Entities\AgentInfo::getPayingAgent
|
||||||
|
* @covers \AtolOnline\Entities\PayingAgent::jsonSerialize
|
||||||
|
* @covers \AtolOnline\Entities\AgentInfo::setMoneyTransferOperator
|
||||||
|
* @covers \AtolOnline\Entities\AgentInfo::getMoneyTransferOperator
|
||||||
|
* @covers \AtolOnline\Entities\MoneyTransferOperator::jsonSerialize
|
||||||
|
* @covers \AtolOnline\Entities\AgentInfo::setReceivePaymentsOperator
|
||||||
|
* @covers \AtolOnline\Entities\AgentInfo::getReceivePaymentsOperator
|
||||||
|
* @covers \AtolOnline\Entities\ReceivePaymentsOperator::jsonSerialize
|
||||||
|
* @throws InvalidPhoneException
|
||||||
|
* @throws TooLongPayingAgentOperationException
|
||||||
|
* @throws InvalidInnLengthException
|
||||||
|
* @throws InvalidEnumValueException
|
||||||
|
*/
|
||||||
|
public function testConstructorWithArgs(): void
|
||||||
|
{
|
||||||
|
$this->assertAtolable(new AgentInfo(null), []);
|
||||||
|
$this->assertAtolable(new AgentInfo(AgentTypes::ANOTHER), ['type' => AgentTypes::ANOTHER]);
|
||||||
|
$this->assertAtolable(new AgentInfo(paying_agent: new PayingAgent()), []);
|
||||||
|
$this->assertAtolable(new AgentInfo(money_transfer_operator: new MoneyTransferOperator()), []);
|
||||||
|
$this->assertAtolable(new AgentInfo(receive_payments_operator: new ReceivePaymentsOperator()), []);
|
||||||
|
|
||||||
|
$this->assertAtolable(new AgentInfo(
|
||||||
|
AgentTypes::ANOTHER,
|
||||||
|
new PayingAgent(),
|
||||||
|
new ReceivePaymentsOperator(),
|
||||||
|
new MoneyTransferOperator(),
|
||||||
|
), ['type' => AgentTypes::ANOTHER]);
|
||||||
|
|
||||||
|
$this->assertAtolable(new AgentInfo(
|
||||||
|
AgentTypes::ANOTHER,
|
||||||
|
new PayingAgent('test', ['+79518888888']),
|
||||||
|
new ReceivePaymentsOperator(['+79519999999']),
|
||||||
|
new MoneyTransferOperator('MTO Name', '9876543210', 'London', ['+79517777777']),
|
||||||
|
), [
|
||||||
|
'type' => AgentTypes::ANOTHER,
|
||||||
|
'paying_agent' => [
|
||||||
|
'operation' => 'test',
|
||||||
|
'phones' => [
|
||||||
|
'+79518888888',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'receive_payments_operator' => [
|
||||||
|
'phones' => [
|
||||||
|
'+79519999999',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'money_transfer_operator' => [
|
||||||
|
'name' => 'MTO Name',
|
||||||
|
'inn' => '9876543210',
|
||||||
|
'address' => 'London',
|
||||||
|
'phones' => [
|
||||||
|
"+79517777777",
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Тестирует исключение при некорректном типе
|
||||||
|
*
|
||||||
|
* @covers \AtolOnline\Entities\AgentInfo
|
||||||
|
* @covers \AtolOnline\Enums\AgentTypes::isValid
|
||||||
|
* @covers \AtolOnline\Exceptions\InvalidEnumValueException
|
||||||
|
*/
|
||||||
|
public function testInvalidEnumValueException(): void
|
||||||
|
{
|
||||||
|
$this->expectException(InvalidEnumValueException::class);
|
||||||
|
new AgentInfo('qwerty');
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user