From fa6782f3a22f1185ebd4e71e915962f2a57c199f Mon Sep 17 00:00:00 2001
From: nmalevanec <mikola.malevanec@transoftgroup.com>
Date: Wed, 13 Dec 2017 13:52:25 +0200
Subject: [PATCH] 6486: magento/magento2#6486: Unable to save certain product
 properties via Rest API

---
 .../Catalog/Model/ProductRepository.php       |  3 +++
 .../Api/ProductRepositoryInterfaceTest.php    | 26 +++++++++++++++++++
 .../Catalog/Model/ProductRepositoryTest.php   | 21 +++++++++++++++
 3 files changed, 50 insertions(+)

diff --git a/app/code/Magento/Catalog/Model/ProductRepository.php b/app/code/Magento/Catalog/Model/ProductRepository.php
index 83feea903f9..0ecbad55d74 100644
--- a/app/code/Magento/Catalog/Model/ProductRepository.php
+++ b/app/code/Magento/Catalog/Model/ProductRepository.php
@@ -329,6 +329,9 @@ class ProductRepository implements \Magento\Catalog\Api\ProductRepositoryInterfa
         unset($productData['media_gallery']);
         if ($createNew) {
             $product = $this->productFactory->create();
+            if (!isset($productData['product_type'])) {
+                $product->setTypeId(Product\Type::TYPE_SIMPLE);
+            }
             if ($this->storeManager->hasSingleStore()) {
                 $product->setWebsiteIds([$this->storeManager->getStore(true)->getWebsiteId()]);
             }
diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductRepositoryInterfaceTest.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductRepositoryInterfaceTest.php
index cb33edce3af..7b7ec5e628d 100644
--- a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductRepositoryInterfaceTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductRepositoryInterfaceTest.php
@@ -303,6 +303,32 @@ class ProductRepositoryInterfaceTest extends WebapiAbstract
         }
     }
 
+    /**
+     * Test that Product Repository can correctly create simple product, if product type not specified in request.
+     *
+     * @return void
+     */
+    public function testCreateWithoutSpecifiedType()
+    {
+        $price = 3.62;
+        $weight = 12.2;
+        $sku = 'simple_product_without_specified_type';
+        $product = [
+            'sku' => '' . $sku . '',
+            'name' => 'Simple Product Without Specified Type',
+            'price' => $price,
+            'weight' => $weight,
+            'attribute_set_id' => 4,
+        ];
+        $response = $this->saveProduct($product);
+        $this->assertSame($sku, $response[ProductInterface::SKU]);
+        $this->assertSame(\Magento\Catalog\Model\Product\Type::TYPE_SIMPLE, $response[ProductInterface::TYPE_ID]);
+        $this->assertSame($price, $response[ProductInterface::PRICE]);
+        $this->assertSame($weight, $response[ProductInterface::WEIGHT]);
+        //Clean up.
+        $this->deleteProduct($product[ProductInterface::SKU]);
+    }
+
     /**
      * @param array $fixtureProduct
      *
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductRepositoryTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductRepositoryTest.php
index 9518e9c0cdf..330487b757f 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductRepositoryTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductRepositoryTest.php
@@ -49,4 +49,25 @@ class ProductRepositoryTest extends \PHPUnit\Framework\TestCase
         $updatedProduct->load($productId);
         self::assertSame($newSku, $updatedProduct->getSku());
     }
+
+    /**
+     * Check Product Repository able to correctly create product without specified type.
+     *
+     * @magentoDbIsolation enabled
+     */
+    public function testCreateWithoutSpecifiedType()
+    {
+        /** @var Product $product */
+        $product = Bootstrap::getObjectManager()->get(ProductFactory::class)->create();
+        $product->setName('Simple without specified type');
+        $product->setSku('simple_without_specified_type');
+        $product->setPrice(1.12);
+        $product->setWeight(1.23);
+        $product->setAttributeSetId(4);
+        $product = $this->productRepository->save($product);
+
+        self::assertSame('1.1200', $product->getPrice());
+        self::assertSame('1.2300', $product->getWeight());
+        self::assertSame('simple', $product->getTypeId());
+    }
 }
-- 
GitLab