diff --git a/src/Entities/Payments.php b/src/Entities/Payments.php new file mode 100644 index 0000000..413b20b --- /dev/null +++ b/src/Entities/Payments.php @@ -0,0 +1,34 @@ +expectException(TooManyPaymentsException::class); + new Payments($this->generateObjects(Constraints::MAX_COUNT_DOC_PAYMENTS + 1)); + } + + /** + * Тестирует выброс исключения при добавлении лишней ставки в начало коллекции + * + * @covers \AtolOnline\Entities\EntityCollection::prepend + * @covers \AtolOnline\Entities\EntityCollection::checkCount + * @covers \AtolOnline\Exceptions\TooManyPaymentsException + * @throws InvalidEnumValueException + * @throws NegativePaymentSumException + * @throws TooHighPaymentSumException + */ + public function testTooManyPaymentsExceptionByPrepend() + { + $this->expectException(TooManyPaymentsException::class); + (new Payments($this->generateObjects(10))) + ->prepend($this->generateObjects()); + } + + /** + * Тестирует выброс исключения при добавлении лишней ставки в конец коллекции + * + * @covers \AtolOnline\Entities\Payments + * @covers \AtolOnline\Entities\Payments::add + * @covers \AtolOnline\Entities\EntityCollection::checkCount + * @covers \AtolOnline\Exceptions\TooManyPaymentsException + * @throws InvalidEnumValueException + * @throws NegativePaymentSumException + * @throws TooHighPaymentSumException + */ + public function testTooManyPaymentsExceptionByAdd() + { + $this->expectException(TooManyPaymentsException::class); + (new Payments($this->generateObjects(10))) + ->add($this->generateObjects()); + } + + /** + * Тестирует выброс исключения при добавлении лишних оплат в конец коллекции + * + * @covers \AtolOnline\Entities\EntityCollection + * @covers \AtolOnline\Entities\EntityCollection::push + * @covers \AtolOnline\Entities\EntityCollection::checkCount + * @covers \AtolOnline\Exceptions\TooManyPaymentsException + * @throws InvalidEnumValueException + * @throws NegativePaymentSumException + * @throws TooHighPaymentSumException + */ + public function testTooManyPaymentsExceptionByPush() + { + $this->expectException(TooManyPaymentsException::class); + (new Payments($this->generateObjects(10))) + ->push(...$this->generateObjects()); + } + + /** + * Тестирует выброс исключения при добавлении лишней ставки в начало коллекции + * + * @covers \AtolOnline\Entities\EntityCollection + * @covers \AtolOnline\Entities\EntityCollection::merge + * @covers \AtolOnline\Entities\EntityCollection::checkCount + * @covers \AtolOnline\Exceptions\TooManyPaymentsException + * @throws InvalidEnumValueException + * @throws NegativePaymentSumException + * @throws TooHighPaymentSumException + */ + public function testTooManyPaymentsExceptionByMerge() + { + $this->expectException(TooManyPaymentsException::class); + (new Payments($this->generateObjects(9))) + ->merge($this->generateObjects(2)); + } + + /** + * Генерирует массив тестовых объектов оплаты + * + * @throws InvalidEnumValueException + * @throws NegativePaymentSumException + * @throws TooHighPaymentSumException + * @throws Exception + */ + protected function generateObjects(int $count = 1): array + { + $types = PaymentTypes::toArray(); + $result = []; + for ($i = 0; $i < abs($count); ++$i) { + $result[] = new Payment( + array_values($types)[random_int(min($types), max($types))], + random_int(1, 100) * 2 / 3 + ); + } + return $result; + } +}