Files
kupshop/bundles/KupShop/PohodaBundle/Tests/ExportOrdersTest.php
2025-08-02 16:30:27 +02:00

217 lines
8.3 KiB
PHP

<?php
namespace KupShop\PohodaBundle\Tests;
use KupShop\DevelopmentBundle\Util\Tests\LoggerTestTrait;
use KupShop\KupShopBundle\Util\Compat\ServiceContainer;
use KupShop\OrderingBundle\Util\Order\OrderExporter;
use KupShop\PohodaBundle\Messenger\OrderMessage;
use KupShop\PohodaBundle\Utils\Exporters\OrdersExporter;
use KupShop\PohodaBundle\Utils\PohodaConnector;
use KupShop\PohodaBundle\Utils\Tools\PohodaOrderExporter;
use KupShop\PohodaBundle\Utils\Tools\TransformHelper;
use Query\Operator;
use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\Stamp\HandledStamp;
class ExportOrdersTest extends \DatabaseTestCase
{
use LoggerTestTrait;
use TestUtilHelper;
/**
* @var MessageBus
*/
private $asyncBus;
/** @var PohodaConnector */
private $pohodaConnector;
protected function setUp(): void
{
parent::setUp();
$this->asyncBus = $this->get('async_bus');
}
public function getDataSet()
{
return $this->getJsonDataSetFromFile();
}
protected $PohodaConnector;
/**
* @var TransformHelper
*/
protected $transformHelper;
protected function setEnvironment()
{
$this->PohodaConnector = ServiceContainer::getService(PohodaConnector::class);
$this->transformHelper = ServiceContainer::getService(TransformHelper::class);
$this->getLogger();
$this->prepareMServer();
}
public function testGetBaseOrdersXML()
{
$this->setEnvironment();
$ordersOut = $this->get(OrderExporter::class);
$ordersOutXML = $ordersOut->getXML([4047]);
$this->assertXmlStringEqualsXmlFile(__DIR__.'/ExportBaseOrder.xml', $ordersOutXML);
}
public function testGetPohodaBaseOrdersXML()
{
$this->setEnvironment();
$ordersOut = $this->get(PohodaOrderExporter::class);
$ordersOutXML = $ordersOut->getXML([4047]);
$this->assertXmlStringEqualsXmlFile(__DIR__.'/ExportPohodaBaseOrder.xml', $ordersOutXML);
}
public function testTransformShopOrder()
{
$this->setEnvironment();
$ordersOut = $this->get(PohodaOrderExporter::class);
$ordersOutXML = $ordersOut->getXML([4047]);
$ordersOutXML = $this->transformHelper->baseTransform($ordersOutXML, $this->transformHelper->loadXslt('ordersOut.xsl'));
$this->assertXmlStringEqualsXmlFile(__DIR__.'/ExportOrders.xml', $ordersOutXML->saveXML());
}
public function testOrderExportResponse()
{
$this->setEnvironment();
$this->ordersOut = $this->get(OrdersExporter::class);
$xml = file_get_contents(__DIR__.'/ExportOrdersResponse.xml');
$this->ordersOut->processResponse($xml);
$response = simplexml_load_string($xml);
$logData = null;
foreach ($response->xpath('rsp:responsePackItem') as $responsePackItem) {
$logData = $responsePackItem->asXML();
}
$testHandler = $this->getTestHandler();
$this->assertEquals(true, $testHandler->hasNoticeThatContains('POHODA RESPONSE: Order Export'));
foreach ($testHandler->getRecords() as $record) {
if ($record['message'] == 'POHODA RESPONSE: Order Export') {
$this->assertEquals($logData, $record['context']['data']);
}
}
$qb = sqlQueryBuilder()
->select('*')
->from('order_items')
->andWhere(Operator::equals(['id' => '31011']))
->execute()
->fetch();
$this->assertEquals('965136', $qb['pohoda_id']);
}
public function testAsyncExportOrder()
{
$instance = $this->autowire(PohodaConnectorMock::class);
$this->set(PohodaConnector::class, $instance);
$cfg = \KupShop\KupShopBundle\Config::get();
$cfg['Modules']['pohoda']['create_corrective_invoice_from_returns'] = true;
$cfg['Modules']['pohoda']['instant_order_upload'] = true;
$this->prepareMServer();
$asyncMessage = new OrderMessage();
$asyncMessage->setIdOrder(4048);
$result = $this->getHandledResult($this->asyncBus->dispatch($asyncMessage));
$qb = sqlQueryBuilder()
->select('*')
->from('orders_pohoda_invoices')
->andWhere(Operator::equals(['id_order' => '4048']))
->sendToMaster()
->execute()
->fetchAssociative();
$this->assertEquals('62910', $qb['id_pohoda_invoice']);
$this->assertTrue($result['status']);
}
public function getHandledResult(Envelope $envelope)
{
$stamp = $envelope->last(HandledStamp::class);
return $stamp->getResult();
}
}
class PohodaConnectorMock extends PohodaConnector
{
public function sendRequest($XmlBodyRequest)
{
$request = new \SimpleXMLElement($XmlBodyRequest);
$request->registerXPathNamespace('ord', 'ord:order');
$request->registerXPathNamespace('inv', 'inv:invoice');
if (!empty($request->xpath('dat:dataPackItem/ord:order/ord:orderHeader/ord:orderType'))) {
return '<?xml version="1.0" encoding="Windows-1250"?>
<rsp:responsePack version="2.0" id="1" state="ok" programVersion="13106.4 SQL (11.7.2022)" ico="0123456789"
key="76aeac20-fbf0-4519-8c30-518c62193b3d" note="KupshopSync"
xmlns:rsp="http://www.stormware.cz/schema/version_2/response.xsd"
xmlns:rdc="http://www.stormware.cz/schema/version_2/documentresponse.xsd"
xmlns:ord="http://www.stormware.cz/schema/version_2/order.xsd">
<rsp:responsePackItem version="2.0" id="4048" state="ok">
<ord:orderResponse version="2.0" state="ok">
<rdc:producedDetails>
<rdc:id>272939</rdc:id>
<rdc:number>0194048</rdc:number>
<rdc:actionType>add</rdc:actionType>
<rdc:itemDetails type="OBJpol">
<rdc:item>
<rdc:actionType>add</rdc:actionType>
<rdc:extId>31011</rdc:extId>
<rdc:producedItem>
<rdc:id>965136</rdc:id>
</rdc:producedItem>
</rdc:item>
<rdc:item>
<rdc:actionType>add</rdc:actionType>
<rdc:extId>31012</rdc:extId>
<rdc:producedItem>
<rdc:id>965137</rdc:id>
</rdc:producedItem>
</rdc:item>
</rdc:itemDetails>
</rdc:producedDetails>
</ord:orderResponse>
</rsp:responsePackItem>
</rsp:responsePack>';
}
if (!empty($request->xpath('dat:dataPackItem/inv:invoice/inv:invoiceHeader/inv:invoiceType'))) {
return '<?xml version="1.0" encoding="WINDOWS-1250"?>
<rsp:responsePack
xmlns:inv="http://www.stormware.cz/schema/version_2/invoice.xsd"
xmlns:rdc="http://www.stormware.cz/schema/version_2/documentresponse.xsd"
xmlns:rsp="http://www.stormware.cz/schema/version_2/response.xsd" note="Invoices request"
key="0cf0e9cd-23ce-498c-8f2d-2b2149efa343" ico="0123456789" programVersion="13304.1 SQL (2.2.2023)"
state="ok" id="1" version="2.0">
<rsp:responsePackItem state="ok" id="4048" version="2.0">
<inv:invoiceResponse state="ok" version="2.0">
<rdc:producedDetails>
<rdc:id>62910</rdc:id>
<rdc:number>2300104752</rdc:number>
<rdc:actionType>link</rdc:actionType>
</rdc:producedDetails>
</inv:invoiceResponse>
</rsp:responsePackItem>
</rsp:responsePack>';
}
}
}