mirror of
https://github.com/anthonyaxenov/atol-online.git
synced 2024-11-22 02:14: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-строке согласно схеме АТОЛ Онлайн
|
||||
*
|
||||
* @param Entity $entity
|
||||
* @param array $json_structure
|
||||
* @param array|null $json_structure
|
||||
* @covers \AtolOnline\Entities\Entity::jsonSerialize
|
||||
* @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->assertIsString((string)$entity);
|
||||
$this->assertJson((string)$entity);
|
||||
if ($json_structure) {
|
||||
if (!is_null($json_structure)) {
|
||||
$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