diff --git a/CHANGELOG.md b/CHANGELOG.md index ca44480..190c73d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +## v3.5.5 +* Доработан маппинг доставок и оплат в соответствии с доступностью по магазинам + ## v3.5.4 * Доработано сохранение ошибок в экспорте заказов diff --git a/VERSION b/VERSION index 65afb3b..7d280e2 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.5.4 +3.5.5 diff --git a/retailcrm/lib/RetailcrmReferences.php b/retailcrm/lib/RetailcrmReferences.php index 4bc2420..f747bb5 100644 --- a/retailcrm/lib/RetailcrmReferences.php +++ b/retailcrm/lib/RetailcrmReferences.php @@ -229,6 +229,12 @@ class RetailcrmReferences return []; } + $crmSite = $this->getSite()['code'] ?? null; + + if (null === $crmSite) { + return []; + } + $crmDeliveryTypes = []; $request = $this->api->deliveryTypesList(); @@ -241,6 +247,10 @@ class RetailcrmReferences continue; } + if (!empty($dType['sites']) && false === in_array($crmSite, $dType['sites'])) { + continue; + } + $crmDeliveryTypes[] = [ 'code' => $dType['code'], 'name' => $dType['name'], @@ -296,6 +306,12 @@ class RetailcrmReferences return []; } + $crmSite = $this->getSite()['code'] ?? null; + + if (null === $crmSite) { + return []; + } + $crmPaymentTypes = []; $request = $this->api->paymentTypesList(); @@ -308,6 +324,10 @@ class RetailcrmReferences continue; } + if (!empty($pType['sites']) && false === in_array($crmSite, $pType['sites'])) { + continue; + } + $crmPaymentTypes[] = [ 'code' => $pType['code'], 'name' => $pType['name'], diff --git a/retailcrm/retailcrm.php b/retailcrm/retailcrm.php index 2a196e4..6890e3a 100644 --- a/retailcrm/retailcrm.php +++ b/retailcrm/retailcrm.php @@ -48,7 +48,7 @@ require_once dirname(__FILE__) . '/bootstrap.php'; class RetailCRM extends Module { - const VERSION = '3.5.4'; + const VERSION = '3.5.5'; const API_URL = 'RETAILCRM_ADDRESS'; const API_KEY = 'RETAILCRM_API_TOKEN'; diff --git a/tests/bootstrap.php b/tests/bootstrap.php index aa29f7c..eb6c604 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -50,6 +50,7 @@ require_once __DIR__ . '/../../PrestaShop/init.php'; require_once __DIR__ . '/helpers/RetailcrmTestCase.php'; require_once __DIR__ . '/helpers/RetailcrmTestHelper.php'; require_once __DIR__ . '/lib/api/RetailcrmApiRequestTestAbstract.php'; +require_once __DIR__ . '/datasets/DataRetailcrmReferences.php'; $module = new RetailCRM(); $module->install(); diff --git a/tests/datasets/DataRetailcrmReferences.php b/tests/datasets/DataRetailcrmReferences.php new file mode 100644 index 0000000..d5204fc --- /dev/null +++ b/tests/datasets/DataRetailcrmReferences.php @@ -0,0 +1,101 @@ + + * @copyright 2021 DIGITAL RETAIL TECHNOLOGIES SL + * @license https://opensource.org/licenses/MIT The MIT License + * + * Don't forget to prefix your containers with your own identifier + * to avoid any conflicts with others containers. + */ + +class DataRetailcrmReferences +{ + public static function getCredentials() + { + return [ + 'siteAccess' => 'access_selective', + 'sitesAvailable' => ['prestashop'], + 'credentials' => ['/api/reference/sites', '/api/reference/sites/{code}/edit'], + ]; + } + + public static function getApiPaymentTypes() + { + return [ + 'paymentTypes' => [ + [ + 'name' => 'payment1', + 'code' => 'payment1', + 'active' => true, + 'sites' => ['prestashop'], + ], + [ + 'name' => 'payment2', + 'code' => 'payment2', + 'active' => true, + 'sites' => ['woocommerce'], + ], + [ + 'name' => 'payment3', + 'code' => 'payment3', + 'active' => true, + 'sites' => [], + ], + ], + ]; + } + + public static function getApiDeliveryTypes() + { + return [ + 'deliveryTypes' => [ + [ + 'name' => 'delivery1', + 'code' => 'delivery1', + 'active' => true, + 'sites' => ['prestashop'], + ], + [ + 'name' => 'delivery2', + 'code' => 'delivery2', + 'active' => true, + 'sites' => ['woocommerce'], + ], + [ + 'name' => 'delivery3', + 'code' => 'delivery3', + 'active' => true, + 'sites' => [], + ], + ], + ]; + } +} diff --git a/tests/lib/RetailcrmReferencesTest.php b/tests/lib/RetailcrmReferencesTest.php index c611d72..ed55a7e 100644 --- a/tests/lib/RetailcrmReferencesTest.php +++ b/tests/lib/RetailcrmReferencesTest.php @@ -38,15 +38,36 @@ class RetailcrmReferencesTest extends RetailcrmTestCase { - private $retailcrmReferences; - protected function setUp() { parent::setUp(); - $apiMock = $this->createMock('RetailcrmProxy'); + $apiMock = $this->getApiMock( + [ + 'sitesList', + 'credentials', + 'isSuccessful', + 'paymentTypesList', + 'deliveryTypesList', + ] + ); + + $this->apiClientMock->expects($this->any()) + ->method('isSuccessful') + ->willReturn(new RetailcrmApiResponse('200', json_encode(['success' => true]))) + ; + + $this->apiClientMock->expects($this->any()) + ->method('credentials') + ->willReturn(new RetailcrmApiResponse('200', json_encode(DataRetailcrmReferences::getCredentials()))) + ; + + $this->apiClientMock->expects($this->any()) + ->method('sitesList') + ->willReturn(new RetailcrmApiResponse('200', json_encode(['sites' => [['code' => 'prestashop']]]))) + ; + $this->retailcrmReferences = new RetailcrmReferences($apiMock); - $this->retailcrmReferences->getSystemPaymentModules(false); } public function testCarriers() @@ -59,14 +80,14 @@ class RetailcrmReferencesTest extends RetailcrmTestCase public function testGetSystemPaymentModules() { + $this->retailcrmReferences->getSystemPaymentModules(false); + $this->assertInternalType('array', $this->retailcrmReferences->payment_modules); - if (version_compare(_PS_VERSION_, '1.7', '>')) { - $this->assertNotEmpty($this->retailcrmReferences->payment_modules); - $this->assertArrayHasKey('name', $this->retailcrmReferences->payment_modules[0]); - $this->assertArrayHasKey('code', $this->retailcrmReferences->payment_modules[0]); - $this->assertArrayHasKey('id', $this->retailcrmReferences->payment_modules[0]); - } + $this->assertNotEmpty($this->retailcrmReferences->payment_modules); + $this->assertArrayHasKey('name', $this->retailcrmReferences->payment_modules[0]); + $this->assertArrayHasKey('code', $this->retailcrmReferences->payment_modules[0]); + $this->assertArrayHasKey('id', $this->retailcrmReferences->payment_modules[0]); } public function testGetStatuses() @@ -76,4 +97,47 @@ class RetailcrmReferencesTest extends RetailcrmTestCase $this->assertInternalType('array', $statuses); $this->assertNotEmpty($statuses); } + + public function testGetApiDeliveryTypes() + { + $this->apiClientMock->expects($this->once()) + ->method('deliveryTypesList') + ->willReturn( + new RetailcrmApiResponse( + '200', + json_encode(DataRetailcrmReferences::getApiDeliveryTypes()) + ) + ) + ; + + $deliveryTypes = $this->retailcrmReferences->getApiDeliveryTypes(); + + $this->assertInternalType('array', $deliveryTypes); + $this->assertArrayHasKey('code', $deliveryTypes[0]); + $this->assertArrayHasKey('code', $deliveryTypes[1]); + $this->assertEquals('delivery1', $deliveryTypes[0]['code']); + $this->assertEquals('delivery3', $deliveryTypes[1]['code']); + } + + public function testGetApiPaymentTypes() + { + $this->apiClientMock->expects($this->once()) + ->method('paymentTypesList') + ->willReturn( + new RetailcrmApiResponse( + '200', + json_encode(DataRetailcrmReferences::getApiPaymentTypes()) + ) + ) + ; + + $paymentTypes = $this->retailcrmReferences->getApiPaymentTypes(); + + $this->assertInternalType('array', $paymentTypes); + $this->assertInternalType('array', $paymentTypes); + $this->assertArrayHasKey('code', $paymentTypes[0]); + $this->assertArrayHasKey('code', $paymentTypes[1]); + $this->assertEquals('payment1', $paymentTypes[0]['code']); + $this->assertEquals('payment3', $paymentTypes[1]['code']); + } }