'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()); } }