Рефакторинг исключений, новые константы ограничений
Описывать все слишком долго, TLDR:
- упрощены корневые AtolException, {BasicTooLongException => TooLongException}, {BasicTooManyException => TooManyException}
- InvalidSnoException заменён на InvalidEnumValueException
- добавлены новые константы, общий порядок изменён в соответствии с порядком упоминания в документации, ссылки на которую тоже добавлены с указанием страниц
Помимо этого, в enum-ах теперь должен быть предусмотрен метод getFfdTags()
This commit is contained in:
@@ -12,6 +12,7 @@ declare(strict_types = 1);
|
||||
namespace AtolOnlineTests;
|
||||
|
||||
use AtolOnline\Entities\Entity;
|
||||
use AtolOnline\Helpers;
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
use Illuminate\Support\Collection;
|
||||
@@ -89,57 +90,40 @@ class BasicTestCase extends TestCase
|
||||
*/
|
||||
public function assertIsSameClass(object|string $expected, object|string $actual): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
is_object($expected) ? $expected::class : $expected,
|
||||
is_object($actual) ? $actual::class : $actual
|
||||
);
|
||||
$this->assertTrue(Helpers::isSameClass($expected, $actual));
|
||||
}
|
||||
|
||||
/**
|
||||
* Тестирует наследование класса (объекта) от указанных классов
|
||||
*
|
||||
* @param object|string $class
|
||||
* @param string[] $parents
|
||||
* @param object|string $actual
|
||||
*/
|
||||
public function assertExtendsClasses(array $parents, object|string $actual): void
|
||||
public function assertExtendsClasses(object|string $class, array $parents): void
|
||||
{
|
||||
$this->checkClassesIntersection($parents, $actual, 'class_parents');
|
||||
$this->assertTrue(Helpers::checkExtendsClasses($class, $parents));
|
||||
}
|
||||
|
||||
/**
|
||||
* Тестирует имплементацию классом (объектом) указанных интерфейсов
|
||||
*
|
||||
* @param string[] $parents
|
||||
* @param object|string $actual
|
||||
* @param object|string $class
|
||||
* @param string[] $interfaces
|
||||
*/
|
||||
public function assertImplementsInterfaces(array $parents, object|string $actual): void
|
||||
public function assertImplementsInterfaces(object|string $class, array $interfaces): void
|
||||
{
|
||||
$this->checkClassesIntersection($parents, $actual, 'class_implements');
|
||||
$this->assertTrue(Helpers::checkImplementsInterfaces($class, $interfaces));
|
||||
}
|
||||
|
||||
/**
|
||||
* Тестирует использование классом (объектом) указанных трейтов
|
||||
*
|
||||
* @param string[] $parents
|
||||
* @param object|string $actual
|
||||
* @param object|string $class
|
||||
* @param string[] $traits
|
||||
*/
|
||||
public function assertUsesTraits(array $parents, object|string $actual): void
|
||||
public function assertUsesTraits(object|string $class, array $traits): void
|
||||
{
|
||||
$this->checkClassesIntersection($parents, $actual, 'class_uses');
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет пересечение классов указанной функцией SPL
|
||||
*
|
||||
* @param object|string $class Класс для проверки на вхождение, или объект, класс коего нужно проверить
|
||||
* @param array $classes Массив классов, вхождение в который нужно проверить
|
||||
* @param string $function class_parents|class_implements|class_uses
|
||||
*/
|
||||
protected function checkClassesIntersection(array $classes, object|string $class, string $function): void
|
||||
{
|
||||
$actual_classes = is_object($class) ? $function($class) : [$class::class];
|
||||
$this->assertIsArray($actual_classes);
|
||||
$this->assertNotEmpty(array_intersect($classes, $actual_classes));
|
||||
$this->assertTrue(Helpers::checkUsesTraits($traits, $class));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -13,11 +13,11 @@ use AtolOnline\{
|
||||
Entities\Client,
|
||||
Exceptions\InvalidEmailException,
|
||||
Exceptions\InvalidInnLengthException,
|
||||
Exceptions\TooLongClientContactException,
|
||||
Exceptions\TooLongClientNameException,
|
||||
Exceptions\TooLongEmailException,
|
||||
Exceptions\TooLongNameException,
|
||||
Exceptions\TooLongPhoneException,
|
||||
Helpers
|
||||
};
|
||||
Exceptions\TooLongItemNameException,
|
||||
Helpers};
|
||||
|
||||
/**
|
||||
* Набор тестов для проверки работы класс покупателя
|
||||
@@ -135,7 +135,7 @@ class ClientTest extends BasicTestCase
|
||||
* @covers \AtolOnline\Entities\Client
|
||||
* @covers \AtolOnline\Entities\Client::setName
|
||||
* @covers \AtolOnline\Entities\Client::getName
|
||||
* @throws TooLongNameException
|
||||
* @throws TooLongClientNameException
|
||||
*/
|
||||
public function testNullableNames(mixed $name): void
|
||||
{
|
||||
@@ -149,7 +149,7 @@ class ClientTest extends BasicTestCase
|
||||
* @covers \AtolOnline\Entities\Client
|
||||
* @covers \AtolOnline\Entities\Client::setName
|
||||
* @covers \AtolOnline\Entities\Client::getName
|
||||
* @throws TooLongNameException
|
||||
* @throws TooLongItemNameException
|
||||
*/
|
||||
public function testValidName(): void
|
||||
{
|
||||
@@ -163,12 +163,11 @@ class ClientTest extends BasicTestCase
|
||||
*
|
||||
* @covers \AtolOnline\Entities\Client
|
||||
* @covers \AtolOnline\Entities\Client::setName
|
||||
* @covers \AtolOnline\Exceptions\TooLongNameException
|
||||
* @throws TooLongNameException
|
||||
* @covers \AtolOnline\Exceptions\TooLongClientNameException
|
||||
*/
|
||||
public function testInvalidName(): void
|
||||
{
|
||||
$this->expectException(TooLongNameException::class);
|
||||
$this->expectException(TooLongClientNameException::class);
|
||||
(new Client())->setName(Helpers::randomStr(400));
|
||||
}
|
||||
|
||||
@@ -182,7 +181,7 @@ class ClientTest extends BasicTestCase
|
||||
* @covers \AtolOnline\Entities\Client
|
||||
* @covers \AtolOnline\Entities\Client::setPhone
|
||||
* @covers \AtolOnline\Entities\Client::getPhone
|
||||
* @throws TooLongPhoneException
|
||||
* @throws TooLongClientContactException
|
||||
*/
|
||||
public function testNullablePhones(mixed $phone): void
|
||||
{
|
||||
@@ -197,7 +196,7 @@ class ClientTest extends BasicTestCase
|
||||
* @covers \AtolOnline\Entities\Client
|
||||
* @covers \AtolOnline\Entities\Client::setPhone
|
||||
* @covers \AtolOnline\Entities\Client::getPhone
|
||||
* @throws TooLongPhoneException
|
||||
* @throws TooLongClientContactException
|
||||
*/
|
||||
public function testValidPhone(string $input, string $output): void
|
||||
{
|
||||
@@ -210,12 +209,12 @@ class ClientTest extends BasicTestCase
|
||||
*
|
||||
* @covers \AtolOnline\Entities\Client
|
||||
* @covers \AtolOnline\Entities\Client::setPhone
|
||||
* @covers \AtolOnline\Exceptions\TooLongPhoneException
|
||||
* @throws TooLongPhoneException
|
||||
* @covers \AtolOnline\Exceptions\TooLongClientContactException
|
||||
* @throws TooLongClientContactException
|
||||
*/
|
||||
public function testInvalidPhone(): void
|
||||
public function testTooLongClientPhone(): void
|
||||
{
|
||||
$this->expectException(TooLongPhoneException::class);
|
||||
$this->expectException(TooLongClientContactException::class);
|
||||
(new Client())->setPhone('99999999999999999999999999999999999999999999999999999999999999999999999999');
|
||||
}
|
||||
|
||||
@@ -315,4 +314,4 @@ class ClientTest extends BasicTestCase
|
||||
$this->expectException(InvalidInnLengthException::class);
|
||||
(new Client())->setInn('1234567890123');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,9 +13,9 @@ use AtolOnline\{
|
||||
Entities\Company,
|
||||
Enums\SnoTypes,
|
||||
Exceptions\InvalidEmailException,
|
||||
Exceptions\InvalidEnumValueException,
|
||||
Exceptions\InvalidInnLengthException,
|
||||
Exceptions\InvalidPaymentAddressException,
|
||||
Exceptions\InvalidSnoException,
|
||||
Exceptions\TooLongEmailException,
|
||||
Exceptions\TooLongPaymentAddressException,
|
||||
Helpers};
|
||||
@@ -85,11 +85,11 @@ class CompanyTest extends BasicTestCase
|
||||
*
|
||||
* @covers \AtolOnline\Entities\Company
|
||||
* @covers \AtolOnline\Entities\Company::setSno
|
||||
* @covers \AtolOnline\Exceptions\InvalidSnoException
|
||||
* @covers \AtolOnline\Exceptions\InvalidEnumValueException
|
||||
*/
|
||||
public function testInvalidSnoException()
|
||||
{
|
||||
$this->expectException(InvalidSnoException::class);
|
||||
$this->expectException(InvalidEnumValueException::class);
|
||||
new Company('company@example.com', 'test', '1234567890', 'https://example.com');
|
||||
}
|
||||
|
||||
|
||||
@@ -14,11 +14,11 @@ use AtolOnline\{
|
||||
Enums\PaymentMethods,
|
||||
Enums\PaymentObjects,
|
||||
Enums\VatTypes,
|
||||
Exceptions\BasicTooManyException,
|
||||
Exceptions\TooHighPriceException,
|
||||
Exceptions\TooLongNameException,
|
||||
Exceptions\TooLongItemNameException,
|
||||
Exceptions\TooLongUnitException,
|
||||
Exceptions\TooLongUserdataException,};
|
||||
Exceptions\TooLongUserdataException,
|
||||
Exceptions\TooManyException,};
|
||||
|
||||
/**
|
||||
* Class ItemTest
|
||||
@@ -102,12 +102,12 @@ class ItemTestTodo extends BasicTestCase
|
||||
/**
|
||||
* Тестирует исключение о слишком длинном наименовании
|
||||
*
|
||||
* @throws TooLongNameException
|
||||
* @throws TooLongItemNameException
|
||||
*/
|
||||
public function testAtolNameTooLongException()
|
||||
{
|
||||
$item = new Item();
|
||||
$this->expectException(TooLongNameException::class);
|
||||
$this->expectException(TooLongItemNameException::class);
|
||||
$item->setName(Helpers::randomStr(130));
|
||||
}
|
||||
|
||||
@@ -115,13 +115,13 @@ class ItemTestTodo extends BasicTestCase
|
||||
* Тестирует исключение о слишком высоком количестве
|
||||
*
|
||||
* @throws TooHighPriceException
|
||||
* @throws BasicTooManyException
|
||||
* @throws TooManyException
|
||||
* @throws TooLongUnitException
|
||||
*/
|
||||
public function testAtolQuantityTooHighException()
|
||||
{
|
||||
$item = new Item();
|
||||
$this->expectException(BasicTooManyException::class);
|
||||
$this->expectException(TooManyException::class);
|
||||
$item->setQuantity(100000.1);
|
||||
}
|
||||
|
||||
@@ -160,4 +160,4 @@ class ItemTestTodo extends BasicTestCase
|
||||
$this->expectException(TooLongUnitException::class);
|
||||
$item->setMeasurementUnit('кг кг кг кг кг кг кг кг кг ');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ class KktMonitorTest extends BasicTestCase
|
||||
$client = new KktMonitor();
|
||||
$this->assertIsObject($client);
|
||||
$this->assertIsSameClass(KktMonitor::class, $client);
|
||||
$this->assertExtendsClasses([AtolClient::class], $client);
|
||||
$this->assertExtendsClasses($client, [AtolClient::class]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -76,8 +76,8 @@ class KktMonitorTest extends BasicTestCase
|
||||
{
|
||||
$client = new KktMonitor(false, 'login', 'password', []);
|
||||
$this->assertIsObject($client);
|
||||
$this->assertIsSameClass(KktMonitor::class, $client);
|
||||
$this->assertExtendsClasses([AtolClient::class], $client);
|
||||
$this->assertIsSameClass($client, KktMonitor::class);
|
||||
$this->assertExtendsClasses($client, [AtolClient::class]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user