mirror of
https://github.com/anthonyaxenov/atol-online.git
synced 2024-11-25 12:54:10 +00:00
Compare commits
No commits in common. "b35b9bfa87ab40fb24562d51c9eca96adbea8018" and "6551366d84037784c0341d154be71abda143775a" have entirely different histories.
b35b9bfa87
...
6551366d84
@ -11,11 +11,9 @@ declare(strict_types = 1);
|
|||||||
|
|
||||||
namespace AtolOnline\Api;
|
namespace AtolOnline\Api;
|
||||||
|
|
||||||
use AtolOnline\Entities\Kkt;
|
|
||||||
use AtolOnline\Exceptions\EmptyMonitorDataException;
|
|
||||||
use AtolOnline\Exceptions\NotEnoughMonitorDataException;
|
|
||||||
use GuzzleHttp\Exception\GuzzleException;
|
use GuzzleHttp\Exception\GuzzleException;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
|
use stdClass;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Класс для мониторинга ККТ
|
* Класс для мониторинга ККТ
|
||||||
@ -87,8 +85,7 @@ class KktMonitor extends AtolClient
|
|||||||
*/
|
*/
|
||||||
public function getAll(?int $limit = null, ?int $offset = null): Collection
|
public function getAll(?int $limit = null, ?int $offset = null): Collection
|
||||||
{
|
{
|
||||||
$collection = collect($this->fetchAll($limit, $offset)->getContent());
|
return collect($this->fetchAll($limit, $offset)->getContent());
|
||||||
return $collection->map(fn($data) => new Kkt($data));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -117,14 +114,12 @@ class KktMonitor extends AtolClient
|
|||||||
*
|
*
|
||||||
* @todo кастовать к отдельному классу со своими геттерами
|
* @todo кастовать к отдельному классу со своими геттерами
|
||||||
* @param string $serial_number
|
* @param string $serial_number
|
||||||
* @return Kkt
|
* @return stdClass
|
||||||
* @throws GuzzleException
|
* @throws GuzzleException
|
||||||
* @throws EmptyMonitorDataException
|
|
||||||
* @throws NotEnoughMonitorDataException
|
|
||||||
* @see https://online.atol.ru/files/API_service_information.pdf Документация, стр 11
|
* @see https://online.atol.ru/files/API_service_information.pdf Документация, стр 11
|
||||||
*/
|
*/
|
||||||
public function getOne(string $serial_number): Kkt
|
public function getOne(string $serial_number): stdClass
|
||||||
{
|
{
|
||||||
return new Kkt($this->fetchOne($serial_number)->getContent()->data);
|
return $this->fetchOne($serial_number)->getContent()->data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
declare(strict_types = 1);
|
declare(strict_types = 1);
|
||||||
|
|
||||||
namespace AtolOnline\Enums;
|
namespace AtolOnline\Constants;
|
||||||
|
|
||||||
use MyCLabs\Enum\Enum;
|
use MyCLabs\Enum\Enum;
|
||||||
|
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
declare(strict_types = 1);
|
declare(strict_types = 1);
|
||||||
|
|
||||||
namespace AtolOnline\Enums;
|
namespace AtolOnline\Constants;
|
||||||
|
|
||||||
use MyCLabs\Enum\Enum;
|
use MyCLabs\Enum\Enum;
|
||||||
|
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
declare(strict_types = 1);
|
declare(strict_types = 1);
|
||||||
|
|
||||||
namespace AtolOnline\Enums;
|
namespace AtolOnline\Constants;
|
||||||
|
|
||||||
use MyCLabs\Enum\Enum;
|
use MyCLabs\Enum\Enum;
|
||||||
|
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
declare(strict_types = 1);
|
declare(strict_types = 1);
|
||||||
|
|
||||||
namespace AtolOnline\Enums;
|
namespace AtolOnline\Constants;
|
||||||
|
|
||||||
use MyCLabs\Enum\Enum;
|
use MyCLabs\Enum\Enum;
|
||||||
|
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
declare(strict_types = 1);
|
declare(strict_types = 1);
|
||||||
|
|
||||||
namespace AtolOnline\Enums;
|
namespace AtolOnline\Constants;
|
||||||
|
|
||||||
use MyCLabs\Enum\Enum;
|
use MyCLabs\Enum\Enum;
|
||||||
|
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
declare(strict_types = 1);
|
declare(strict_types = 1);
|
||||||
|
|
||||||
namespace AtolOnline\Enums;
|
namespace AtolOnline\Constants;
|
||||||
|
|
||||||
use MyCLabs\Enum\Enum;
|
use MyCLabs\Enum\Enum;
|
||||||
|
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
declare(strict_types = 1);
|
declare(strict_types = 1);
|
||||||
|
|
||||||
namespace AtolOnline\Enums;
|
namespace AtolOnline\Constants;
|
||||||
|
|
||||||
use MyCLabs\Enum\Enum;
|
use MyCLabs\Enum\Enum;
|
||||||
|
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
declare(strict_types = 1);
|
declare(strict_types = 1);
|
||||||
|
|
||||||
namespace AtolOnline\Enums;
|
namespace AtolOnline\Constants;
|
||||||
|
|
||||||
use MyCLabs\Enum\Enum;
|
use MyCLabs\Enum\Enum;
|
||||||
|
|
@ -13,7 +13,7 @@ namespace AtolOnline\Entities;
|
|||||||
|
|
||||||
use AtolOnline\{
|
use AtolOnline\{
|
||||||
Constants\Constraints,
|
Constants\Constraints,
|
||||||
Enums\SnoTypes,
|
Constants\SnoTypes,
|
||||||
Exceptions\InvalidEmailException,
|
Exceptions\InvalidEmailException,
|
||||||
Exceptions\InvalidInnLengthException,
|
Exceptions\InvalidInnLengthException,
|
||||||
Exceptions\InvalidPaymentAddressException,
|
Exceptions\InvalidPaymentAddressException,
|
||||||
|
@ -31,21 +31,33 @@ class CorrectionInfo extends Entity
|
|||||||
*/
|
*/
|
||||||
protected string $base_number;
|
protected string $base_number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string Описание коррекции. Тег ФФД - 1177.
|
||||||
|
*/
|
||||||
|
protected string $base_name;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CorrectionInfo constructor.
|
* CorrectionInfo constructor.
|
||||||
*
|
*
|
||||||
* @param string|null $type Тип коррекции
|
* @param string|null $type Тип коррекции
|
||||||
* @param string|null $base_date Дата документа
|
* @param string|null $base_date Дата документа
|
||||||
* @param string|null $base_number Номер документа
|
* @param string|null $base_number Номер документа
|
||||||
|
* @param string|null $base_name Описание коррекции
|
||||||
*/
|
*/
|
||||||
public function __construct(
|
public function __construct(?string $type = null, ?string $base_date = null, ?string $base_number = null, ?string $base_name = null)
|
||||||
?string $type = null,
|
{
|
||||||
?string $base_date = null,
|
if ($type) {
|
||||||
?string $base_number = null
|
$this->setType($type);
|
||||||
) {
|
}
|
||||||
$type && $this->setType($type);
|
if ($base_date) {
|
||||||
$base_date && $this->setDate($base_date);
|
$this->setDate($base_date);
|
||||||
$base_number && $this->setNumber($base_number);
|
}
|
||||||
|
if ($base_number) {
|
||||||
|
$this->setNumber($base_number);
|
||||||
|
}
|
||||||
|
if ($base_name) {
|
||||||
|
$this->setName($base_name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -72,6 +84,30 @@ class CorrectionInfo extends Entity
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Возвращает описание коррекции.
|
||||||
|
* Тег ФФД - 1177.
|
||||||
|
*
|
||||||
|
* @return string|null
|
||||||
|
*/
|
||||||
|
public function getName(): ?string
|
||||||
|
{
|
||||||
|
return $this->base_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Устанавливает описание коррекции.
|
||||||
|
* Тег ФФД - 1177.
|
||||||
|
*
|
||||||
|
* @param string $name
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function setName(string $name): CorrectionInfo
|
||||||
|
{
|
||||||
|
$this->base_name = trim($name);
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает дату документа основания для коррекции.
|
* Возвращает дату документа основания для коррекции.
|
||||||
* Тег ФФД - 1178.
|
* Тег ФФД - 1178.
|
||||||
@ -123,12 +159,13 @@ class CorrectionInfo extends Entity
|
|||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
public function jsonSerialize(): object
|
public function jsonSerialize()
|
||||||
{
|
{
|
||||||
return (object)[
|
return [
|
||||||
'type' => $this->getType() ?? '', // обязателен
|
'type' => $this->getType() ?? '', // обязателен
|
||||||
'base_date' => $this->getDate() ?? '', // обязателен
|
'base_date' => $this->getDate() ?? '', // обязателен
|
||||||
'base_number' => $this->getNumber() ?? '', // обязателен
|
'base_number' => $this->getNumber() ?? '', // обязателен
|
||||||
|
'base_name' => $this->getName() ?? '' // не обязателен
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,149 +0,0 @@
|
|||||||
<?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\Exceptions\EmptyMonitorDataException;
|
|
||||||
use AtolOnline\Exceptions\NotEnoughMonitorDataException;
|
|
||||||
use DateTime;
|
|
||||||
use Exception;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Класс сущности ККТ, получаемой от монитора
|
|
||||||
*
|
|
||||||
* @property string|null serialNumber Заводской номер ККТ
|
|
||||||
* @property string|null registrationNumber Регистрационный номер машины (РНМ)
|
|
||||||
* @property string|null deviceNumber Номер автоматического устройства (внутренний идентификатор устройства)
|
|
||||||
* @property DateTime|string|null fiscalizationDate Дата активации (фискализации) ФН с указанием таймзоны
|
|
||||||
* @property DateTime|string|null fiscalStorageExpiration Дата замены ФН (Срок действия ФН), с указанием таймзоны
|
|
||||||
* @property int|null signedDocuments Количество подписанных документов в ФН
|
|
||||||
* @property float|null fiscalStoragePercentageUse Наполненость ФН в %
|
|
||||||
* @property string|null fiscalStorageINN ИНН компании (указанный в ФН)
|
|
||||||
* @property string|null fiscalStorageSerialNumber Заводской (серийный) номер ФН
|
|
||||||
* @property string|null fiscalStoragePaymentAddress Адрес расчёта, указанный в ФН
|
|
||||||
* @property string|null groupCode Код группы кассы
|
|
||||||
* @property DateTime|string|null timestamp Время и дата формирования данных, UTC
|
|
||||||
* @property bool|null isShiftOpened Признак открыта смена (true) или закрыта (false)
|
|
||||||
* @property int|null shiftNumber Номер смены (или "Номер закрытой смены", когда смена закрыта)
|
|
||||||
* @property int|null shiftReceipt Номер документа за смену (или "Кол-во чеков закрытой смены", когда смена закрыта)
|
|
||||||
* @property int|null unsentDocs Количество неотправленных документов. Указывается, если значение отлично от 0.
|
|
||||||
* @property DateTime|string|null firstUnsetDocTimestamp Дата первого неотправленного документа. Указывается, если
|
|
||||||
* есть неотправленные документы.
|
|
||||||
* @property int|null networkErrorCode Код ошибки сети
|
|
||||||
* @see https://online.atol.ru/files/API_service_information.pdf Документация, стр 11
|
|
||||||
*/
|
|
||||||
final class Kkt extends Entity
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Сопоставление кодов сетевых ошибок ККТ с их описаниями
|
|
||||||
*/
|
|
||||||
public const ERROR_CODES = [
|
|
||||||
0 => 'Нет ошибок',
|
|
||||||
1 => 'Отсутствует физический канал связи',
|
|
||||||
2 => 'Ошибка сетевых настроек или нет соединения с сервером ОФД',
|
|
||||||
3 => 'Разрыв соединения при передаче документа на сервер',
|
|
||||||
4 => 'Некорректный заголовок сессионного пакета',
|
|
||||||
5 => 'Превышен таймаут ожидания квитанции',
|
|
||||||
6 => 'Разрыв соединения при приеме квитанции',
|
|
||||||
7 => 'Превышен таймаут передачи документа на сервер',
|
|
||||||
8 => 'ОФД-процесс не иницилизирован',
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string[] Список обязательных атрибутов
|
|
||||||
*/
|
|
||||||
private array $properties = [
|
|
||||||
'serialNumber',
|
|
||||||
'registrationNumber',
|
|
||||||
'deviceNumber',
|
|
||||||
'fiscalizationDate',
|
|
||||||
'fiscalStorageExpiration',
|
|
||||||
'signedDocuments',
|
|
||||||
'fiscalStoragePercentageUse',
|
|
||||||
'fiscalStorageINN',
|
|
||||||
'fiscalStorageSerialNumber',
|
|
||||||
'fiscalStoragePaymentAddress',
|
|
||||||
'groupCode',
|
|
||||||
'timestamp',
|
|
||||||
'isShiftOpened',
|
|
||||||
'shiftNumber',
|
|
||||||
'shiftReceipt',
|
|
||||||
//'unsentDocs',
|
|
||||||
//'firstUnsetDocTimestamp',
|
|
||||||
'networkErrorCode',
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string[] Массив атрибутов, которые кастуются к DateTime
|
|
||||||
*/
|
|
||||||
private array $timestamps = [
|
|
||||||
'fiscalizationDate',
|
|
||||||
'fiscalStorageExpiration',
|
|
||||||
'firstUnsetDocTimestamp',
|
|
||||||
'timestamp',
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Конструктор
|
|
||||||
*
|
|
||||||
* @throws EmptyMonitorDataException
|
|
||||||
* @throws NotEnoughMonitorDataException
|
|
||||||
*/
|
|
||||||
public function __construct(protected \stdClass $data)
|
|
||||||
{
|
|
||||||
if (empty((array)$data)) {
|
|
||||||
throw new EmptyMonitorDataException();
|
|
||||||
}
|
|
||||||
$diff = array_diff($this->properties, array_keys((array)$data));
|
|
||||||
if (count($diff) !== 0) {
|
|
||||||
throw new NotEnoughMonitorDataException($diff);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Эмулирует обращение к атрибутам
|
|
||||||
*
|
|
||||||
* @param string $name
|
|
||||||
* @return null
|
|
||||||
* @throws Exception
|
|
||||||
*/
|
|
||||||
public function __get(string $name)
|
|
||||||
{
|
|
||||||
if (empty($this->data?->$name)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (in_array($name, $this->timestamps)) {
|
|
||||||
return new DateTime($this->data->$name);
|
|
||||||
}
|
|
||||||
return $this->data->$name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Возвращает объект с информацией о сетевой ошибке
|
|
||||||
*
|
|
||||||
* @return object
|
|
||||||
*/
|
|
||||||
public function getNetworkError(): object
|
|
||||||
{
|
|
||||||
return (object)[
|
|
||||||
'code' => $this->data->networkErrorCode,
|
|
||||||
'text' => self::ERROR_CODES[$this->data->networkErrorCode],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritDoc
|
|
||||||
*/
|
|
||||||
public function jsonSerialize()
|
|
||||||
{
|
|
||||||
return $this->data;
|
|
||||||
}
|
|
||||||
}
|
|
@ -11,7 +11,7 @@ declare(strict_types = 1);
|
|||||||
|
|
||||||
namespace AtolOnline\Entities;
|
namespace AtolOnline\Entities;
|
||||||
|
|
||||||
use AtolOnline\Enums\PaymentTypes;
|
use AtolOnline\Constants\PaymentTypes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Класс, описывающий оплату. Тег ФФД - 1031, 1081, 1215, 1216, 1217.
|
* Класс, описывающий оплату. Тег ФФД - 1031, 1081, 1215, 1216, 1217.
|
||||||
|
@ -11,7 +11,7 @@ declare(strict_types = 1);
|
|||||||
|
|
||||||
namespace AtolOnline\Entities;
|
namespace AtolOnline\Entities;
|
||||||
|
|
||||||
use AtolOnline\Enums\VatTypes;
|
use AtolOnline\Constants\VatTypes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Класс, описывающий ставку НДС
|
* Класс, описывающий ставку НДС
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
<?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\Exceptions;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Исключение, возникающее при попытке создать объект ККТ без данных от монитора
|
|
||||||
*/
|
|
||||||
class EmptyMonitorDataException extends AtolException
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var string Сообщение об ошибке
|
|
||||||
*/
|
|
||||||
protected $message = 'Cannot create KKT entity without data from monitor';
|
|
||||||
}
|
|
@ -11,7 +11,7 @@ declare(strict_types = 1);
|
|||||||
|
|
||||||
namespace AtolOnline\Exceptions;
|
namespace AtolOnline\Exceptions;
|
||||||
|
|
||||||
use AtolOnline\Enums\DocumentTypes;
|
use AtolOnline\Constants\DocumentTypes;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -11,7 +11,7 @@ declare(strict_types = 1);
|
|||||||
|
|
||||||
namespace AtolOnline\Exceptions;
|
namespace AtolOnline\Exceptions;
|
||||||
|
|
||||||
use AtolOnline\Enums\SnoTypes;
|
use AtolOnline\Constants\SnoTypes;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,38 +0,0 @@
|
|||||||
<?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\Exceptions;
|
|
||||||
|
|
||||||
use Throwable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Исключение, возникающее при попытке создать объект ККТ с неполными данными от монитора
|
|
||||||
*/
|
|
||||||
class NotEnoughMonitorDataException extends AtolException
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var string Сообщение об ошибке
|
|
||||||
*/
|
|
||||||
protected $message = 'Cannot create KKT entity without these properties: ';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Конструктор
|
|
||||||
*
|
|
||||||
* @param array $props_diff
|
|
||||||
* @param string $message
|
|
||||||
* @param int $code
|
|
||||||
* @param Throwable|null $previous
|
|
||||||
*/
|
|
||||||
public function __construct(array $props_diff, $message = "", int $code = 0, Throwable $previous = null)
|
|
||||||
{
|
|
||||||
parent::__construct($message ?: $this->message . implode(', ', $props_diff), $code, $previous);
|
|
||||||
}
|
|
||||||
}
|
|
@ -46,6 +46,7 @@ class BasicTestCase extends TestCase
|
|||||||
* Проверяет доступность API мониторинга
|
* Проверяет доступность API мониторинга
|
||||||
*
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
|
* @throws GuzzleException
|
||||||
*/
|
*/
|
||||||
protected function isMonitoringOnline(): bool
|
protected function isMonitoringOnline(): bool
|
||||||
{
|
{
|
||||||
@ -53,7 +54,9 @@ class BasicTestCase extends TestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Пропускает текущий тест если API мониторинга недоступен
|
* Пропускает текущий тест если API мониторинга недоступно
|
||||||
|
*
|
||||||
|
* @throws GuzzleException
|
||||||
*/
|
*/
|
||||||
protected function skipIfMonitoringIsOffline(): void
|
protected function skipIfMonitoringIsOffline(): void
|
||||||
{
|
{
|
||||||
@ -87,7 +90,7 @@ class BasicTestCase extends TestCase
|
|||||||
* @param object|string $expected
|
* @param object|string $expected
|
||||||
* @param object|string $actual
|
* @param object|string $actual
|
||||||
*/
|
*/
|
||||||
public function assertIsSameClass(object|string $expected, object|string $actual): void
|
public function assertIsSameClass(object|string $expected, object|string $actual)
|
||||||
{
|
{
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
is_object($expected) ? $expected::class : $expected,
|
is_object($expected) ? $expected::class : $expected,
|
||||||
@ -101,7 +104,7 @@ class BasicTestCase extends TestCase
|
|||||||
* @param string[] $parents
|
* @param string[] $parents
|
||||||
* @param object|string $actual
|
* @param object|string $actual
|
||||||
*/
|
*/
|
||||||
public function assertExtendsClasses(array $parents, object|string $actual): void
|
public function assertExtendsClasses(array $parents, object|string $actual)
|
||||||
{
|
{
|
||||||
$this->checkClassesIntersection($parents, $actual, 'class_parents');
|
$this->checkClassesIntersection($parents, $actual, 'class_parents');
|
||||||
}
|
}
|
||||||
@ -112,7 +115,7 @@ class BasicTestCase extends TestCase
|
|||||||
* @param string[] $parents
|
* @param string[] $parents
|
||||||
* @param object|string $actual
|
* @param object|string $actual
|
||||||
*/
|
*/
|
||||||
public function assertImplementsInterfaces(array $parents, object|string $actual): void
|
public function assertImplementsInterfaces(array $parents, object|string $actual)
|
||||||
{
|
{
|
||||||
$this->checkClassesIntersection($parents, $actual, 'class_implements');
|
$this->checkClassesIntersection($parents, $actual, 'class_implements');
|
||||||
}
|
}
|
||||||
@ -123,7 +126,7 @@ class BasicTestCase extends TestCase
|
|||||||
* @param string[] $parents
|
* @param string[] $parents
|
||||||
* @param object|string $actual
|
* @param object|string $actual
|
||||||
*/
|
*/
|
||||||
public function assertUsesTraits(array $parents, object|string $actual): void
|
public function assertUsesTraits(array $parents, object|string $actual)
|
||||||
{
|
{
|
||||||
$this->checkClassesIntersection($parents, $actual, 'class_uses');
|
$this->checkClassesIntersection($parents, $actual, 'class_uses');
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,8 @@
|
|||||||
namespace AtolOnlineTests;
|
namespace AtolOnlineTests;
|
||||||
|
|
||||||
use AtolOnline\{
|
use AtolOnline\{
|
||||||
|
Constants\SnoTypes,
|
||||||
Entities\Company,
|
Entities\Company,
|
||||||
Enums\SnoTypes,
|
|
||||||
Exceptions\InvalidEmailException,
|
Exceptions\InvalidEmailException,
|
||||||
Exceptions\InvalidInnLengthException,
|
Exceptions\InvalidInnLengthException,
|
||||||
Exceptions\InvalidPaymentAddressException,
|
Exceptions\InvalidPaymentAddressException,
|
||||||
|
@ -10,10 +10,10 @@
|
|||||||
namespace AtolOnlineTests;
|
namespace AtolOnlineTests;
|
||||||
|
|
||||||
use AtolOnline\{
|
use AtolOnline\{
|
||||||
|
Constants\PaymentMethods,
|
||||||
|
Constants\PaymentObjects,
|
||||||
|
Constants\VatTypes,
|
||||||
Entities\Item,
|
Entities\Item,
|
||||||
Enums\PaymentMethods,
|
|
||||||
Enums\PaymentObjects,
|
|
||||||
Enums\VatTypes,
|
|
||||||
Exceptions\BasicTooManyException,
|
Exceptions\BasicTooManyException,
|
||||||
Exceptions\TooHighPriceException,
|
Exceptions\TooHighPriceException,
|
||||||
Exceptions\TooLongNameException,
|
Exceptions\TooLongNameException,
|
||||||
|
@ -1,153 +0,0 @@
|
|||||||
<?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 AtolOnlineTests;
|
|
||||||
|
|
||||||
use AtolOnline\Entities\Kkt;
|
|
||||||
use AtolOnline\Exceptions\EmptyMonitorDataException;
|
|
||||||
use AtolOnline\Exceptions\NotEnoughMonitorDataException;
|
|
||||||
use DateTime;
|
|
||||||
use Exception;
|
|
||||||
|
|
||||||
class KktEntityTest extends BasicTestCase
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var array Данные для создания объекта ККТ
|
|
||||||
*/
|
|
||||||
private array $sample_data = [
|
|
||||||
'serialNumber' => '00107703864827',
|
|
||||||
'registrationNumber' => '0000000003027865',
|
|
||||||
'deviceNumber' => 'KKT024219',
|
|
||||||
'fiscalizationDate' => '2019-07-22T14:03:00+00:00',
|
|
||||||
'fiscalStorageExpiration' => '2020-11-02T21:00:00+00:00',
|
|
||||||
'signedDocuments' => 213350,
|
|
||||||
'fiscalStoragePercentageUse' => 85.34,
|
|
||||||
'fiscalStorageINN' => '3026455760',
|
|
||||||
'fiscalStorageSerialNumber' => '9999078902004339',
|
|
||||||
'fiscalStoragePaymentAddress' => 'test.qa.ru',
|
|
||||||
'groupCode' => 'test-qa-ru_14605',
|
|
||||||
'timestamp' => '2019-12-05T10:45:30+00:00',
|
|
||||||
'isShiftOpened' => true,
|
|
||||||
'shiftNumber' => 126,
|
|
||||||
'shiftReceipt' => 2278,
|
|
||||||
//'unsentDocs' => 123,
|
|
||||||
'firstUnsetDocTimestamp' => 'there must be timestamp, but we want to get exception here to get string',
|
|
||||||
'networkErrorCode' => 2,
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Тестирует создание объекта ККТ с валидными данными
|
|
||||||
*
|
|
||||||
* @covers \AtolOnline\Entities\Kkt::__construct
|
|
||||||
* @covers \AtolOnline\Entities\Kkt::__get
|
|
||||||
* @covers \AtolOnline\Entities\Kkt::jsonSerialize
|
|
||||||
* @covers \AtolOnline\Entities\Kkt::__toString
|
|
||||||
* @throws Exception
|
|
||||||
*/
|
|
||||||
public function testConstructor(): void
|
|
||||||
{
|
|
||||||
$kkt = new Kkt((object)$this->sample_data);
|
|
||||||
$this->assertIsSameClass(Kkt::class, $kkt);
|
|
||||||
$this->assertAtolable($kkt);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Тестирует исключение при попытке создать объект ККТ без данных от монитора
|
|
||||||
*
|
|
||||||
* @covers \AtolOnline\Entities\Kkt::__construct
|
|
||||||
* @covers \AtolOnline\Exceptions\EmptyMonitorDataException
|
|
||||||
* @throws EmptyMonitorDataException
|
|
||||||
* @throws NotEnoughMonitorDataException
|
|
||||||
*/
|
|
||||||
public function testEmptyMonitorDataException(): void
|
|
||||||
{
|
|
||||||
$this->expectException(EmptyMonitorDataException::class);
|
|
||||||
new Kkt((object)[]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Тестирует исключение при попытке создать объект ККТ без данных от монитора
|
|
||||||
*
|
|
||||||
* @covers \AtolOnline\Entities\Kkt::__construct
|
|
||||||
* @covers \AtolOnline\Exceptions\NotEnoughMonitorDataException
|
|
||||||
* @throws EmptyMonitorDataException
|
|
||||||
* @throws NotEnoughMonitorDataException
|
|
||||||
*/
|
|
||||||
public function testNotEnoughMonitorDataException(): void
|
|
||||||
{
|
|
||||||
$this->expectException(NotEnoughMonitorDataException::class);
|
|
||||||
new Kkt((object)[
|
|
||||||
'fiscalizationDate' => '2021-11-20T10:21:00+00:00',
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Тестирует получение атрибутов через магический геттер
|
|
||||||
*
|
|
||||||
* @covers \AtolOnline\Entities\Kkt::__get
|
|
||||||
* @throws EmptyMonitorDataException
|
|
||||||
* @throws NotEnoughMonitorDataException
|
|
||||||
*/
|
|
||||||
public function testMagicGetter(): void
|
|
||||||
{
|
|
||||||
$kkt = new Kkt((object)$this->sample_data);
|
|
||||||
|
|
||||||
// string
|
|
||||||
$this->assertNotNull($kkt->serialNumber);
|
|
||||||
$this->assertIsString($kkt->serialNumber);
|
|
||||||
$this->assertEquals($this->sample_data['serialNumber'], $kkt->serialNumber);
|
|
||||||
|
|
||||||
// int
|
|
||||||
$this->assertNotNull($kkt->signedDocuments);
|
|
||||||
$this->assertIsInt($kkt->signedDocuments);
|
|
||||||
|
|
||||||
// float
|
|
||||||
$this->assertNotNull($kkt->signedDocuments);
|
|
||||||
$this->assertIsFloat($kkt->fiscalStoragePercentageUse);
|
|
||||||
|
|
||||||
// null
|
|
||||||
$this->assertNull($kkt->unsentDocs);
|
|
||||||
|
|
||||||
// DateTime
|
|
||||||
$this->assertNotNull($kkt->fiscalizationDate);
|
|
||||||
$this->assertIsSameClass(DateTime::class, $kkt->fiscalizationDate);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Тестирует исключение при попытке получить некорректный DateTime через магический геттер
|
|
||||||
*
|
|
||||||
* @covers \AtolOnline\Entities\Kkt::__get
|
|
||||||
* @throws EmptyMonitorDataException
|
|
||||||
* @throws NotEnoughMonitorDataException
|
|
||||||
*/
|
|
||||||
public function testDateTimeException(): void
|
|
||||||
{
|
|
||||||
$this->expectException(Exception::class);
|
|
||||||
(new Kkt((object)$this->sample_data))->firstUnsetDocTimestamp;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Тестирует получение данных о сетевой ошибке
|
|
||||||
*
|
|
||||||
* @covers \AtolOnline\Entities\Kkt::getNetworkError
|
|
||||||
* @throws EmptyMonitorDataException
|
|
||||||
* @throws NotEnoughMonitorDataException
|
|
||||||
*/
|
|
||||||
public function testGetNetworkError(): void
|
|
||||||
{
|
|
||||||
$kkt = new Kkt((object)$this->sample_data);
|
|
||||||
$this->assertIsObject($kkt->getNetworkError());
|
|
||||||
$this->assertEquals((object)[
|
|
||||||
'code' => $kkt->networkErrorCode,
|
|
||||||
'text' => $kkt::ERROR_CODES[$kkt->networkErrorCode],
|
|
||||||
], $kkt->getNetworkError());
|
|
||||||
}
|
|
||||||
}
|
|
@ -5,12 +5,9 @@ namespace AtolOnlineTests;
|
|||||||
use AtolOnline\Api\AtolClient;
|
use AtolOnline\Api\AtolClient;
|
||||||
use AtolOnline\Api\KktMonitor;
|
use AtolOnline\Api\KktMonitor;
|
||||||
use AtolOnline\Api\KktResponse;
|
use AtolOnline\Api\KktResponse;
|
||||||
use AtolOnline\Entities\Kkt;
|
|
||||||
use AtolOnline\Exceptions\AuthFailedException;
|
use AtolOnline\Exceptions\AuthFailedException;
|
||||||
use AtolOnline\Exceptions\EmptyLoginException;
|
use AtolOnline\Exceptions\EmptyLoginException;
|
||||||
use AtolOnline\Exceptions\EmptyMonitorDataException;
|
|
||||||
use AtolOnline\Exceptions\EmptyPasswordException;
|
use AtolOnline\Exceptions\EmptyPasswordException;
|
||||||
use AtolOnline\Exceptions\NotEnoughMonitorDataException;
|
|
||||||
use AtolOnline\Exceptions\TooLongLoginException;
|
use AtolOnline\Exceptions\TooLongLoginException;
|
||||||
use AtolOnline\Exceptions\TooLongPasswordException;
|
use AtolOnline\Exceptions\TooLongPasswordException;
|
||||||
use AtolOnline\Helpers;
|
use AtolOnline\Helpers;
|
||||||
@ -22,29 +19,12 @@ use GuzzleHttp\Exception\GuzzleException;
|
|||||||
*/
|
*/
|
||||||
class KktMonitorTest extends BasicTestCase
|
class KktMonitorTest extends BasicTestCase
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Возвращает объект клиента для тестирования с тестовым API АТОЛ
|
|
||||||
*
|
|
||||||
* @return AtolClient
|
|
||||||
* @throws EmptyLoginException
|
|
||||||
* @throws EmptyPasswordException
|
|
||||||
* @throws TooLongLoginException
|
|
||||||
* @throws TooLongPasswordException
|
|
||||||
*/
|
|
||||||
private function newTestClient(): KktMonitor
|
|
||||||
{
|
|
||||||
$credentials = TestEnvParams::FFD105();
|
|
||||||
return (new KktMonitor(true))
|
|
||||||
->setLogin($credentials['login'])
|
|
||||||
->setPassword($credentials['password']);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Тестирует успешное создание объекта монитора без аргументов конструктора
|
* Тестирует успешное создание объекта монитора без аргументов конструктора
|
||||||
*
|
*
|
||||||
* @covers \AtolOnline\Api\KktMonitor::__construct
|
* @covers \AtolOnline\Api\KktMonitor::__construct
|
||||||
*/
|
*/
|
||||||
public function testConstructorWithoutArgs(): void
|
public function testConstructorWithoutArgs()
|
||||||
{
|
{
|
||||||
$client = new KktMonitor();
|
$client = new KktMonitor();
|
||||||
$this->assertIsObject($client);
|
$this->assertIsObject($client);
|
||||||
@ -65,7 +45,7 @@ class KktMonitorTest extends BasicTestCase
|
|||||||
* @throws TooLongLoginException
|
* @throws TooLongLoginException
|
||||||
* @throws TooLongPasswordException
|
* @throws TooLongPasswordException
|
||||||
*/
|
*/
|
||||||
public function testConstructorWithArgs(): void
|
public function testConstructorWithArgs()
|
||||||
{
|
{
|
||||||
$client = new KktMonitor(false, 'login', 'password', []);
|
$client = new KktMonitor(false, 'login', 'password', []);
|
||||||
$this->assertIsObject($client);
|
$this->assertIsObject($client);
|
||||||
@ -82,7 +62,7 @@ class KktMonitorTest extends BasicTestCase
|
|||||||
* @throws EmptyLoginException
|
* @throws EmptyLoginException
|
||||||
* @throws TooLongLoginException
|
* @throws TooLongLoginException
|
||||||
*/
|
*/
|
||||||
public function testLogin(): void
|
public function testLogin()
|
||||||
{
|
{
|
||||||
$client = new KktMonitor(login: 'login');
|
$client = new KktMonitor(login: 'login');
|
||||||
$this->assertEquals('login', $client->getLogin());
|
$this->assertEquals('login', $client->getLogin());
|
||||||
@ -101,7 +81,7 @@ class KktMonitorTest extends BasicTestCase
|
|||||||
* @covers \AtolOnline\Api\KktMonitor::setLogin
|
* @covers \AtolOnline\Api\KktMonitor::setLogin
|
||||||
* @covers \AtolOnline\Exceptions\EmptyLoginException
|
* @covers \AtolOnline\Exceptions\EmptyLoginException
|
||||||
*/
|
*/
|
||||||
public function testEmptyLoginException(): void
|
public function testEmptyLoginException()
|
||||||
{
|
{
|
||||||
$this->expectException(EmptyLoginException::class);
|
$this->expectException(EmptyLoginException::class);
|
||||||
new KktMonitor(login: '');
|
new KktMonitor(login: '');
|
||||||
@ -118,7 +98,7 @@ class KktMonitorTest extends BasicTestCase
|
|||||||
* @throws TooLongLoginException
|
* @throws TooLongLoginException
|
||||||
* @throws TooLongPasswordException
|
* @throws TooLongPasswordException
|
||||||
*/
|
*/
|
||||||
public function testTooLongLoginException(): void
|
public function testTooLongLoginException()
|
||||||
{
|
{
|
||||||
$this->expectException(TooLongLoginException::class);
|
$this->expectException(TooLongLoginException::class);
|
||||||
new KktMonitor(login: Helpers::randomStr(101));
|
new KktMonitor(login: Helpers::randomStr(101));
|
||||||
@ -133,7 +113,7 @@ class KktMonitorTest extends BasicTestCase
|
|||||||
* @throws EmptyPasswordException
|
* @throws EmptyPasswordException
|
||||||
* @throws TooLongPasswordException
|
* @throws TooLongPasswordException
|
||||||
*/
|
*/
|
||||||
public function testPassword(): void
|
public function testPassword()
|
||||||
{
|
{
|
||||||
$client = new KktMonitor(password: 'password');
|
$client = new KktMonitor(password: 'password');
|
||||||
$this->assertEquals('password', $client->getPassword());
|
$this->assertEquals('password', $client->getPassword());
|
||||||
@ -152,7 +132,7 @@ class KktMonitorTest extends BasicTestCase
|
|||||||
* @covers \AtolOnline\Api\KktMonitor::setPassword
|
* @covers \AtolOnline\Api\KktMonitor::setPassword
|
||||||
* @covers \AtolOnline\Exceptions\EmptyPasswordException
|
* @covers \AtolOnline\Exceptions\EmptyPasswordException
|
||||||
*/
|
*/
|
||||||
public function testEmptyPasswordException(): void
|
public function testEmptyPasswordException()
|
||||||
{
|
{
|
||||||
$this->expectException(EmptyPasswordException::class);
|
$this->expectException(EmptyPasswordException::class);
|
||||||
new KktMonitor(password: '');
|
new KktMonitor(password: '');
|
||||||
@ -168,7 +148,7 @@ class KktMonitorTest extends BasicTestCase
|
|||||||
* @throws TooLongLoginException
|
* @throws TooLongLoginException
|
||||||
* @throws TooLongPasswordException
|
* @throws TooLongPasswordException
|
||||||
*/
|
*/
|
||||||
public function testConstructorWithLongPassword(): void
|
public function testConstructorWithLongPassword()
|
||||||
{
|
{
|
||||||
$this->expectException(TooLongPasswordException::class);
|
$this->expectException(TooLongPasswordException::class);
|
||||||
new KktMonitor(password: Helpers::randomStr(101));
|
new KktMonitor(password: Helpers::randomStr(101));
|
||||||
@ -181,7 +161,7 @@ class KktMonitorTest extends BasicTestCase
|
|||||||
* @covers \AtolOnline\Api\KktMonitor::isTestMode
|
* @covers \AtolOnline\Api\KktMonitor::isTestMode
|
||||||
* @covers \AtolOnline\Api\KktMonitor::setTestMode
|
* @covers \AtolOnline\Api\KktMonitor::setTestMode
|
||||||
*/
|
*/
|
||||||
public function testTestMode(): void
|
public function testTestMode()
|
||||||
{
|
{
|
||||||
$client = new KktMonitor();
|
$client = new KktMonitor();
|
||||||
$this->assertTrue($client->isTestMode());
|
$this->assertTrue($client->isTestMode());
|
||||||
@ -202,6 +182,23 @@ class KktMonitorTest extends BasicTestCase
|
|||||||
$this->assertFalse($client->isTestMode());
|
$this->assertFalse($client->isTestMode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Возвращает объект клиента для тестирования с тестовым API АТОЛ
|
||||||
|
*
|
||||||
|
* @return AtolClient
|
||||||
|
* @throws EmptyLoginException
|
||||||
|
* @throws EmptyPasswordException
|
||||||
|
* @throws TooLongLoginException
|
||||||
|
* @throws TooLongPasswordException
|
||||||
|
*/
|
||||||
|
private function newTestClient(): KktMonitor
|
||||||
|
{
|
||||||
|
$credentials = TestEnvParams::FFD105();
|
||||||
|
return (new KktMonitor(true))
|
||||||
|
->setLogin($credentials['login'])
|
||||||
|
->setPassword($credentials['password']);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Тестирует авторизацию
|
* Тестирует авторизацию
|
||||||
*
|
*
|
||||||
@ -210,7 +207,6 @@ class KktMonitorTest extends BasicTestCase
|
|||||||
* @covers \AtolOnline\Api\KktMonitor::getAuthEndpoint
|
* @covers \AtolOnline\Api\KktMonitor::getAuthEndpoint
|
||||||
* @covers \AtolOnline\Api\KktMonitor::doAuth
|
* @covers \AtolOnline\Api\KktMonitor::doAuth
|
||||||
* @covers \AtolOnline\Api\KktMonitor::auth
|
* @covers \AtolOnline\Api\KktMonitor::auth
|
||||||
* @covers \AtolOnline\Exceptions\AuthFailedException
|
|
||||||
* @throws EmptyLoginException
|
* @throws EmptyLoginException
|
||||||
* @throws EmptyPasswordException
|
* @throws EmptyPasswordException
|
||||||
* @throws TooLongLoginException
|
* @throws TooLongLoginException
|
||||||
@ -218,7 +214,7 @@ class KktMonitorTest extends BasicTestCase
|
|||||||
* @throws AuthFailedException
|
* @throws AuthFailedException
|
||||||
* @throws GuzzleException
|
* @throws GuzzleException
|
||||||
*/
|
*/
|
||||||
public function testAuth(): void
|
public function testAuth()
|
||||||
{
|
{
|
||||||
$this->skipIfMonitoringIsOffline();
|
$this->skipIfMonitoringIsOffline();
|
||||||
$result = $this->newTestClient()->auth();
|
$result = $this->newTestClient()->auth();
|
||||||
@ -231,7 +227,6 @@ class KktMonitorTest extends BasicTestCase
|
|||||||
* @depends testAuth
|
* @depends testAuth
|
||||||
* @covers \AtolOnline\Api\KktMonitor::setToken
|
* @covers \AtolOnline\Api\KktMonitor::setToken
|
||||||
* @covers \AtolOnline\Api\KktMonitor::getToken
|
* @covers \AtolOnline\Api\KktMonitor::getToken
|
||||||
* @covers \AtolOnline\Exceptions\AuthFailedException
|
|
||||||
* @throws AuthFailedException
|
* @throws AuthFailedException
|
||||||
* @throws EmptyLoginException
|
* @throws EmptyLoginException
|
||||||
* @throws EmptyPasswordException
|
* @throws EmptyPasswordException
|
||||||
@ -239,7 +234,7 @@ class KktMonitorTest extends BasicTestCase
|
|||||||
* @throws TooLongLoginException
|
* @throws TooLongLoginException
|
||||||
* @throws TooLongPasswordException
|
* @throws TooLongPasswordException
|
||||||
*/
|
*/
|
||||||
public function testGetToken(): void
|
public function testGetToken()
|
||||||
{
|
{
|
||||||
$client = new KktMonitor();
|
$client = new KktMonitor();
|
||||||
$this->assertNull($client->getToken());
|
$this->assertNull($client->getToken());
|
||||||
@ -255,7 +250,6 @@ class KktMonitorTest extends BasicTestCase
|
|||||||
*
|
*
|
||||||
* @depends testAuth
|
* @depends testAuth
|
||||||
* @covers \AtolOnline\Api\KktMonitor::getResponse
|
* @covers \AtolOnline\Api\KktMonitor::getResponse
|
||||||
* @covers \AtolOnline\Exceptions\AuthFailedException
|
|
||||||
* @throws AuthFailedException
|
* @throws AuthFailedException
|
||||||
* @throws EmptyLoginException
|
* @throws EmptyLoginException
|
||||||
* @throws EmptyPasswordException
|
* @throws EmptyPasswordException
|
||||||
@ -263,7 +257,7 @@ class KktMonitorTest extends BasicTestCase
|
|||||||
* @throws TooLongLoginException
|
* @throws TooLongLoginException
|
||||||
* @throws TooLongPasswordException
|
* @throws TooLongPasswordException
|
||||||
*/
|
*/
|
||||||
public function testGetResponse(): void
|
public function testGetResponse()
|
||||||
{
|
{
|
||||||
$this->skipIfMonitoringIsOffline();
|
$this->skipIfMonitoringIsOffline();
|
||||||
$client = $this->newTestClient();
|
$client = $this->newTestClient();
|
||||||
@ -279,7 +273,6 @@ class KktMonitorTest extends BasicTestCase
|
|||||||
* @covers \AtolOnline\Api\AtolClient::getUrlToMethod
|
* @covers \AtolOnline\Api\AtolClient::getUrlToMethod
|
||||||
* @covers \AtolOnline\Api\KktMonitor::fetchAll
|
* @covers \AtolOnline\Api\KktMonitor::fetchAll
|
||||||
* @covers \AtolOnline\Api\KktMonitor::getAll
|
* @covers \AtolOnline\Api\KktMonitor::getAll
|
||||||
* @covers \AtolOnline\Exceptions\AuthFailedException
|
|
||||||
* @throws AuthFailedException
|
* @throws AuthFailedException
|
||||||
* @throws EmptyLoginException
|
* @throws EmptyLoginException
|
||||||
* @throws EmptyPasswordException
|
* @throws EmptyPasswordException
|
||||||
@ -287,7 +280,7 @@ class KktMonitorTest extends BasicTestCase
|
|||||||
* @throws TooLongLoginException
|
* @throws TooLongLoginException
|
||||||
* @throws TooLongPasswordException
|
* @throws TooLongPasswordException
|
||||||
*/
|
*/
|
||||||
public function testMonitorGetAll(): void
|
public function testMonitorGetAll()
|
||||||
{
|
{
|
||||||
$this->skipIfMonitoringIsOffline();
|
$this->skipIfMonitoringIsOffline();
|
||||||
$client = $this->newTestClient();
|
$client = $this->newTestClient();
|
||||||
@ -296,7 +289,6 @@ class KktMonitorTest extends BasicTestCase
|
|||||||
$this->assertNotEmpty($client->getResponse()->getContent());
|
$this->assertNotEmpty($client->getResponse()->getContent());
|
||||||
$this->assertIsCollection($kkts);
|
$this->assertIsCollection($kkts);
|
||||||
$this->assertTrue($kkts->count() > 0);
|
$this->assertTrue($kkts->count() > 0);
|
||||||
$this->assertIsSameClass(Kkt::class, $kkts->random());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -307,30 +299,24 @@ class KktMonitorTest extends BasicTestCase
|
|||||||
* @covers \AtolOnline\Api\AtolClient::getUrlToMethod
|
* @covers \AtolOnline\Api\AtolClient::getUrlToMethod
|
||||||
* @covers \AtolOnline\Api\KktMonitor::fetchOne
|
* @covers \AtolOnline\Api\KktMonitor::fetchOne
|
||||||
* @covers \AtolOnline\Api\KktMonitor::getOne
|
* @covers \AtolOnline\Api\KktMonitor::getOne
|
||||||
* @covers \AtolOnline\Entities\Kkt::__construct
|
|
||||||
* @covers \AtolOnline\Entities\Kkt::__get
|
|
||||||
* @covers \AtolOnline\Entities\Kkt::jsonSerialize
|
|
||||||
* @covers \AtolOnline\Entities\Kkt::__toString
|
|
||||||
* @throws AuthFailedException
|
* @throws AuthFailedException
|
||||||
* @throws EmptyLoginException
|
* @throws EmptyLoginException
|
||||||
* @throws EmptyPasswordException
|
* @throws EmptyPasswordException
|
||||||
* @throws GuzzleException
|
* @throws GuzzleException
|
||||||
* @throws TooLongLoginException
|
* @throws TooLongLoginException
|
||||||
* @throws TooLongPasswordException
|
* @throws TooLongPasswordException
|
||||||
* @throws EmptyMonitorDataException
|
|
||||||
* @throws NotEnoughMonitorDataException
|
|
||||||
*/
|
*/
|
||||||
public function testMOnitorGetOne(): void
|
public function testGetOne()
|
||||||
{
|
{
|
||||||
$this->skipIfMonitoringIsOffline();
|
$this->skipIfMonitoringIsOffline();
|
||||||
$client = $this->newTestClient();
|
$client = $this->newTestClient();
|
||||||
$client->auth();
|
$client->auth();
|
||||||
$serial_number = $client->getAll()->random()->serialNumber;
|
$kkts = $client->getAll();
|
||||||
$kkt = $client->getOne($serial_number);
|
$serial_number = $kkts->first()->serialNumber;
|
||||||
|
$client->getOne($serial_number);
|
||||||
|
$this->assertIsSameClass(KktResponse::class, $client->getResponse());
|
||||||
$this->assertNotEmpty($client->getResponse());
|
$this->assertNotEmpty($client->getResponse());
|
||||||
$this->assertIsSameClass(Kkt::class, $kkt);
|
$this->assertNotNull($client->getResponse()->data->serialNumber);
|
||||||
$this->assertAtolable($kkt);
|
$this->assertEquals($serial_number, $client->getResponse()->data->serialNumber);
|
||||||
$this->assertNotNull($kkt->serialNumber);
|
|
||||||
$this->assertEquals($serial_number, $kkt->serialNumber);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,9 @@
|
|||||||
namespace AtolOnlineTests;
|
namespace AtolOnlineTests;
|
||||||
|
|
||||||
use AtolOnline\{
|
use AtolOnline\{
|
||||||
Entities\Vat,
|
Constants\VatTypes,
|
||||||
Enums\VatTypes};
|
Entities\Vat
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class VatTest
|
* Class VatTest
|
||||||
|
Loading…
Reference in New Issue
Block a user