diff --git a/.travis.yml b/.travis.yml
index c98c779..0c9dcb0 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -39,4 +39,4 @@ deploy:
on:
php: 7.1
branch: master
- condition: "$DEPLOY = true"
\ No newline at end of file
+ condition: "$DEPLOY = false"
\ No newline at end of file
diff --git a/RoboFile.php b/RoboFile.php
index 861f1b1..d8b74cf 100644
--- a/RoboFile.php
+++ b/RoboFile.php
@@ -73,10 +73,12 @@ class RoboFile extends \Robo\Tasks
$this->taskDeleteDir('www')->run();
$this->taskFileSystemStack()
->mirror('vendor/opencart/opencart/upload', 'www')
- ->copy('vendor/beyondit/opencart-test-suite/src/upload/system/config/test-config.php', 'www/system/config/test-config.php')
+ ->copy('tests/test-config.php', 'www/system/config/test-config.php')
->copy('vendor/beyondit/opencart-test-suite/src/upload/system/library/session/test.php', 'www/system/library/session/test.php')
->copy('vendor/beyondit/opencart-test-suite/src/upload/admin/controller/startup/test_startup.php','www/admin/controller/startup/test_startup.php')
->chmod('www', 0777, 0000, true)
+ ->rename('www/config-dist.php', 'www/config.php')
+ ->rename('www/admin/config-dist.php', 'www/admin/config.php')
->run();
// Create new database, drop if exists already
diff --git a/VERSION b/VERSION
index 50e47c8..826cf5d 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-3.1.1
\ No newline at end of file
+3.1.0-alpha1
\ No newline at end of file
diff --git a/composer.json b/composer.json
index a83a6af..9387249 100644
--- a/composer.json
+++ b/composer.json
@@ -9,6 +9,7 @@
"email": "integration@retailcrm.ru"
}
],
+ "version": "3.1.0-alpha1",
"require-dev": {
"opencart/opencart" : "3.1.0.0_a1",
"vlucas/phpdotenv": "~1.1.0",
@@ -25,9 +26,11 @@
"opencart-dir" : "www"
},
"scripts" : {
+ "test-library": "bin/phpunit --testsuite library-tests --colors=always",
"test-admin": "bin/phpunit --testsuite admin-tests --colors=always",
"test-catalog": "bin/phpunit --testsuite catalog-tests --colors=always",
"test": [
+ "@test-library",
"@test-admin",
"@test-catalog"
],
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index 90272e8..2f79810 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -6,7 +6,7 @@
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
- processIsolation="false"
+ processIsolation="true"
stopOnFailure="false"
syntaxCheck="false">
@@ -16,8 +16,13 @@
./tests/admin/
+
+ ./tests/library/
+
+
+
\ No newline at end of file
diff --git a/src/upload/admin/controller/extension/module/retailcrm.php b/src/upload/admin/controller/extension/module/retailcrm.php
index f64d151..e72bcd3 100644
--- a/src/upload/admin/controller/extension/module/retailcrm.php
+++ b/src/upload/admin/controller/extension/module/retailcrm.php
@@ -540,10 +540,18 @@ class ControllerExtensionModuleRetailcrm extends Controller {
if (file_exists(DIR_APPLICATION . 'model/extension/retailcrm/custom/prices.php')) {
$this->load->model('extension/retailcrm/custom/prices');
- $this->model_extension_retailcrm_custom_prices->uploadPrices($products, $this->retailcrm->getApiClient());
+ $this->model_extension_retailcrm_custom_prices->uploadPrices(
+ $products,
+ $this->retailcrm->getApiClient(),
+ $this->retailcrm
+ );
} else {
$this->load->model('extension/retailcrm/prices');
- $this->model_extension_retailcrm_prices->uploadPrices($products, $this->retailcrm->getApiClient());
+ $this->model_extension_retailcrm_prices->uploadPrices(
+ $products,
+ $this->retailcrm->getApiClient(),
+ $this->retailcrm
+ );
}
}
diff --git a/src/upload/admin/model/extension/retailcrm/customer.php b/src/upload/admin/model/extension/retailcrm/customer.php
deleted file mode 100644
index 1702e9a..0000000
--- a/src/upload/admin/model/extension/retailcrm/customer.php
+++ /dev/null
@@ -1,137 +0,0 @@
-load->model('setting/setting');
- $this->load->library('retailcrm/retailcrm');
-
- $this->moduleTitle = $this->retailcrm->getModuleTitle();
- $this->settings = $this->model_setting_setting->getSetting($this->moduleTitle);
- }
-
- /**
- * Upload customers
- *
- * @param array $customers
- * @param \RetailcrmProxy $retailcrmApiClient
- *
- * @return mixed
- */
- public function uploadToCrm($customers, $retailcrmApiClient)
- {
- if ($retailcrmApiClient === false || empty($customers)) {
- return false;
- }
-
- $customersToCrm = array();
-
- foreach($customers as $customer) {
- $customersToCrm[] = $this->process($customer);
- }
-
- $chunkedCustomers = array_chunk($customersToCrm, 50);
-
- foreach($chunkedCustomers as $customersPart) {
- $retailcrmApiClient->customersUpload($customersPart);
- }
-
- return $chunkedCustomers;
- }
-
- /**
- * Edit customer
- *
- * @param array $customer
- * @param \RetailcrmProxy $retailcrmApiClient
- *
- * @return mixed
- */
- public function changeInCrm($customer, $retailcrmApiClient)
- {
- if ($retailcrmApiClient === false || empty($customer)) {
- return false;
- }
-
- $customerToCrm = $this->process($customer);
-
- $retailcrmApiClient->customersEdit($customerToCrm);
-
- return $customerToCrm;
- }
-
- /**
- * Create customer
- *
- * @param array $customer
- * @param \RetailcrmProxy $retailcrmApiClient
- *
- * @return mixed
- */
- public function sendToCrm($customer, $retailcrmApiClient)
- {
- if ($retailcrmApiClient === false || empty($customer)) {
- return false;
- }
-
- $customerToCrm = $this->process($customer);
-
- $retailcrmApiClient->customersCreate($customerToCrm);
-
- return $customerToCrm;
- }
-
- /**
- * Process customer
- *
- * @param array $customer
- *
- * @return array $customerToCrm
- */
- private function process($customer)
- {
- $customerToCrm = array(
- 'externalId' => $customer['customer_id'],
- 'firstName' => $customer['firstname'],
- 'lastName' => $customer['lastname'],
- 'email' => $customer['email'],
- 'phones' => array(
- array(
- 'number' => $customer['telephone']
- )
- ),
- 'createdAt' => $customer['date_added']
- );
-
- if (isset($customer['address'])) {
- $customerToCrm['address'] = array(
- 'index' => $customer['address']['postcode'],
- 'countryIso' => $customer['address']['iso_code_2'],
- 'region' => $customer['address']['zone'],
- 'city' => $customer['address']['city'],
- 'text' => $customer['address']['address_1'] . ' ' . $customer['address']['address_2']
- );
- }
-
- if (isset($this->settings[$this->moduleTitle . '_custom_field']) && $customer['custom_field']) {
- $customFields = json_decode($customer['custom_field']);
-
- foreach ($customFields as $key => $value) {
- if (isset($this->settings[$this->moduleTitle . '_custom_field']['c_' . $key])) {
- $customFieldsToCrm[$this->settings[$this->moduleTitle . '_custom_field']['c_' . $key]] = $value;
- }
- }
-
- if (isset($customFieldsToCrm)) {
- $customerToCrm['customFields'] = $customFieldsToCrm;
- }
- }
-
- return $customerToCrm;
- }
-}
diff --git a/src/upload/admin/model/extension/retailcrm/order.php b/src/upload/admin/model/extension/retailcrm/order.php
index d065c66..7b1135f 100644
--- a/src/upload/admin/model/extension/retailcrm/order.php
+++ b/src/upload/admin/model/extension/retailcrm/order.php
@@ -98,13 +98,7 @@ class ModelExtensionRetailcrmOrder extends Model
*/
protected function totalTitles()
{
- if (version_compare(VERSION, '3.0', '<')) {
- $title = '';
- } else {
- $title = 'total_';
- }
-
- return $title;
+ return 'total_';
}
/**
diff --git a/src/upload/admin/model/extension/retailcrm/prices.php b/src/upload/admin/model/extension/retailcrm/prices.php
index 4d56a35..c784184 100644
--- a/src/upload/admin/model/extension/retailcrm/prices.php
+++ b/src/upload/admin/model/extension/retailcrm/prices.php
@@ -3,7 +3,6 @@
class ModelExtensionRetailcrmPrices extends Model
{
protected $settings;
- protected $moduleTitle;
private $options;
private $optionValues;
@@ -13,14 +12,16 @@ class ModelExtensionRetailcrmPrices extends Model
*
* @param array $products
* @param \RetailcrmProxy $retailcrm_api_client
+ * @param \Retailcrm\Retailcrm $retailcrm
+ *
* @return mixed bool | array
*/
- public function uploadPrices($products, $retailcrm_api_client)
+ public function uploadPrices($products, $retailcrm_api_client, $retailcrm)
{
$this->load->model('catalog/option');
$this->load->model('setting/setting');
- $prices = $this->getPrices($products, $retailcrm_api_client);
+ $prices = $this->getPrices($products, $retailcrm_api_client, $retailcrm);
if ($retailcrm_api_client === false || !$prices) {
return false;
@@ -39,18 +40,19 @@ class ModelExtensionRetailcrmPrices extends Model
* Get prices
*
* @param array $products
- *
+ * @param \RetailcrmProxy $retailcrm_api_client
+ * @param \Retailcrm\Retailcrm $retailcrm
* @return mixed
*/
- protected function getPrices($products, $retailcrm_api_client)
+ protected function getPrices($products, $retailcrm_api_client, $retailcrm)
{
$settings = $this->model_setting_setting->getSetting(\retailcrm\Retailcrm::MODULE);
$prices = array();
$site = $this->getSite($retailcrm_api_client);
- if (!isset($settings[$this->moduleTitle . '_special'])
- || $settings[$this->moduleTitle . '_apiversion'] == 'v3'
+ if (!isset($settings[\Retailcrm\Retailcrm::MODULE . '_special'])
+ || $settings[\Retailcrm\Retailcrm::MODULE . '_apiversion'] == 'v3'
) {
return false;
}
@@ -70,7 +72,7 @@ class ModelExtensionRetailcrmPrices extends Model
}
}
- $offers = $this->retailcrm->getOffers($product);
+ $offers = $retailcrm->getOffers($product);
foreach ($offers as $optionsString => $optionsValues) {
$optionsString = explode('_', $optionsString);
@@ -105,7 +107,7 @@ class ModelExtensionRetailcrmPrices extends Model
'site' => $site,
'prices' => array(
array(
- 'code' => $settings[$this->moduleTitle . '_special'],
+ 'code' => $settings[\Retailcrm\Retailcrm::MODULE . '_special'],
'price' => $productPrice + $optionsValues['price']
)
)
diff --git a/src/upload/catalog/controller/extension/analytics/daemon_collector.php b/src/upload/catalog/controller/extension/analytics/daemon_collector.php
index 170cfd9..80e6767 100644
--- a/src/upload/catalog/controller/extension/analytics/daemon_collector.php
+++ b/src/upload/catalog/controller/extension/analytics/daemon_collector.php
@@ -2,15 +2,13 @@
class ControllerExtensionAnalyticsDaemonCollector extends Controller {
public function index() {
$this->load->model('setting/setting');
- $this->load->library('retailcrm/retailcrm');
- $moduleTitle = $this->retailcrm->getModuleTitle();
- $settings = $this->model_setting_setting->getSetting($moduleTitle);
- $setting = $settings[$moduleTitle . '_collector'];
+ $settings = $this->model_setting_setting->getSetting(\Retailcrm\Retailcrm::MODULE);
+ $setting = $settings[\Retailcrm\Retailcrm::MODULE . '_collector'];
$siteCode = isset($setting['site_key']) ? $setting['site_key'] : '';
if ($this->customer->isLogged()) $customerId = $this->customer->getID();
-
+
$customer = isset($customerId) ? "'customerId': '" . $customerId . "'" : "";
$labelPromo = !empty($setting['label_promo']) ? $setting['label_promo'] : null;
$labelSend = !empty($setting['label_send']) ? $setting['label_send'] : null;
@@ -54,7 +52,7 @@ class ControllerExtensionAnalyticsDaemonCollector extends Controller {
'period': " . $settings[$moduleTitle . '_collector']['period'] . ",
" . $customForm . "
});";
- }
+ }
} elseif ($labelPromo != null || $labelSend != null) {
$captureForm = "_rc('require', 'capture-form', {
" . $customForm . "
diff --git a/src/upload/catalog/model/extension/retailcrm/customer.php b/src/upload/catalog/model/extension/retailcrm/customer.php
deleted file mode 100644
index fd586e0..0000000
--- a/src/upload/catalog/model/extension/retailcrm/customer.php
+++ /dev/null
@@ -1,104 +0,0 @@
-load->model('setting/setting');
- $this->load->library('retailcrm/retailcrm');
-
- $this->moduleTitle = $this->retailcrm->getModuleTitle();
- $this->settings = $this->model_setting_setting->getSetting($this->moduleTitle);
- }
-
- /**
- * Create customer
- *
- * @param array $customer
- *
- * @return mixed
- */
- public function sendToCrm($customer, $retailcrmApiClient)
- {
- if (empty($customer) || $retailcrmApiClient === false) {
- return false;
- }
-
- $customerToCrm = $this->process($customer);
-
- $retailcrmApiClient->customersCreate($customerToCrm);
-
- return $customerToCrm;
- }
-
- /**
- * Edit customer
- *
- * @param array $customer
- *
- * @return mixed
- */
- public function changeInCrm($customer, $retailcrmApiClient)
- {
- if (empty($customer) || $retailcrmApiClient === false) {
- return false;
- }
-
- $customerToCrm = $this->process($customer);
-
- $retailcrmApiClient->customersEdit($customerToCrm);
-
- return $customerToCrm;
- }
-
- /**
- * Process customer
- *
- * @param array $customer
- *
- * @return array $customerToCrm
- */
- private function process($customer) {
- $customerToCrm = array(
- 'externalId' => $customer['customer_id'],
- 'firstName' => $customer['firstname'],
- 'lastName' => $customer['lastname'],
- 'email' => $customer['email'],
- 'phones' => array(
- array(
- 'number' => $customer['telephone']
- )
- ),
- 'createdAt' => $customer['date_added']
- );
-
- if (isset($customer['address'])) {
- $customerToCrm['address'] = array(
- 'index' => $customer['address']['postcode'],
- 'countryIso' => $customer['address']['iso_code_2'],
- 'region' => $customer['address']['zone'],
- 'city' => $customer['address']['city'],
- 'text' => $customer['address']['address_1'] . ' ' . $customer['address']['address_2']
- );
- }
-
- if (isset($this->settings[$this->moduleTitle . '_custom_field']) && $customer['custom_field']) {
- $customFields = json_decode($customer['custom_field']);
-
- foreach ($customFields as $key => $value) {
- if (isset($this->settings[$this->moduleTitle . '_custom_field']['c_' . $key])) {
- $customFieldsToCrm[$this->settings[$this->moduleTitle . '_custom_field']['c_' . $key]] = $value;
- }
- }
-
- if (isset($customFieldsToCrm)) {
- $customerToCrm['customFields'] = $customFieldsToCrm;
- }
- }
-
- return $customerToCrm;
- }
-}
diff --git a/src/upload/system/library/retailcrm/base.php b/src/upload/system/library/retailcrm/base.php
index 623334f..de0cadd 100644
--- a/src/upload/system/library/retailcrm/base.php
+++ b/src/upload/system/library/retailcrm/base.php
@@ -7,6 +7,24 @@ abstract class Base
protected $registry;
protected $data = array();
+ /**
+ * Send to crm
+ *
+ * @param $retailcrm_api_client
+ *
+ * @return mixed
+ */
+ abstract public function create($retailcrm_api_client);
+
+ /**
+ * Edit in crm
+ *
+ * @param $retailcrm_api_client
+ *
+ * @return mixed
+ */
+ abstract public function edit($retailcrm_api_client);
+
/**
* Base constructor.
*
@@ -26,6 +44,13 @@ abstract class Base
return $this->registry->get($name);
}
+ /**
+ * @return array
+ */
+ public function getData() {
+ return $this->data;
+ }
+
/**
* @param $field
* @param $value
@@ -61,6 +86,60 @@ abstract class Base
}
}
+ /**
+ * Prepare data array
+ *
+ * @param array $data
+ *
+ * @return void
+ */
+ public function prepare($data)
+ {
+ unset($data);
+ $this->data = Retailcrm::filterRecursive($this->data);
+ }
+
+ /**
+ * Upload to CRM
+ *
+ * @param $retailcrm_api_client
+ * @param array $data
+ * @param string $method
+ *
+ * @return boolean
+ */
+ public function upload($retailcrm_api_client, $data = array(), $method = 'orders')
+ {
+ if (!$data) {
+ return false;
+ }
+
+ $upload = array();
+ $countOrders = count($data);
+ $countIterations = (int) ($countOrders / 50);
+
+ foreach ($data as $key => $entity) {
+ $this->prepare($entity);
+ $upload[] = $this->data;
+ $this->resetData();
+
+ if ($countIterations > 0) {
+ unset($data[$key]);
+ }
+
+ if (($countIterations == 0 && count($data) == count($upload))
+ || count($upload) == 50
+ ) {
+ /** @var \RetailcrmApiClient5 $retailcrm_api_client */
+ $retailcrm_api_client->{$method . 'Upload'}($upload);
+ $upload = array();
+ $countIterations--;
+ }
+ }
+
+ return true;
+ }
+
/**
* @param array $custom_fields
* @param array $setting
@@ -111,78 +190,6 @@ abstract class Base
return $result;
}
- /**
- * Prepare data array
- *
- * @param array $data
- *
- * @return void
- */
- public function prepare($data)
- {
- unset($data);
- Retailcrm::filterRecursive($this->data);
- }
-
- /**
- * Send to crm
- *
- * @param $retailcrm_api_client
- *
- * @return mixed
- */
- abstract public function create($retailcrm_api_client);
-
- /**
- * Edit in crm
- *
- * @param $retailcrm_api_client
- *
- * @return mixed
- */
- abstract public function edit($retailcrm_api_client);
-
- /**
- * Upload to CRM
- *
- * @param $retailcrm_api_client
- * @param array $data
- * @param string $method
- *
- * @return boolean
- */
- public function upload($retailcrm_api_client, $data = array(), $method = 'orders')
- {
- if (!$data) {
- return false;
- }
-
- $upload = array();
- $countOrders = count($data);
- $countIterations = (int) ($countOrders / 50);
-
- foreach ($data as $key => $entity) {
- $this->prepare($entity);
- $upload[] = $this->data;
- $this->resetData();
-
- if ($countIterations > 0) {
- unset($data[$key]);
- }
-
- if (($countIterations == 0 && count($data) == count($upload))
- || count($upload) == 50
- ) {
- /** @var \RetailcrmApiClient5 $retailcrm_api_client */
- $retailcrm_api_client->{$method . 'Upload'}($upload);
- $upload = array();
- $countIterations--;
- }
- }
-
- return true;
- }
-
/**
* Reset data on default
*/
diff --git a/src/upload/system/library/retailcrm/order.php b/src/upload/system/library/retailcrm/order.php
index d295174..8f4dab5 100644
--- a/src/upload/system/library/retailcrm/order.php
+++ b/src/upload/system/library/retailcrm/order.php
@@ -7,6 +7,7 @@ class Order extends Base
protected $registry;
protected $data = array(
'number' => 0,
+ 'createdAt' => null,
'countryIso' => null,
'externalId' => 0,
'customer' => array(),
@@ -17,6 +18,7 @@ class Order extends Base
'email' => null,
'phone' => null,
'discountManualAmount' => 0,
+ 'customerComment' => null,
'items' => array(),
'delivery' => array(),
'customFields' => array(),
@@ -141,6 +143,15 @@ class Order extends Base
$this->setDataArray($custom_fields, 'customFields');
}
}
+
+ if ($order['customer_id']) {
+ $this->setDataArray(
+ array(
+ 'externalId' => $order['customer_id']
+ ),
+ 'customer'
+ );
+ }
}
parent::prepare($order);
@@ -156,6 +167,19 @@ class Order extends Base
return false;
}
+ if (!$this->data['customer']) {
+ $customer = $this->searchCustomer($this->data['phone'], $this->data['email'], $retailcrm_api_client);
+
+ if ($customer) {
+ $this->setDataArray(
+ array(
+ 'id' => $customer['id']
+ ),
+ 'customer'
+ );
+ }
+ }
+
$response = $retailcrm_api_client->ordersCreate($this->data);
return $response;
@@ -171,11 +195,81 @@ class Order extends Base
return false;
}
+ $order_payment = reset($this->data['payments']);
+ unset($this->data['payments']);
+
$response = $retailcrm_api_client->ordersEdit($this->data);
+ if ($response->isSuccessful()) {
+ $this->updatePayment($order_payment, $this->data['externalId'], $retailcrm_api_client);
+ }
+
return $response;
}
+ /**
+ * Update payment in CRM
+ *
+ * @param array $order_payment
+ * @param int $order_id
+ * @param \RetailcrmProxy $retailcrm_api_client
+ *
+ * @return boolean
+ */
+ private function updatePayment($order_payment, $order_id, $retailcrm_api_client) {
+ $response_order = $retailcrm_api_client->ordersGet($order_id);
+
+ if (!$response_order->isSuccessful()) {
+ return false;
+ }
+
+ $order_info = $response_order['order'];
+
+ foreach ($order_info['payments'] as $payment_data) {
+ if (isset($payment_data['externalId']) && $payment_data['externalId'] == $order_id) {
+ $payment = $payment_data;
+ }
+ }
+
+ if (isset($payment) && $payment['type'] != $order_payment['type']) {
+ $response = $retailcrm_api_client->ordersPaymentDelete($payment['id']);
+ if ($response->isSuccessful()) {
+ $retailcrm_api_client->ordersPaymentCreate($order_payment);
+ }
+ } elseif (isset($payment) && $payment['type'] == $order_payment['type']) {
+ $retailcrm_api_client->ordersPaymentEdit($order_payment);
+ }
+
+ return true;
+ }
+
+ /**
+ * @param $phone
+ * @param $email
+ * @param $retailcrm_api_client
+ *
+ * @return array|mixed
+ */
+ private function searchCustomer($phone, $email, $retailcrm_api_client) {
+ $customer = array();
+ $response = $retailcrm_api_client->customersList(
+ array(
+ 'name' => $phone,
+ 'email' => $email
+ ),
+ 1,
+ 100
+ );
+
+ if ($response->isSuccessful() && isset($response['customers'])) {
+ $customers = $response['customers'];
+ if ($customers) {
+ $customer = end($customers);
+ }
+ }
+ return $customer;
+ }
+
/**
* @param string $shipping_code
* @param array $deliveries
diff --git a/src/upload/system/library/retailcrm/retailcrm.php b/src/upload/system/library/retailcrm/retailcrm.php
index 33772c9..8edc9a0 100644
--- a/src/upload/system/library/retailcrm/retailcrm.php
+++ b/src/upload/system/library/retailcrm/retailcrm.php
@@ -168,6 +168,7 @@ class Retailcrm {
$haystack[$key] = trim($value);
}
}
+
return $haystack;
}
}
diff --git a/tests/admin/ControllerRetailcrmAdminTest.php b/tests/admin/ControllerRetailcrmAdminTest.php
index 6be635d..88121ab 100644
--- a/tests/admin/ControllerRetailcrmAdminTest.php
+++ b/tests/admin/ControllerRetailcrmAdminTest.php
@@ -1,15 +1,19 @@
db->query("SELECT permission from ".DB_PREFIX."user_group WHERE name = 'Administrator'");
+ parent::setUp();
+
+ $query = $this->db->query("SELECT permission from " . DB_PREFIX . "user_group WHERE name = 'Administrator'");
$permissions = json_decode($query->row['permission'],true);
- if (!in_array('extension/module/retailcrm',$permissions['access'])) {
+ if (!in_array('extension/module/retailcrm', $permissions['access'])) {
$permissions['access'][] = 'extension/module/retailcrm';
$this->db->query("UPDATE ".DB_PREFIX."user_group SET permission='".$this->db->escape(json_encode($permissions))."' WHERE name = 'Administrator'");
}
@@ -22,36 +26,15 @@ class ControllerRetailcrmAdminTest extends OpenCartTest
public function testIndex()
{
$this->login('admin', 'admin');
-
$response = $this->dispatchAction('extension/module/retailcrm');
+
$this->assertRegExp('/Connection settings/', $response->getOutput());
}
public function testIcml()
{
$this->login('admin', 'admin');
-
- $response = $this->dispatchAction('extension/module/retailcrm/icml');
-
- $this->assertRegExp('/Connection settings/', $response->getOutput());
+ $this->dispatchAction('extension/module/retailcrm/icml');
$this->assertFileExists(DIR_SYSTEM . '../' . 'retailcrm.xml');
}
-
- public function testInstallCollector()
- {
- $this->login('admin', 'admin');
-
- $response = $this->dispatchAction('extension/module/retailcrm/install_collector');
-
- $this->assertRegExp('/Connection settings/', $response->getOutput());
- }
-
- public function testUnnstallCollector()
- {
- $this->login('admin', 'admin');
-
- $response = $this->dispatchAction('extension/module/retailcrm/uninstall_collector');
-
- $this->assertRegExp('/Connection settings/', $response->getOutput());
- }
}
diff --git a/tests/admin/ModelRetailcrmOrderAdminTest.php b/tests/admin/ModelRetailcrmOrderAdminTest.php
index fa2ffaf..edec29c 100644
--- a/tests/admin/ModelRetailcrmOrderAdminTest.php
+++ b/tests/admin/ModelRetailcrmOrderAdminTest.php
@@ -1,187 +1,12 @@
orderModel = $this->loadModel('extension/retailcrm/order');
-
- $this->apiClientMock = $this->getMockBuilder(\RetailcrmProxy::class)
- ->disableOriginalConstructor()
- ->setMethods(array(
- 'ordersUpload',
- 'customersList',
- 'ordersCreate',
- 'ordersPaymentCreate',
- 'customersCreate'
- ))
- ->getMock();
-
- $this->settingModel = $this->loadModel('setting/setting');
- $this->retailcrm = new \retailcrm\retailcrm(self::$registry);
-
- $this->settingModel->editSetting(
- $this->retailcrm->getModuleTitle(),
- array(
- $this->retailcrm->getModuleTitle() . '_apiversion' => 'v5',
- $this->retailcrm->getModuleTitle() . '_order_number' => 1,
- $this->retailcrm->getModuleTitle() . '_status' => array(
- 1 => 'new'
- ),
- $this->retailcrm->getModuleTitle() . '_delivery' => array(
- 'flat.flat' => 'flat'
- ),
- $this->retailcrm->getModuleTitle() . '_payment' => array(
- 'cod' => 'cod'
- )
- )
- );
- }
-
- public function testUploadToCrm()
- {
- $saleOrderModel = $this->loadModel('sale/order');
- $orders = $saleOrderModel->getOrders();
- $fullOrders = array();
-
- foreach ($orders as $order) {
- $fullOrder = $saleOrderModel->getOrder($order['order_id']);
-
- $fullOrder['order_total'] = $saleOrderModel->getOrderTotals($order['order_id']);
- $fullOrder['products'] = $saleOrderModel->getOrderProducts($order['order_id']);
-
- foreach($fullOrder['products'] as $key => $product) {
- $fullOrder['products'][$key]['option'] = $saleOrderModel->getOrderOptions($product['order_id'], $product['order_product_id']);
- }
-
- $fullOrders[] = $fullOrder;
- }
-
- $chunkedOrders = $this->orderModel->uploadToCrm($fullOrders, $this->apiClientMock);
-
- $order = $chunkedOrders[0][0];
-
- $this->assertInternalType('array', $chunkedOrders);
- $this->assertInternalType('array', $chunkedOrders[0]);
- $this->assertNotEmpty($chunkedOrders[0]);
- $this->assertArrayHasKey('externalId', $order);
- $this->assertArrayHasKey('number', $order);
- $this->assertArrayHasKey('firstName', $order);
- $this->assertArrayHasKey('lastName', $order);
- $this->assertArrayHasKey('email', $order);
- $this->assertArrayHasKey('phone', $order);
- $this->assertArrayHasKey('createdAt', $order);
- $this->assertArrayHasKey('delivery', $order);
- $this->assertArrayHasKey('status', $order);
- $this->assertArrayHasKey('items', $order);
- $this->assertArrayHasKey('payments', $order);
- $this->assertNotEmpty($order['payments']);
- }
-
- public function testUploadWithCustomerTest()
- {
- $saleOrderModel = $this->loadModel('sale/order');
- $order = $saleOrderModel->getOrder(self::ORDER_WITH_CUST_ID);
-
- $order['totals'] = $saleOrderModel->getOrderTotals($order['order_id']);
- $order['products'] = $saleOrderModel->getOrderProducts($order['order_id']);
-
- foreach($order['products'] as $key => $product) {
- $order['products'][$key]['option'] = $saleOrderModel->getOrderOptions($product['order_id'], $product['order_product_id']);
- }
-
- $response = new \RetailcrmApiResponse(
- 201,
- json_encode(
- array(
- 'success' => true,
- 'id' => 1
- )
- )
- );
-
- $this->apiClientMock->expects($this->any())->method('ordersCreate')->willReturn($response);
- $orderSend = $this->orderModel->uploadOrder($order, $this->apiClientMock);
-
- $this->assertArrayHasKey('status', $orderSend);
- $this->assertEquals('new', $orderSend['status']);
- $this->assertArrayHasKey('externalId', $orderSend);
- $this->assertArrayHasKey('number', $orderSend);
- $this->assertArrayHasKey('firstName', $orderSend);
- $this->assertEquals('Test', $orderSend['firstName']);
- $this->assertArrayHasKey('lastName', $orderSend);
- $this->assertEquals('Test', $orderSend['lastName']);
- $this->assertArrayHasKey('email', $orderSend);
- $this->assertEquals('test@mail.ru', $orderSend['email']);
- $this->assertArrayHasKey('phone', $orderSend);
- $this->assertEquals('+7 (000) 000-00-00', $orderSend['phone']);
- $this->assertArrayHasKey('createdAt', $orderSend);
- $this->assertArrayHasKey('delivery', $orderSend);
- $this->assertInternalType('array', $orderSend['delivery']);
- $this->assertEquals('flat', $orderSend['delivery']['code']);
- $this->assertEquals('Test', $orderSend['delivery']['address']['city']);
- $this->assertEquals('Rostov-na-Donu', $orderSend['delivery']['address']['region']);
- $this->assertEquals('111111', $orderSend['delivery']['address']['index']);
- $this->assertArrayHasKey('items', $orderSend);
- $this->assertArrayHasKey('customerComment', $orderSend);
- $this->assertArrayHasKey('customer', $orderSend);
- $this->assertArrayHasKey('externalId', $orderSend['customer']);
- $this->assertEquals(self::CUSTOMER_ID, $orderSend['customer']['externalId']);
- $this->assertArrayHasKey('payments', $orderSend);
- $this->assertEquals('cod', $orderSend['payments'][0]['type']);
- $this->assertNotEmpty($orderSend['payments']);
- }
-
- public function testUploadWithoutCustomerTest()
- {
- $saleOrderModel = $this->loadModel('sale/order');
- $order = $saleOrderModel->getOrder(self::ORDER_ID);
-
- $order['totals'] = $saleOrderModel->getOrderTotals($order['order_id']);
- $order['products'] = $saleOrderModel->getOrderProducts($order['order_id']);
-
- foreach($order['products'] as $key => $product) {
- $order['products'][$key]['option'] = $saleOrderModel->getOrderOptions($product['order_id'], $product['order_product_id']);
- }
-
- $response = new \RetailcrmApiResponse(
- 201,
- json_encode(
- array(
- 'success' => true,
- 'id' => 1
- )
- )
- );
-
- $this->apiClientMock->expects($this->any())->method('ordersCreate')->willReturn($response);
- $orderSend = $this->orderModel->uploadOrder($order, $this->apiClientMock);
-
- $this->assertArrayHasKey('status', $orderSend);
- $this->assertArrayHasKey('externalId', $orderSend);
- $this->assertArrayHasKey('number', $orderSend);
- $this->assertArrayHasKey('firstName', $orderSend);
- $this->assertArrayHasKey('lastName', $orderSend);
- $this->assertArrayHasKey('email', $orderSend);
- $this->assertArrayHasKey('phone', $orderSend);
- $this->assertArrayHasKey('createdAt', $orderSend);
- $this->assertArrayHasKey('delivery', $orderSend);
- $this->assertArrayHasKey('items', $orderSend);
- $this->assertContains('#', $orderSend['items'][0]['offer']['externalId']);
- $this->assertArrayHasKey('payments', $orderSend);
- $this->assertArrayHasKey('customerComment', $orderSend);
- $this->assertArrayNotHasKey('customer', $orderSend);
- $this->assertNotEmpty($orderSend['payments']);
+ $this->assertTrue(true);
+ // todo test
}
}
diff --git a/tests/admin/ModelRetailcrmPricesAdminTest.php b/tests/admin/ModelRetailcrmPricesAdminTest.php
index a9b4b6d..073c539 100644
--- a/tests/admin/ModelRetailcrmPricesAdminTest.php
+++ b/tests/admin/ModelRetailcrmPricesAdminTest.php
@@ -1,5 +1,7 @@
getMock();
$this->settingModel = $this->loadModel('setting/setting');
- $this->retailcrm = new \retailcrm\retailcrm(self::$registry);
+ $this->retailcrm = new \Retailcrm\Retailcrm(self::$registry);
$this->settingModel->editSetting(
- $this->retailcrm->getModuleTitle(),
+ \Retailcrm\Retailcrm::MODULE,
array(
- $this->retailcrm->getModuleTitle() . '_apiversion' => 'v5',
- $this->retailcrm->getModuleTitle() . '_special' => 'special'
+ \Retailcrm\Retailcrm::MODULE . '_apiversion' => 'v5',
+ \Retailcrm\Retailcrm::MODULE . '_special' => 'special'
)
);
}
public function testUploadPrices()
{
+ $response = new \RetailcrmApiResponse(200, json_encode($this->getSites()));
+ $this->apiClientMock->expects($this->any())->method('sitesList')->willReturn($response);
+
$productModel = $this->loadModel('catalog/product');
$products = $productModel->getProducts();
- $prices = $this->pricesModel->uploadPrices($products, $this->apiClientMock);
+ $prices = $this->pricesModel->uploadPrices($products, $this->apiClientMock, $this->retailcrm);
$price = $prices[0][0];
$this->assertInternalType('array', $prices);
@@ -45,7 +50,20 @@ class ModelRetailcrmPricesAdminTest extends OpenCartTest
$this->assertInternalType('array', $price);
$this->assertArrayHasKey('externalId', $price);
$this->assertArrayHasKey('site', $price);
+ $this->assertEquals('test_site', $price['site']);
$this->assertArrayHasKey('prices', $price);
$this->assertInternalType('array', $price['prices']);
}
+
+ private function getSites()
+ {
+ return array(
+ 'success' => true,
+ 'sites' => array(
+ array(
+ 'code' => 'test_site'
+ )
+ )
+ );
+ }
}
\ No newline at end of file
diff --git a/tests/admin/ModelRetailcrmProductsAdminTest.php b/tests/admin/ModelRetailcrmProductsAdminTest.php
new file mode 100644
index 0000000..ee5b523
--- /dev/null
+++ b/tests/admin/ModelRetailcrmProductsAdminTest.php
@@ -0,0 +1,14 @@
+loadModel('extension/retailcrm/products');
+ $options = $model->getProductOptions(42);
+
+ $this->assertNotEmpty($options);
+ }
+}
diff --git a/tests/catalog/ControllerRetailcrmApiCatalogTest.php b/tests/catalog/ControllerRetailcrmApiCatalogTest.php
index 798e8af..b617301 100644
--- a/tests/catalog/ControllerRetailcrmApiCatalogTest.php
+++ b/tests/catalog/ControllerRetailcrmApiCatalogTest.php
@@ -1,9 +1,12 @@
db->query("SELECT * FROM `" . DB_PREFIX . "api` WHERE api_id = 1");
$api = $query->row;
$this->apiKey = $api['key'];
- $this->retailcrm = new \retailcrm\retailcrm(self::$registry);
+ $this->username = $api['username'];
+ $this->retailcrm = new \Retailcrm\Retailcrm(self::$registry);
$this->setSetting(
- $this->retailcrm->getModuleTitle(),
+ \Retailcrm\Retailcrm::MODULE,
array(
- $this->retailcrm->getModuleTitle() . '_country' => array(1),
+ \Retailcrm\Retailcrm::MODULE . '_country' => array(1),
)
);
@@ -36,6 +40,8 @@ class ControllerRetailcrmApiCatalogTest extends OpenCartTest
$this->assertEquals('Not found api key', $data->error);
$this->request->get['key'] = $this->apiKey;
+ $this->request->get['username'] = $this->username;
+
$response = $this->dispatchAction('api/retailcrm/getDeliveryTypes');
$data = json_decode($response->getOutput());
@@ -50,6 +56,7 @@ class ControllerRetailcrmApiCatalogTest extends OpenCartTest
$this->assertEquals('Not found api key', $data->error);
$this->request->get['key'] = $this->apiKey;
+ $this->request->get['username'] = $this->username;
$response = $this->dispatchAction('api/retailcrm/addOrderHistory');
$data = json_decode($response->getOutput());
diff --git a/tests/catalog/ModelRetailcrmCustomerCatalogTest.php b/tests/catalog/ModelRetailcrmCustomerCatalogTest.php
deleted file mode 100644
index 9101a0a..0000000
--- a/tests/catalog/ModelRetailcrmCustomerCatalogTest.php
+++ /dev/null
@@ -1,62 +0,0 @@
-customerModel = $this->loadModel('extension/retailcrm/customer');
-
- $this->apiClientMock = $this->getMockBuilder(\RetailcrmProxy::class)
- ->disableOriginalConstructor()
- ->setMethods(array(
- 'customersCreate',
- 'customersEdit'
- ))
- ->getMock();
- }
-
- public function testSendToCrm()
- {
- $customerModel = $this->loadModel('account/customer');
- $customer = $customerModel->getCustomer(self::CUSTOMER_ID);
-
- $customerSend = $this->customerModel->sendToCrm($customer, $this->apiClientMock);
-
- $this->assertArrayHasKey('externalId', $customerSend);
- $this->assertEquals(self::CUSTOMER_ID, $customerSend['externalId']);
- $this->assertArrayHasKey('firstName', $customerSend);
- $this->assertEquals('Test', $customerSend['firstName']);
- $this->assertArrayHasKey('lastName', $customerSend);
- $this->assertEquals('Test', $customerSend['lastName']);
- $this->assertArrayHasKey('email', $customerSend);
- $this->assertEquals('test@mail.ru', $customerSend['email']);
- $this->assertArrayHasKey('phones', $customerSend);
- $this->assertEquals('+7 (000) 000-00-00', $customerSend['phones'][0]['number']);
- }
-
- public function testChangeInCrm()
- {
- $customerModel = $this->loadModel('account/customer');
- $customer = $customerModel->getCustomer(self::CUSTOMER_ID);
-
- $customerSend = $this->customerModel->changeInCrm($customer, $this->apiClientMock);
-
- $this->assertArrayHasKey('externalId', $customerSend);
- $this->assertEquals(self::CUSTOMER_ID, $customerSend['externalId']);
- $this->assertArrayHasKey('firstName', $customerSend);
- $this->assertEquals('Test', $customerSend['firstName']);
- $this->assertArrayHasKey('lastName', $customerSend);
- $this->assertEquals('Test', $customerSend['lastName']);
- $this->assertArrayHasKey('email', $customerSend);
- $this->assertEquals('test@mail.ru', $customerSend['email']);
- $this->assertArrayHasKey('phones', $customerSend);
- $this->assertEquals('+7 (000) 000-00-00', $customerSend['phones'][0]['number']);
- }
-}
\ No newline at end of file
diff --git a/tests/catalog/ModelRetailcrmOrderCatalogTest.php b/tests/catalog/ModelRetailcrmOrderCatalogTest.php
index 4f199e3..bf45735 100644
--- a/tests/catalog/ModelRetailcrmOrderCatalogTest.php
+++ b/tests/catalog/ModelRetailcrmOrderCatalogTest.php
@@ -1,192 +1,15 @@
loadModel('extension/retailcrm/order');
+ $status_id = $model->getOrderStatusId(1);
- $this->orderModel = $this->loadModel('extension/retailcrm/order');
-
- $this->apiClientMock = $this->getMockBuilder(\RetailcrmProxy::class)
- ->disableOriginalConstructor()
- ->setMethods(array(
- 'ordersCreate',
- 'ordersEdit',
- 'ordersGet',
- 'ordersPaymentEdit',
- 'customersList'
- ))
- ->getMock();
-
- $this->retailcrm = new \retailcrm\retailcrm(self::$registry);
-
- $this->setSetting(
- $this->retailcrm->getModuleTitle(),
- array(
- $this->retailcrm->getModuleTitle() . '_apiversion' => 'v5',
- $this->retailcrm->getModuleTitle() . '_order_number' => 1,
- $this->retailcrm->getModuleTitle() . '_status' => array(
- 1 => 'new'
- ),
- $this->retailcrm->getModuleTitle() . '_delivery' => array(
- 'flat.flat' => 'flat'
- ),
- $this->retailcrm->getModuleTitle() . '_payment' => array(
- 'cod' => 'cod'
- )
- )
- );
- }
-
- public function testCreateOrderWithCustomer()
- {
- $orderCheckoutModel = $this->loadModel('checkout/order');
- $orderAccountModel = $this->loadModel('account/order');
- $order_id = self::ORDER_WITH_CUST_ID;
- $order = $orderCheckoutModel->getOrder($order_id);
- $order['products'] = $orderAccountModel->getOrderProducts($order_id);
- $order['totals'] = $orderAccountModel->getOrderTotals($order_id);
-
- foreach ($order['products'] as $key => $product) {
- $productOptions = $orderAccountModel->getOrderOptions($order_id, $product['order_product_id']);
-
- if (!empty($productOptions)) {
- $order['products'][$key]['option'] = $productOptions;
- }
- }
-
- $orderProcess = $this->orderModel->processOrder($order);
- $orderSend = $this->orderModel->sendToCrm($orderProcess, $this->apiClientMock);
-
- $this->assertArrayHasKey('status', $orderSend);
- $this->assertEquals('new', $orderSend['status']);
- $this->assertArrayHasKey('externalId', $orderSend);
- $this->assertArrayHasKey('number', $orderSend);
- $this->assertArrayHasKey('firstName', $orderSend);
- $this->assertEquals('Test', $orderSend['firstName']);
- $this->assertArrayHasKey('lastName', $orderSend);
- $this->assertEquals('Test', $orderSend['lastName']);
- $this->assertArrayHasKey('email', $orderSend);
- $this->assertEquals('test@mail.ru', $orderSend['email']);
- $this->assertArrayHasKey('phone', $orderSend);
- $this->assertEquals('+7 (000) 000-00-00', $orderSend['phone']);
- $this->assertArrayHasKey('createdAt', $orderSend);
- $this->assertArrayHasKey('delivery', $orderSend);
- $this->assertInternalType('array', $orderSend['delivery']);
- $this->assertEquals('flat', $orderSend['delivery']['code']);
- $this->assertEquals('Test', $orderSend['delivery']['address']['city']);
- $this->assertEquals('Rostov-na-Donu', $orderSend['delivery']['address']['region']);
- $this->assertEquals('111111', $orderSend['delivery']['address']['index']);
- $this->assertArrayHasKey('items', $orderSend);
- $this->assertArrayHasKey('customerComment', $orderSend);
- $this->assertArrayHasKey('customer', $orderSend);
- $this->assertArrayHasKey('externalId', $orderSend['customer']);
- $this->assertEquals(self::CUSTOMER_ID, $orderSend['customer']['externalId']);
- $this->assertArrayHasKey('payments', $orderSend);
- $this->assertEquals('cod', $orderSend['payments'][0]['type']);
- $this->assertNotEmpty($orderSend['payments']);
- }
-
- public function testEditOrderWithCustomer()
- {
- $orderCheckoutModel = $this->loadModel('checkout/order');
- $orderAccountModel = $this->loadModel('account/order');
- $order_id = self::ORDER_WITH_CUST_ID;
- $order = $orderCheckoutModel->getOrder($order_id);
- $order['products'] = $orderAccountModel->getOrderProducts($order_id);
- $order['totals'] = $orderAccountModel->getOrderTotals($order_id);
-
- foreach ($order['products'] as $key => $product) {
- $productOptions = $orderAccountModel->getOrderOptions($order_id, $product['order_product_id']);
-
- if (!empty($productOptions)) {
- $order['products'][$key]['option'] = $productOptions;
- }
- }
-
- $orderEditResponse = new \RetailcrmApiResponse(
- 200,
- json_encode(
- array(
- 'success' => true,
- 'id' => 1
- )
- )
- );
-
- $ordersGetResponse = new \RetailcrmApiResponse(
- 200,
- json_encode(
- array(
- 'success' => true,
- 'order' => $this->getOrder($order_id)
- )
- )
- );
-
- $this->apiClientMock->expects($this->any())->method('ordersEdit')->willReturn($orderEditResponse);
- $this->apiClientMock->expects($this->any())->method('ordersGet')->willReturn($ordersGetResponse);
- $orderProcess = $this->orderModel->processOrder($order);
- $orderSend = $this->orderModel->sendToCrm($orderProcess, $this->apiClientMock, false);
-
- $this->assertArrayHasKey('status', $orderSend);
- $this->assertEquals('new', $orderSend['status']);
- $this->assertArrayHasKey('externalId', $orderSend);
- $this->assertArrayHasKey('number', $orderSend);
- $this->assertArrayHasKey('firstName', $orderSend);
- $this->assertEquals('Test', $orderSend['firstName']);
- $this->assertArrayHasKey('lastName', $orderSend);
- $this->assertEquals('Test', $orderSend['lastName']);
- $this->assertArrayHasKey('email', $orderSend);
- $this->assertEquals('test@mail.ru', $orderSend['email']);
- $this->assertArrayHasKey('phone', $orderSend);
- $this->assertEquals('+7 (000) 000-00-00', $orderSend['phone']);
- $this->assertArrayHasKey('createdAt', $orderSend);
- $this->assertArrayHasKey('delivery', $orderSend);
- $this->assertInternalType('array', $orderSend['delivery']);
- $this->assertEquals('flat', $orderSend['delivery']['code']);
- $this->assertEquals('Test', $orderSend['delivery']['address']['city']);
- $this->assertEquals('Rostov-na-Donu', $orderSend['delivery']['address']['region']);
- $this->assertEquals('111111', $orderSend['delivery']['address']['index']);
- $this->assertArrayHasKey('items', $orderSend);
- $this->assertArrayHasKey('customerComment', $orderSend);
- }
-
- protected function setSetting($code, $data, $store_id = 0) {
- $this->db->query("DELETE FROM `" . DB_PREFIX . "setting` WHERE store_id = '" . (int)$store_id . "' AND `code` = '" . $this->db->escape($code) . "'");
-
- foreach ($data as $key => $value) {
- if (substr($key, 0, strlen($code)) == $code) {
- if (!is_array($value)) {
- $this->db->query("INSERT INTO " . DB_PREFIX . "setting SET store_id = '" . (int)$store_id . "', `code` = '" . $this->db->escape($code) . "', `key` = '" . $this->db->escape($key) . "', `value` = '" . $this->db->escape($value) . "'");
- } else {
- $this->db->query("INSERT INTO " . DB_PREFIX . "setting SET store_id = '" . (int)$store_id . "', `code` = '" . $this->db->escape($code) . "', `key` = '" . $this->db->escape($key) . "', `value` = '" . $this->db->escape(json_encode($value, true)) . "', serialized = '1'");
- }
- }
- }
- }
-
- private function getOrder($id)
- {
- return array(
- 'payments' => array(
- array(
- 'id' => 1,
- 'status' => 'not-paid',
- 'type' => 'cod',
- 'externalId' => $id,
- 'amount' => '100'
- )
- )
- );
+ $this->assertNotEmpty($status_id);
+ $this->assertNotNull($status_id);
}
}
diff --git a/tests/catalog/ModelRetailcrmProductsCatalogTest.php b/tests/catalog/ModelRetailcrmProductsCatalogTest.php
new file mode 100644
index 0000000..e8f2903
--- /dev/null
+++ b/tests/catalog/ModelRetailcrmProductsCatalogTest.php
@@ -0,0 +1,14 @@
+loadModel('extension/retailcrm/products');
+ $options = $model->getProductOptions(42);
+
+ $this->assertNotEmpty($options);
+ }
+}
\ No newline at end of file
diff --git a/tests/admin/ModelRetailcrmCustomerAdminTest.php b/tests/library/CustomerRetailcrmLibraryTest.php
similarity index 51%
rename from tests/admin/ModelRetailcrmCustomerAdminTest.php
rename to tests/library/CustomerRetailcrmLibraryTest.php
index 80bf169..1cd062d 100644
--- a/tests/admin/ModelRetailcrmCustomerAdminTest.php
+++ b/tests/library/CustomerRetailcrmLibraryTest.php
@@ -1,8 +1,10 @@
customerModel = $this->loadModel('extension/retailcrm/customer');
-
$this->apiClientMock = $this->getMockBuilder(\RetailcrmProxy::class)
->disableOriginalConstructor()
->setMethods(array(
- 'customersUpload',
+ 'customersCreate',
'customersEdit'
))
->getMock();
+
+ $retailcrm = new \Retailcrm\Retailcrm(self::$registry);
+ $this->customer = $retailcrm->createObject(\Retailcrm\Customer::class);
}
- public function testUploadToCrm()
+ public function testPrepareCustomer()
{
- $customerModel = $this->loadModel('customer/customer');
- $customers = $customerModel->getCustomers();
-
- $customersSend = $this->customerModel->uploadToCrm($customers, $this->apiClientMock);
- $customer = $customersSend[0][0];
-
- $this->assertInternalType('array', $customersSend);
- $this->assertInternalType('array', $customersSend[0]);
- $this->assertArrayHasKey('externalId', $customer);
- $this->assertArrayHasKey('firstName', $customer);
- $this->assertArrayHasKey('lastName', $customer);
- $this->assertArrayHasKey('email', $customer);
- }
-
- public function testChangeInCrm()
- {
- $customerModel = $this->loadModel('customer/customer');
+ $customerModel = $this->loadModel('account/customer');
$customer = $customerModel->getCustomer(self::CUSTOMER_ID);
- $customerSend = $this->customerModel->changeInCrm($customer, $this->apiClientMock);
+ $this->customer->prepare($customer);
+ $customerSend = $this->customer->getData();
$this->assertArrayHasKey('externalId', $customerSend);
$this->assertEquals(self::CUSTOMER_ID, $customerSend['externalId']);
@@ -56,4 +44,4 @@ class ModelRetailcrmCustomerAdminTest extends OpenCartTest
$this->assertArrayHasKey('phones', $customerSend);
$this->assertEquals('+7 (000) 000-00-00', $customerSend['phones'][0]['number']);
}
-}
+}
\ No newline at end of file
diff --git a/tests/library/OrderRetailcrmLibraryTest.php b/tests/library/OrderRetailcrmLibraryTest.php
new file mode 100644
index 0000000..6050696
--- /dev/null
+++ b/tests/library/OrderRetailcrmLibraryTest.php
@@ -0,0 +1,306 @@
+apiClientMock = $this->getMockBuilder(\RetailcrmProxy::class)
+ ->disableOriginalConstructor()
+ ->setMethods(array(
+ 'ordersCreate',
+ 'ordersEdit',
+ 'ordersGet',
+ 'ordersPaymentEdit',
+ 'customersList'
+ ))
+ ->getMock();
+
+ $this->retailcrm = new \Retailcrm\Retailcrm(self::$registry);
+
+ $this->order = $this->retailcrm->createObject(\Retailcrm\Order::class);
+
+ $this->setSetting(
+ \Retailcrm\Retailcrm::MODULE,
+ array(
+ \Retailcrm\Retailcrm::MODULE . '_apiversion' => 'v5',
+ \Retailcrm\Retailcrm::MODULE . '_order_number' => 1,
+ \Retailcrm\Retailcrm::MODULE . '_status' => array(
+ 1 => 'new'
+ ),
+ \Retailcrm\Retailcrm::MODULE . '_delivery' => array(
+ 'flat.flat' => 'flat'
+ ),
+ \Retailcrm\Retailcrm::MODULE . '_payment' => array(
+ 'cod' => 'cod'
+ )
+ )
+ );
+ }
+
+ public function testPrepareCreateOrderWithCustomer()
+ {
+ $orderCheckoutModel = $this->loadModel('checkout/order');
+ $orderAccountModel = $this->loadModel('account/order');
+ $order_id = self::ORDER_WITH_CUST_ID;
+ $order = $orderCheckoutModel->getOrder($order_id);
+ $order['products'] = $orderAccountModel->getOrderProducts($order_id);
+ $order['totals'] = $orderAccountModel->getOrderTotals($order_id);
+
+ foreach ($order['products'] as $key => $product) {
+ $productOptions = $orderAccountModel->getOrderOptions($order_id, $product['order_product_id']);
+
+ if (!empty($productOptions)) {
+ $order['products'][$key]['option'] = $productOptions;
+ }
+ }
+
+ $this->order->prepare($order);
+ $orderPrepare = $this->order->getData();
+
+ $this->assertArrayHasKey('status', $orderPrepare);
+ $this->assertEquals('new', $orderPrepare['status']);
+ $this->assertArrayHasKey('externalId', $orderPrepare);
+ $this->assertArrayHasKey('number', $orderPrepare);
+ $this->assertArrayHasKey('firstName', $orderPrepare);
+ $this->assertEquals('Test', $orderPrepare['firstName']);
+ $this->assertArrayHasKey('lastName', $orderPrepare);
+ $this->assertEquals('Test', $orderPrepare['lastName']);
+ $this->assertArrayHasKey('email', $orderPrepare);
+ $this->assertEquals('test@mail.ru', $orderPrepare['email']);
+ $this->assertArrayHasKey('phone', $orderPrepare);
+ $this->assertEquals('+7 (000) 000-00-00', $orderPrepare['phone']);
+ $this->assertArrayHasKey('createdAt', $orderPrepare);
+ $this->assertArrayHasKey('delivery', $orderPrepare);
+ $this->assertInternalType('array', $orderPrepare['delivery']);
+ $this->assertEquals('flat', $orderPrepare['delivery']['code']);
+ $this->assertEquals('Test', $orderPrepare['delivery']['address']['city']);
+ $this->assertEquals('Rostov-na-Donu', $orderPrepare['delivery']['address']['region']);
+ $this->assertEquals('111111', $orderPrepare['delivery']['address']['index']);
+ $this->assertArrayHasKey('items', $orderPrepare);
+ $this->assertArrayHasKey('customer', $orderPrepare);
+ $this->assertArrayHasKey('externalId', $orderPrepare['customer']);
+ $this->assertEquals(self::CUSTOMER_ID, $orderPrepare['customer']['externalId']);
+ $this->assertArrayHasKey('payments', $orderPrepare);
+ $this->assertEquals('cod', $orderPrepare['payments'][0]['type']);
+ $this->assertNotEmpty($orderPrepare['payments']);
+ }
+
+ public function testPrepareEditOrderWithCustomer()
+ {
+ $orderCheckoutModel = $this->loadModel('checkout/order');
+ $orderAccountModel = $this->loadModel('account/order');
+ $order_id = self::ORDER_WITH_CUST_ID;
+ $order = $orderCheckoutModel->getOrder($order_id);
+ $order['products'] = $orderAccountModel->getOrderProducts($order_id);
+ $order['totals'] = $orderAccountModel->getOrderTotals($order_id);
+
+ foreach ($order['products'] as $key => $product) {
+ $productOptions = $orderAccountModel->getOrderOptions($order_id, $product['order_product_id']);
+
+ if (!empty($productOptions)) {
+ $order['products'][$key]['option'] = $productOptions;
+ }
+ }
+
+ $orderEditResponse = new \RetailcrmApiResponse(
+ 200,
+ json_encode(
+ array(
+ 'success' => true,
+ 'id' => 1
+ )
+ )
+ );
+
+ $ordersGetResponse = new \RetailcrmApiResponse(
+ 200,
+ json_encode(
+ array(
+ 'success' => true,
+ 'order' => $this->getOrder($order_id)
+ )
+ )
+ );
+
+ $this->apiClientMock->expects($this->any())->method('ordersEdit')->willReturn($orderEditResponse);
+ $this->apiClientMock->expects($this->any())->method('ordersGet')->willReturn($ordersGetResponse);
+ $this->order->prepare($order);
+ $orderPrepare = $this->order->getData();
+
+ $this->assertArrayHasKey('status', $orderPrepare);
+ $this->assertEquals('new', $orderPrepare['status']);
+ $this->assertArrayHasKey('externalId', $orderPrepare);
+ $this->assertArrayHasKey('number', $orderPrepare);
+ $this->assertArrayHasKey('firstName', $orderPrepare);
+ $this->assertEquals('Test', $orderPrepare['firstName']);
+ $this->assertArrayHasKey('lastName', $orderPrepare);
+ $this->assertEquals('Test', $orderPrepare['lastName']);
+ $this->assertArrayHasKey('email', $orderPrepare);
+ $this->assertEquals('test@mail.ru', $orderPrepare['email']);
+ $this->assertArrayHasKey('phone', $orderPrepare);
+ $this->assertEquals('+7 (000) 000-00-00', $orderPrepare['phone']);
+ $this->assertArrayHasKey('createdAt', $orderPrepare);
+ $this->assertArrayHasKey('delivery', $orderPrepare);
+ $this->assertInternalType('array', $orderPrepare['delivery']);
+ $this->assertEquals('flat', $orderPrepare['delivery']['code']);
+ $this->assertEquals('Test', $orderPrepare['delivery']['address']['city']);
+ $this->assertEquals('Rostov-na-Donu', $orderPrepare['delivery']['address']['region']);
+ $this->assertEquals('111111', $orderPrepare['delivery']['address']['index']);
+ $this->assertArrayHasKey('items', $orderPrepare);
+ $this->assertArrayHasKey('customer', $orderPrepare);
+ $this->assertArrayHasKey('externalId', $orderPrepare['customer']);
+ $this->assertEquals(self::CUSTOMER_ID, $orderPrepare['customer']['externalId']);
+ }
+
+ public function testPrepareCreateOrderWithoutCustomer()
+ {
+ $orderCheckoutModel = $this->loadModel('checkout/order');
+ $orderAccountModel = $this->loadModel('account/order');
+ $order_id = self::ORDER_ID;
+ $order = $orderCheckoutModel->getOrder($order_id);
+ $order['products'] = $orderAccountModel->getOrderProducts($order_id);
+ $order['totals'] = $orderAccountModel->getOrderTotals($order_id);
+
+ foreach ($order['products'] as $key => $product) {
+ $productOptions = $orderAccountModel->getOrderOptions($order_id, $product['order_product_id']);
+
+ if (!empty($productOptions)) {
+ $order['products'][$key]['option'] = $productOptions;
+ }
+ }
+
+ $this->order->prepare($order);
+ $orderPrepare = $this->order->getData();
+
+ $this->assertArrayHasKey('status', $orderPrepare);
+ $this->assertEquals('new', $orderPrepare['status']);
+ $this->assertArrayHasKey('externalId', $orderPrepare);
+ $this->assertArrayHasKey('number', $orderPrepare);
+ $this->assertArrayHasKey('firstName', $orderPrepare);
+ $this->assertEquals('Test', $orderPrepare['firstName']);
+ $this->assertArrayHasKey('lastName', $orderPrepare);
+ $this->assertEquals('Test', $orderPrepare['lastName']);
+ $this->assertArrayHasKey('email', $orderPrepare);
+ $this->assertEquals('test@mail.ru', $orderPrepare['email']);
+ $this->assertArrayHasKey('phone', $orderPrepare);
+ $this->assertEquals('+7 (000) 000-00-00', $orderPrepare['phone']);
+ $this->assertArrayHasKey('createdAt', $orderPrepare);
+ $this->assertArrayHasKey('delivery', $orderPrepare);
+ $this->assertInternalType('array', $orderPrepare['delivery']);
+ $this->assertEquals('flat', $orderPrepare['delivery']['code']);
+ $this->assertEquals('Test', $orderPrepare['delivery']['address']['city']);
+ $this->assertEquals('Rostov-na-Donu', $orderPrepare['delivery']['address']['region']);
+ $this->assertEquals('111111', $orderPrepare['delivery']['address']['index']);
+ $this->assertArrayHasKey('items', $orderPrepare);
+ $this->assertArrayNotHasKey('customer', $orderPrepare);
+ $this->assertArrayHasKey('payments', $orderPrepare);
+ $this->assertEquals('cod', $orderPrepare['payments'][0]['type']);
+ $this->assertNotEmpty($orderPrepare['payments']);
+ }
+
+ public function testPrepareEditOrderWithoutCustomer()
+ {
+ $orderCheckoutModel = $this->loadModel('checkout/order');
+ $orderAccountModel = $this->loadModel('account/order');
+ $order_id = self::ORDER_ID;
+ $order = $orderCheckoutModel->getOrder($order_id);
+ $order['products'] = $orderAccountModel->getOrderProducts($order_id);
+ $order['totals'] = $orderAccountModel->getOrderTotals($order_id);
+
+ foreach ($order['products'] as $key => $product) {
+ $productOptions = $orderAccountModel->getOrderOptions($order_id, $product['order_product_id']);
+
+ if (!empty($productOptions)) {
+ $order['products'][$key]['option'] = $productOptions;
+ }
+ }
+
+ $orderEditResponse = new \RetailcrmApiResponse(
+ 200,
+ json_encode(
+ array(
+ 'success' => true,
+ 'id' => 1
+ )
+ )
+ );
+
+ $ordersGetResponse = new \RetailcrmApiResponse(
+ 200,
+ json_encode(
+ array(
+ 'success' => true,
+ 'order' => $this->getOrder($order_id)
+ )
+ )
+ );
+
+ $this->apiClientMock->expects($this->any())->method('ordersEdit')->willReturn($orderEditResponse);
+ $this->apiClientMock->expects($this->any())->method('ordersGet')->willReturn($ordersGetResponse);
+ $this->order->prepare($order);
+ $orderPrepare = $this->order->getData();
+
+ $this->assertArrayHasKey('status', $orderPrepare);
+ $this->assertEquals('new', $orderPrepare['status']);
+ $this->assertArrayHasKey('externalId', $orderPrepare);
+ $this->assertArrayHasKey('number', $orderPrepare);
+ $this->assertArrayHasKey('firstName', $orderPrepare);
+ $this->assertEquals('Test', $orderPrepare['firstName']);
+ $this->assertArrayHasKey('lastName', $orderPrepare);
+ $this->assertEquals('Test', $orderPrepare['lastName']);
+ $this->assertArrayHasKey('email', $orderPrepare);
+ $this->assertEquals('test@mail.ru', $orderPrepare['email']);
+ $this->assertArrayHasKey('phone', $orderPrepare);
+ $this->assertEquals('+7 (000) 000-00-00', $orderPrepare['phone']);
+ $this->assertArrayHasKey('createdAt', $orderPrepare);
+ $this->assertArrayHasKey('delivery', $orderPrepare);
+ $this->assertInternalType('array', $orderPrepare['delivery']);
+ $this->assertEquals('flat', $orderPrepare['delivery']['code']);
+ $this->assertEquals('Test', $orderPrepare['delivery']['address']['city']);
+ $this->assertEquals('Rostov-na-Donu', $orderPrepare['delivery']['address']['region']);
+ $this->assertEquals('111111', $orderPrepare['delivery']['address']['index']);
+ $this->assertArrayHasKey('items', $orderPrepare);
+ $this->assertArrayNotHasKey('customer', $orderPrepare);
+ }
+
+ protected function setSetting($code, $data, $store_id = 0) {
+ $this->db->query("DELETE FROM `" . DB_PREFIX . "setting` WHERE store_id = '" . (int)$store_id . "' AND `code` = '" . $this->db->escape($code) . "'");
+
+ foreach ($data as $key => $value) {
+ if (substr($key, 0, strlen($code)) == $code) {
+ if (!is_array($value)) {
+ $this->db->query("INSERT INTO " . DB_PREFIX . "setting SET store_id = '" . (int)$store_id . "', `code` = '" . $this->db->escape($code) . "', `key` = '" . $this->db->escape($key) . "', `value` = '" . $this->db->escape($value) . "'");
+ } else {
+ $this->db->query("INSERT INTO " . DB_PREFIX . "setting SET store_id = '" . (int)$store_id . "', `code` = '" . $this->db->escape($code) . "', `key` = '" . $this->db->escape($key) . "', `value` = '" . $this->db->escape(json_encode($value, true)) . "', serialized = '1'");
+ }
+ }
+ }
+ }
+
+ private function getOrder($id)
+ {
+ return array(
+ 'payments' => array(
+ array(
+ 'id' => 1,
+ 'status' => 'not-paid',
+ 'type' => 'cod',
+ 'externalId' => $id,
+ 'amount' => '100'
+ )
+ )
+ );
+ }
+}
\ No newline at end of file
diff --git a/tests/opencart_sample_data.sql b/tests/opencart_sample_data.sql
index cb4812d..20718b6 100644
--- a/tests/opencart_sample_data.sql
+++ b/tests/opencart_sample_data.sql
@@ -1,5 +1,5 @@
TRUNCATE TABLE `oc_customer`;
-INSERT INTO `oc_customer` (`customer_id`, `customer_group_id`, `store_id`, `language_id`, `firstname`, `lastname`, `email`, `telephone`, `fax`, `password`, `salt`, `cart`, `wishlist`, `newsletter`, `address_id`, `custom_field`, `ip`, `status`, `approved`, `safe`, `token`, `code`, `date_added`) VALUES ('1', '1', '0', '1', 'Test', 'Test', 'test@mail.ru', '+7 (000) 000-00-00', '', 'ed3798da75d6cdd695e99e87a60d587a10aa95ff', '51TalnrgH', '', '', '0', '1', '', '172.21.0.1', '1', '1', '0', '', '', '2018-06-07 13:50:08');
+INSERT INTO `oc_customer` (`customer_id`, `customer_group_id`, `store_id`, `language_id`, `firstname`, `lastname`, `email`, `telephone`, `fax`, `password`, `salt`, `cart`, `wishlist`, `newsletter`, `address_id`, `custom_field`, `ip`, `status`, `safe`, `token`, `code`, `date_added`) VALUES ('1', '1', '0', '1', 'Test', 'Test', 'test@mail.ru', '+7 (000) 000-00-00', '', 'ed3798da75d6cdd695e99e87a60d587a10aa95ff', '51TalnrgH', '', '', '0', '1', '', '172.21.0.1', '1', '0', '', '', '2018-06-07 13:50:08');
TRUNCATE TABLE `oc_customer_activity`;
TRUNCATE TABLE `oc_customer_group`;
@@ -23,7 +23,6 @@ TRUNCATE TABLE `oc_order`;
INSERT INTO `oc_order` (`order_id`, `invoice_no`, `invoice_prefix`, `store_id`, `store_name`, `store_url`, `customer_id`, `customer_group_id`, `firstname`, `lastname`, `email`, `telephone`, `fax`, `custom_field`, `payment_firstname`, `payment_lastname`, `payment_company`, `payment_address_1`, `payment_address_2`, `payment_city`, `payment_postcode`, `payment_country`, `payment_country_id`, `payment_zone`, `payment_zone_id`, `payment_address_format`, `payment_custom_field`, `payment_method`, `payment_code`, `shipping_firstname`, `shipping_lastname`, `shipping_company`, `shipping_address_1`, `shipping_address_2`, `shipping_city`, `shipping_postcode`, `shipping_country`, `shipping_country_id`, `shipping_zone`, `shipping_zone_id`, `shipping_address_format`, `shipping_custom_field`, `shipping_method`, `shipping_code`, `comment`, `total`, `order_status_id`, `affiliate_id`, `commission`, `marketing_id`, `tracking`, `language_id`, `currency_id`, `currency_code`, `currency_value`, `ip`, `forwarded_ip`, `user_agent`, `accept_language`, `date_added`, `date_modified`) VALUES ('1', '0', 'INV-2016-00', '0', 'Opencart', 'http://localhost:8000/', '1', '1', 'Test', 'Test', 'test@mail.ru', '+7 (000) 000-00-00', '', '', 'Test', 'Test', '', 'Address', 'Address 2', 'Test', '111111', 'Russian Federation', '176', 'Rostov-na-Donu', '99', '', '[]', 'Cash on delivery', 'cod', 'Test', 'Test', '', 'Address', 'Address 2', 'Test', '111111', 'Russian Federation', '176', 'Rostov-na-Donu', '99', '', '[]', 'Flat Rate', 'flat.flat', '', '106.0000', '1', '0', '0.0000', '0', '', '1', '1', 'USD', '1.00000000', '172.21.0.1', '', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36', 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7', '2018-06-07 13:51:10', '2018-06-07 13:51:23');
INSERT INTO `oc_order` (`order_id`, `invoice_no`, `invoice_prefix`, `store_id`, `store_name`, `store_url`, `customer_id`, `customer_group_id`, `firstname`, `lastname`, `email`, `telephone`, `fax`, `custom_field`, `payment_firstname`, `payment_lastname`, `payment_company`, `payment_address_1`, `payment_address_2`, `payment_city`, `payment_postcode`, `payment_country`, `payment_country_id`, `payment_zone`, `payment_zone_id`, `payment_address_format`, `payment_custom_field`, `payment_method`, `payment_code`, `shipping_firstname`, `shipping_lastname`, `shipping_company`, `shipping_address_1`, `shipping_address_2`, `shipping_city`, `shipping_postcode`, `shipping_country`, `shipping_country_id`, `shipping_zone`, `shipping_zone_id`, `shipping_address_format`, `shipping_custom_field`, `shipping_method`, `shipping_code`, `comment`, `total`, `order_status_id`, `affiliate_id`, `commission`, `marketing_id`, `tracking`, `language_id`, `currency_id`, `currency_code`, `currency_value`, `ip`, `forwarded_ip`, `user_agent`, `accept_language`, `date_added`, `date_modified`) VALUES ('2', '0', 'INV-2016-00', '0', 'Opencart', 'http://localhost:8000/', '0', '1', 'Test', 'Test', 'test@mail.ru', '+7 (000) 000-00-00', '', '[]', 'Test', 'Test', '', 'Address', 'Address 2', 'Test', '111111', 'Russian Federation', '176', 'Rostov-na-Donu', '99', '', '[]', 'Cash on delivery', 'cod', 'Test', 'Test', '', 'Address', 'Address 2', 'Test', '111111', 'Russian Federation', '176', 'Rostov-na-Donu', '99', '', '[]', 'Flat Rate', 'flat.flat', '', '85.0000', '1', '0', '0.0000', '0', '', '1', '1', 'USD', '1.00000000', '172.21.0.1', '', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36', 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7', '2018-06-07 13:53:50', '2018-06-07 13:54:00');
-TRUNCATE TABLE `oc_order_custom_field`;
TRUNCATE TABLE `oc_order_history`;
INSERT INTO `oc_order_history` (`order_history_id`, `order_id`, `order_status_id`, `notify`, `comment`, `date_added`) VALUES ('19', '2', '1', '0', '', '2018-06-07 13:54:00');
INSERT INTO `oc_order_history` (`order_history_id`, `order_id`, `order_status_id`, `notify`, `comment`, `date_added`) VALUES ('18', '1', '1', '0', '', '2018-06-07 13:51:23');
diff --git a/tests/test-config.php b/tests/test-config.php
new file mode 100644
index 0000000..77b4059
--- /dev/null
+++ b/tests/test-config.php
@@ -0,0 +1,70 @@
+ array(
+ 'event/language/before'
+ ),
+ 'controller/*/after' => array(
+ 'event/language/after'
+ ),
+ 'view/*/before' => array(
+ 500 => 'event/theme/override',
+ 998 => 'event/language',
+ 1000 => 'event/theme'
+ ),
+ 'language/*/after' => array(
+ 'event/translation'
+ ),
+ //'view/*/before' => array(
+ // 1000 => 'event/debug/before'
+ //),
+ 'controller/*/after' => array(
+ 'event/debug/after'
+ )
+);
+
+if (defined('HTTP_CATALOG')) { // is defined iff in catalog
+
+ // Actions
+ $_['action_pre_action'] = array(
+ 'startup/startup',
+ 'startup/error',
+ 'startup/event',
+ 'startup/sass',
+ 'startup/login',
+ 'startup/permission'
+ );
+} else { // admin
+ // Actions
+ $_['action_pre_action'] = array(
+ 'startup/startup',
+ 'startup/error',
+ 'startup/event',
+ 'startup/maintenance',
+ 'startup/seo_url'
+ );
+}
+
+// Test Settings
+$_['session_engine'] = 'test';
+$_['session_autostart'] = false;
+
+$_['template_engine'] = 'twig';
+$_['template_directory'] = '';
+$_['template_cache'] = false;