217 lines
8.3 KiB
PHP
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>';
|
|
}
|
|
}
|
|
}
|