/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/ProductRepositoryTest.php

https://gitlab.com/axeltizon/magento-demopoweraccess · PHP · 624 lines · 523 code · 52 blank · 49 comment · 1 complexity · b9d4f7bea5d1de7896d088c62d5adae5 MD5 · raw file

  1. <?php
  2. /**
  3. * Copyright © 2016 Magento. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Downloadable\Api;
  7. use Magento\Catalog\Api\Data\ProductInterface;
  8. use Magento\Framework\Api\ExtensibleDataInterface;
  9. use Magento\TestFramework\TestCase\WebapiAbstract;
  10. /**
  11. * Class ProductRepositoryTest for testing ProductRepository interface with Downloadable Product
  12. */
  13. class ProductRepositoryTest extends WebapiAbstract
  14. {
  15. const SERVICE_NAME = 'catalogProductRepositoryV1';
  16. const SERVICE_VERSION = 'V1';
  17. const RESOURCE_PATH = '/V1/products';
  18. const PRODUCT_SKU = 'sku-test-product-downloadable';
  19. /**
  20. * @var string
  21. */
  22. protected $testImagePath;
  23. protected function setUp()
  24. {
  25. $this->testImagePath = __DIR__ . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'test_image.jpg';
  26. }
  27. /**
  28. * Execute per test cleanup
  29. */
  30. public function tearDown()
  31. {
  32. $this->deleteProductBySku(self::PRODUCT_SKU);
  33. parent::tearDown();
  34. }
  35. protected function getLinkData()
  36. {
  37. return [
  38. 'link1' => [
  39. 'title' => "link1",
  40. 'sort_order'=> 10,
  41. 'is_shareable' => 1,
  42. 'price' => 2.0,
  43. 'number_of_downloads' => 0,
  44. 'link_type' => 'file',
  45. 'link_file_content' => [
  46. 'name' => 'link1_content.jpg',
  47. 'file_data' => base64_encode(file_get_contents($this->testImagePath)),
  48. ],
  49. 'sample_type' => 'file',
  50. 'sample_file_content' => [
  51. 'name' => 'link1_sample.jpg',
  52. 'file_data' => base64_encode(file_get_contents($this->testImagePath)),
  53. ],
  54. ],
  55. 'link2' => [
  56. 'title' => 'link2',
  57. 'sort_order'=> 20,
  58. 'is_shareable' => 0,
  59. 'price' => 3.0,
  60. 'number_of_downloads' => 100,
  61. 'link_type' => "url",
  62. 'link_url' => 'http://www.example.com/link2.jpg',
  63. 'sample_type' => 'url',
  64. 'sample_url' => 'http://www.example.com/link2.jpg',
  65. ],
  66. ];
  67. }
  68. protected function getExpectedLinkData()
  69. {
  70. return [
  71. [
  72. 'title' => 'link1',
  73. 'sort_order' => 10,
  74. 'is_shareable' => 1,
  75. 'price' => 2,
  76. 'number_of_downloads' => 0,
  77. 'link_type' => 'file',
  78. 'sample_type' => 'file',
  79. ],
  80. [
  81. 'title' => 'link2',
  82. 'sort_order' => 20,
  83. 'is_shareable' => 0,
  84. 'price' => 3,
  85. 'number_of_downloads' => 100,
  86. 'link_type' => 'url',
  87. 'link_url' => 'http://www.example.com/link2.jpg',
  88. 'sample_type' => 'url',
  89. 'sample_url' => 'http://www.example.com/link2.jpg',
  90. ],
  91. ];
  92. }
  93. protected function getSampleData()
  94. {
  95. return [
  96. 'sample1' => [
  97. 'title' => 'sample1',
  98. 'sort_order' => 10,
  99. 'sample_type' => 'url',
  100. 'sample_url' => 'http://www.example.com/sample1.jpg',
  101. ],
  102. 'sample2' => [
  103. 'title' => 'sample2',
  104. 'sort_order' => 20,
  105. 'sample_type' => 'file',
  106. 'sample_file_content' => [
  107. 'name' => 'sample2.jpg',
  108. 'file_data' => base64_encode(file_get_contents($this->testImagePath)),
  109. ],
  110. ],
  111. ];
  112. }
  113. protected function getExpectedSampleData()
  114. {
  115. return [
  116. [
  117. 'title' => 'sample1',
  118. 'sort_order' => 10,
  119. 'sample_type' => 'url',
  120. 'sample_url' => 'http://www.example.com/sample1.jpg',
  121. ],
  122. [
  123. 'title' => 'sample2',
  124. 'sort_order' => 20,
  125. 'sample_type' => 'file',
  126. ],
  127. ];
  128. }
  129. protected function createDownloadableProduct()
  130. {
  131. $product = [
  132. "sku" => self::PRODUCT_SKU,
  133. "name" => self::PRODUCT_SKU,
  134. "type_id" => \Magento\Downloadable\Model\Product\Type::TYPE_DOWNLOADABLE,
  135. "price" => 10,
  136. 'attribute_set_id' => 4,
  137. "extension_attributes" => [
  138. "downloadable_product_links" => array_values($this->getLinkData()),
  139. "downloadable_product_samples" => array_values($this->getSampleData()),
  140. ],
  141. ];
  142. $response = $this->createProduct($product);
  143. $this->assertEquals(self::PRODUCT_SKU, $response[ProductInterface::SKU]);
  144. $this->assertEquals(10, $response['price']);
  145. $this->assertEquals(
  146. \Magento\Downloadable\Model\Product\Type::TYPE_DOWNLOADABLE,
  147. $response['type_id']
  148. );
  149. return $response;
  150. }
  151. /**
  152. * Create a downloadable product with two links and two samples
  153. */
  154. public function testCreateDownloadableProduct()
  155. {
  156. $response = $this->createDownloadableProduct();
  157. $this->assertTrue(
  158. isset($response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_links"])
  159. );
  160. $this->assertTrue(
  161. isset($response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_samples"])
  162. );
  163. $resultLinks
  164. = $response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_links"];
  165. $this->assertEquals(2, count($resultLinks));
  166. $this->assertTrue(isset($resultLinks[0]['id']));
  167. $this->assertTrue(isset($resultLinks[0]['link_file']));
  168. $this->assertTrue(isset($resultLinks[0]['sample_file']));
  169. unset($resultLinks[0]['id']);
  170. unset($resultLinks[0]['link_file']);
  171. unset($resultLinks[0]['sample_file']);
  172. $this->assertTrue(isset($resultLinks[1]['id']));
  173. unset($resultLinks[1]['id']);
  174. $expectedLinkData = $this->getExpectedLinkData();
  175. $this->assertEquals($expectedLinkData, $resultLinks);
  176. $resultSamples = $response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_samples"];
  177. $this->assertEquals(2, count($resultSamples));
  178. $this->assertTrue(isset($resultSamples[0]['id']));
  179. unset($resultSamples[0]['id']);
  180. $this->assertTrue(isset($resultSamples[1]['id']));
  181. $this->assertTrue(isset($resultSamples[1]['sample_file']));
  182. unset($resultSamples[1]['sample_file']);
  183. unset($resultSamples[1]['id']);
  184. $expectedSampleData = $this->getExpectedSampleData();
  185. $this->assertEquals($expectedSampleData, $resultSamples);
  186. }
  187. /**
  188. * Update downloadable product, update a link, add two link, delete a link
  189. */
  190. public function testUpdateDownloadableProductLinks()
  191. {
  192. $response = $this->createDownloadableProduct();
  193. $resultLinks
  194. = $response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_links"];
  195. $link1Id = $resultLinks[0]['id'];
  196. $link2Id = $resultLinks[1]['id'];
  197. $linkFile = $resultLinks[0]['link_file'];
  198. $sampleFile = $resultLinks[0]['sample_file'];
  199. $updatedLink1Data = [
  200. 'id' => $link1Id,
  201. 'title' => 'link1_updated',
  202. 'sort_order' => 1, //the sort order needs to be smaller than 10
  203. 'is_shareable' => 0,
  204. 'price' => 5.0,
  205. 'number_of_downloads' => 999,
  206. 'link_type' => 'file',
  207. 'sample_type' => 'file'
  208. ];
  209. $linkData = $this->getLinkData();
  210. $response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_links"] =
  211. [$updatedLink1Data, $linkData['link1'], $linkData['link2']];
  212. $response = $this->saveProduct($response);
  213. $this->assertTrue(
  214. isset($response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_links"])
  215. );
  216. $this->assertTrue(
  217. isset($response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_samples"])
  218. );
  219. $resultLinks
  220. = $response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_links"];
  221. $this->assertEquals(3, count($resultLinks));
  222. $this->assertTrue(isset($resultLinks[0]['id']));
  223. $this->assertEquals($link1Id, $resultLinks[0]['id']);
  224. $this->assertTrue(isset($resultLinks[0]['link_file']));
  225. $this->assertEquals($linkFile, $resultLinks[0]['link_file']);
  226. $this->assertTrue(isset($resultLinks[0]['sample_file']));
  227. $this->assertEquals($sampleFile, $resultLinks[0]['sample_file']);
  228. unset($resultLinks[0]['id']);
  229. unset($resultLinks[0]['link_file']);
  230. unset($resultLinks[0]['sample_file']);
  231. $this->assertTrue(isset($resultLinks[1]['id']));
  232. $this->assertGreaterThan($link2Id, $resultLinks[1]['id']);
  233. $this->assertTrue(isset($resultLinks[1]['link_file']));
  234. $this->assertTrue(isset($resultLinks[1]['sample_file']));
  235. unset($resultLinks[1]['id']);
  236. unset($resultLinks[1]['link_file']);
  237. unset($resultLinks[1]['sample_file']);
  238. $this->assertTrue(isset($resultLinks[2]['id']));
  239. $this->assertGreaterThan($link2Id, $resultLinks[2]['id']);
  240. unset($resultLinks[2]['id']);
  241. $expectedLinkData[] = [
  242. 'title' => 'link1_updated',
  243. 'sort_order' => 1, //the sort order needs to be smaller than 10
  244. 'is_shareable' => 0,
  245. 'price' => 5.0,
  246. 'number_of_downloads' => 999,
  247. 'link_type' => 'file',
  248. 'sample_type' => 'file',
  249. ];
  250. $expectedLinkData = array_merge($expectedLinkData, $this->getExpectedLinkData());
  251. $this->assertEquals($expectedLinkData, $resultLinks);
  252. $resultSamples = $response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_samples"];
  253. $this->assertEquals(2, count($resultSamples));
  254. }
  255. /**
  256. * Update downloadable product, update two links and change file content
  257. * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  258. */
  259. public function testUpdateDownloadableProductLinksWithNewFile()
  260. {
  261. $response = $this->createDownloadableProduct();
  262. $resultLinks
  263. = $response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_links"];
  264. $link1Id = $resultLinks[0]['id'];
  265. $link2Id = $resultLinks[1]['id'];
  266. $linkFile = 'link1_content_updated';
  267. $sampleFile = 'link1_sample_updated';
  268. $extension = '.jpg';
  269. $updatedLink1Data = [
  270. 'id' => $link1Id,
  271. 'title' => 'link1_updated',
  272. 'sort_order' => 1, //the sort order needs to be smaller than 10
  273. 'is_shareable' => 0,
  274. 'price' => 5.0,
  275. 'number_of_downloads' => 999,
  276. 'link_type' => 'file',
  277. 'link_file_content' => [
  278. 'name' => $linkFile . $extension,
  279. 'file_data' => base64_encode(file_get_contents($this->testImagePath)),
  280. ],
  281. 'sample_type' => 'file',
  282. 'sample_file_content' => [
  283. 'name' => $sampleFile . $extension,
  284. 'file_data' => base64_encode(file_get_contents($this->testImagePath)),
  285. ],
  286. ];
  287. $updatedLink2Data = [
  288. 'id' => $link2Id,
  289. 'title' => 'link2_updated',
  290. 'sort_order' => 2,
  291. 'is_shareable' => 0,
  292. 'price' => 6.0,
  293. 'number_of_downloads' => 0,
  294. 'link_type' => 'file',
  295. 'link_file_content' => [
  296. 'name' => 'link2_content.jpg',
  297. 'file_data' => base64_encode(file_get_contents($this->testImagePath)),
  298. ],
  299. 'sample_type' => 'file',
  300. 'sample_file_content' => [
  301. 'name' => 'link2_sample.jpg',
  302. 'file_data' => base64_encode(file_get_contents($this->testImagePath)),
  303. ],
  304. ];
  305. $response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_links"] =
  306. [$updatedLink1Data, $updatedLink2Data];
  307. $response = $this->saveProduct($response);
  308. $this->assertTrue(
  309. isset($response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_links"])
  310. );
  311. $this->assertTrue(
  312. isset($response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_samples"])
  313. );
  314. $resultLinks
  315. = $response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_links"];
  316. $this->assertEquals(2, count($resultLinks));
  317. $this->assertTrue(isset($resultLinks[0]['id']));
  318. $this->assertEquals($link1Id, $resultLinks[0]['id']);
  319. $this->assertTrue(isset($resultLinks[0]['link_file']));
  320. $this->assertGreaterThan(0, strpos($resultLinks[0]['link_file'], $linkFile));
  321. $this->assertStringEndsWith($extension, $resultLinks[0]['link_file']);
  322. $this->assertTrue(isset($resultLinks[0]['sample_file']));
  323. $this->assertGreaterThan(0, strpos($resultLinks[0]['sample_file'], $sampleFile));
  324. $this->assertStringEndsWith($extension, $resultLinks[0]['sample_file']);
  325. unset($resultLinks[0]['id']);
  326. unset($resultLinks[0]['link_file']);
  327. unset($resultLinks[0]['sample_file']);
  328. $this->assertTrue(isset($resultLinks[1]['id']));
  329. $this->assertEquals($link2Id, $resultLinks[1]['id']);
  330. $this->assertTrue(isset($resultLinks[1]['link_file']));
  331. $this->assertTrue(isset($resultLinks[1]['sample_file']));
  332. unset($resultLinks[1]['id']);
  333. unset($resultLinks[1]['link_file']);
  334. unset($resultLinks[1]['sample_file']);
  335. $expectedLinkData = [
  336. [
  337. 'title' => 'link1_updated',
  338. 'sort_order' => 1, //the sort order needs to be smaller than 10
  339. 'is_shareable' => 0,
  340. 'price' => 5.0,
  341. 'number_of_downloads' => 999,
  342. 'link_type' => 'file',
  343. 'sample_type' => 'file',
  344. ],
  345. [
  346. 'title' => 'link2_updated',
  347. 'sort_order' => 2,
  348. 'is_shareable' => 0,
  349. 'price' => 6.0,
  350. 'number_of_downloads' => 0,
  351. 'link_type' => 'file',
  352. 'sample_type' => 'file',
  353. 'link_url' => 'http://www.example.com/link2.jpg', //urls are still saved, just not used
  354. 'sample_url' => 'http://www.example.com/link2.jpg',
  355. ]
  356. ];
  357. $this->assertEquals($expectedLinkData, $resultLinks);
  358. $resultSamples = $response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_samples"];
  359. $this->assertEquals(2, count($resultSamples));
  360. }
  361. public function testUpdateDownloadableProductSamples()
  362. {
  363. $response = $this->createDownloadableProduct();
  364. $resultSample
  365. = $response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_samples"];
  366. $sample1Id = $resultSample[0]['id'];
  367. $sample2Id = $resultSample[1]['id'];
  368. $updatedSample1Data = [
  369. 'id' => $sample1Id,
  370. 'title' => 'sample1_updated',
  371. 'sort_order' => 1,
  372. 'sample_type' => 'url',
  373. 'sample_url' => 'http://www.example.com/sample1.jpg',
  374. ];
  375. $sampleData = $this->getSampleData();
  376. $response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_samples"] =
  377. [$updatedSample1Data, $sampleData['sample1'], $sampleData['sample2']];
  378. $response = $this->saveProduct($response);
  379. $this->assertTrue(
  380. isset($response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_links"])
  381. );
  382. $this->assertTrue(
  383. isset($response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_samples"])
  384. );
  385. $resultLinks
  386. = $response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_links"];
  387. $this->assertEquals(2, count($resultLinks));
  388. $resultSamples = $response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_samples"];
  389. $this->assertEquals(3, count($resultSamples));
  390. $this->assertTrue(isset($resultSamples[0]['id']));
  391. $this->assertEquals($sample1Id, $resultSamples[0]['id']);
  392. unset($resultSamples[0]['id']);
  393. $this->assertTrue(isset($resultSamples[1]['id']));
  394. $this->assertGreaterThan($sample2Id, $resultSamples[1]['id']);
  395. unset($resultSamples[1]['id']);
  396. $this->assertTrue(isset($resultSamples[2]['id']));
  397. $this->assertGreaterThan($sample2Id, $resultSamples[2]['id']);
  398. $this->assertTrue(isset($resultSamples[2]['sample_file']));
  399. unset($resultSamples[2]['sample_file']);
  400. unset($resultSamples[2]['id']);
  401. $expectedSampleData[] = [
  402. 'title' => 'sample1_updated',
  403. 'sort_order' => 1,
  404. 'sample_type' => 'url',
  405. 'sample_url' => 'http://www.example.com/sample1.jpg',
  406. ];
  407. $expectedSampleData = array_merge($expectedSampleData, $this->getExpectedSampleData());
  408. $this->assertEquals($expectedSampleData, $resultSamples);
  409. }
  410. public function testUpdateDownloadableProductSamplesWithNewFile()
  411. {
  412. $response = $this->createDownloadableProduct();
  413. $resultSample
  414. = $response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_samples"];
  415. $sample1Id = $resultSample[0]['id'];
  416. $sample2Id = $resultSample[1]['id'];
  417. //upload a file for sample 1
  418. $updatedSample1Data = [
  419. 'id' => $sample1Id,
  420. 'title' => 'sample1_updated',
  421. 'sort_order' => 1,
  422. 'sample_type' => 'file',
  423. 'sample_file_content' => [
  424. 'name' => 'sample1.jpg',
  425. 'file_data' => base64_encode(file_get_contents($this->testImagePath)),
  426. ],
  427. ];
  428. //change title for sample 2
  429. $updatedSamp2e1Data = [
  430. 'id' => $sample2Id,
  431. 'title' => 'sample2_updated',
  432. 'sort_order' => 2,
  433. 'sample_type' => 'file',
  434. ];
  435. $response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_samples"] =
  436. [$updatedSample1Data, $updatedSamp2e1Data];
  437. $response = $this->saveProduct($response);
  438. $this->assertTrue(
  439. isset($response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_links"])
  440. );
  441. $this->assertTrue(
  442. isset($response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_samples"])
  443. );
  444. $resultLinks
  445. = $response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_links"];
  446. $this->assertEquals(2, count($resultLinks));
  447. $resultSamples = $response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["downloadable_product_samples"];
  448. $this->assertEquals(2, count($resultSamples));
  449. $this->assertTrue(isset($resultSamples[0]['id']));
  450. $this->assertEquals($sample1Id, $resultSamples[0]['id']);
  451. unset($resultSamples[0]['id']);
  452. $this->assertTrue(isset($resultSamples[0]['sample_file']));
  453. $this->assertContains('sample1', $resultSamples[0]['sample_file']);
  454. $this->assertStringEndsWith('.jpg', $resultSamples[0]['sample_file']);
  455. unset($resultSamples[0]['sample_file']);
  456. $this->assertTrue(isset($resultSamples[1]['id']));
  457. $this->assertEquals($sample2Id, $resultSamples[1]['id']);
  458. unset($resultSamples[1]['id']);
  459. $this->assertTrue(isset($resultSamples[1]['sample_file']));
  460. $this->assertContains('sample2', $resultSamples[1]['sample_file']);
  461. $this->assertStringEndsWith('.jpg', $resultSamples[1]['sample_file']);
  462. unset($resultSamples[1]['sample_file']);
  463. $expectedSampleData = [
  464. [
  465. 'title' => 'sample1_updated',
  466. 'sort_order' => 1,
  467. 'sample_type' => 'file',
  468. 'sample_url' => 'http://www.example.com/sample1.jpg',
  469. ],
  470. [
  471. 'title' => 'sample2_updated',
  472. 'sort_order' => 2,
  473. 'sample_type' => 'file',
  474. ],
  475. ];
  476. $this->assertEquals($expectedSampleData, $resultSamples);
  477. }
  478. /**
  479. * Get product
  480. *
  481. * @param string $productSku
  482. * @return array the product data
  483. */
  484. protected function getProduct($productSku)
  485. {
  486. $serviceInfo = [
  487. 'rest' => [
  488. 'resourcePath' => self::RESOURCE_PATH . '/' . $productSku,
  489. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
  490. ],
  491. 'soap' => [
  492. 'service' => self::SERVICE_NAME,
  493. 'serviceVersion' => self::SERVICE_VERSION,
  494. 'operation' => self::SERVICE_NAME . 'Get',
  495. ],
  496. ];
  497. $response = (TESTS_WEB_API_ADAPTER == self::ADAPTER_SOAP) ?
  498. $this->_webApiCall($serviceInfo, ['sku' => $productSku]) : $this->_webApiCall($serviceInfo);
  499. return $response;
  500. }
  501. /**
  502. * Create product
  503. *
  504. * @param array $product
  505. * @return array the created product data
  506. */
  507. protected function createProduct($product)
  508. {
  509. $serviceInfo = [
  510. 'rest' => [
  511. 'resourcePath' => self::RESOURCE_PATH,
  512. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST
  513. ],
  514. 'soap' => [
  515. 'service' => self::SERVICE_NAME,
  516. 'serviceVersion' => self::SERVICE_VERSION,
  517. 'operation' => self::SERVICE_NAME . 'Save',
  518. ],
  519. ];
  520. $requestData = ['product' => $product];
  521. $response = $this->_webApiCall($serviceInfo, $requestData);
  522. return $response;
  523. }
  524. /**
  525. * Delete a product by sku
  526. *
  527. * @param $productSku
  528. * @return bool
  529. */
  530. protected function deleteProductBySku($productSku)
  531. {
  532. $resourcePath = self::RESOURCE_PATH . '/' . $productSku;
  533. $serviceInfo = [
  534. 'rest' => [
  535. 'resourcePath' => $resourcePath,
  536. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_DELETE
  537. ],
  538. 'soap' => [
  539. 'service' => self::SERVICE_NAME,
  540. 'serviceVersion' => self::SERVICE_VERSION,
  541. 'operation' => self::SERVICE_NAME . 'deleteById',
  542. ],
  543. ];
  544. $requestData = ["sku" => $productSku];
  545. $response = $this->_webApiCall($serviceInfo, $requestData);
  546. return $response;
  547. }
  548. /**
  549. * Save product
  550. *
  551. * @param array $product
  552. * @return array the created product data
  553. */
  554. protected function saveProduct($product)
  555. {
  556. $resourcePath = self::RESOURCE_PATH . '/' . $product['sku'];
  557. $serviceInfo = [
  558. 'rest' => [
  559. 'resourcePath' => $resourcePath,
  560. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT
  561. ],
  562. 'soap' => [
  563. 'service' => self::SERVICE_NAME,
  564. 'serviceVersion' => self::SERVICE_VERSION,
  565. 'operation' => self::SERVICE_NAME . 'Save',
  566. ],
  567. ];
  568. $requestData = ['product' => $product];
  569. $response = $this->_webApiCall($serviceInfo, $requestData);
  570. return $response;
  571. }
  572. }