From 6a248c623610da16ecbd93a79d5f94c8fe8c70eb Mon Sep 17 00:00:00 2001 From: Herbert Maschke Date: Mon, 10 Aug 2020 09:51:15 +0200 Subject: [PATCH] test and fix skipping of attributes and relations (product copy) --- .../src/Repositories/ProductRepository.php | 14 ++++----- tests/functional/Product/ProductCopyCest.php | 30 +++++++++++++++++++ 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/packages/Webkul/Product/src/Repositories/ProductRepository.php b/packages/Webkul/Product/src/Repositories/ProductRepository.php index dd5405e93..e7e4571e4 100755 --- a/packages/Webkul/Product/src/Repositories/ProductRepository.php +++ b/packages/Webkul/Product/src/Repositories/ProductRepository.php @@ -660,43 +660,43 @@ class ProductRepository extends Repository { $attributesToSkip = config('products.skipAttributesOnCopy') ?? []; - if (! isset($attributesToSkip['categories'])) { + if (! in_array('categories', $attributesToSkip)) { foreach ($originalProduct->categories as $category) { $copiedProduct->categories()->save($category->replicate()); } } - if (! isset($attributesToSkip['inventories'])) { + if (! in_array('inventories', $attributesToSkip)) { foreach ($originalProduct->inventories as $inventory) { $copiedProduct->inventories()->save($inventory->replicate()); } } - if (! isset($attributesToSkip['customer_group_prices'])) { + if (! in_array('customer_group_pricces', $attributesToSkip)) { foreach ($originalProduct->customer_group_prices as $customer_group_price) { $copiedProduct->customer_group_prices()->save($customer_group_price->replicate()); } } - if (! isset($attributesToSkip['images'])) { + if (! in_array('images', $attributesToSkip)) { foreach ($originalProduct->images as $image) { $copiedProduct->images()->save($image->replicate()); } } - if (! isset($attributesToSkip['super_attributes'])) { + if (! in_array('super_attributes', $attributesToSkip)) { foreach ($originalProduct->super_attributes as $super_attribute) { $copiedProduct->super_attributes()->save($super_attribute->replicate()); } } - if (! isset($attributesToSkip['bundle_options'])) { + if (! in_array('bundle_options', $attributesToSkip)) { foreach ($originalProduct->bundle_options as $bundle_option) { $copiedProduct->bundle_options()->save($bundle_option->replicate()); } } - if (! isset($attributesToSkip['variants'])) { + if (! in_array('variants', $attributesToSkip)) { foreach ($originalProduct->variants as $variant) { $variant = $this->copy($variant); $variant->parent_id = $copiedProduct->id; diff --git a/tests/functional/Product/ProductCopyCest.php b/tests/functional/Product/ProductCopyCest.php index 448a72c3b..4ecab0f97 100644 --- a/tests/functional/Product/ProductCopyCest.php +++ b/tests/functional/Product/ProductCopyCest.php @@ -12,6 +12,36 @@ use Webkul\Product\Models\ProductAttributeValue; class ProductCopyCest { + public function testSkipAttributes(FunctionalTester $I) + { + $I->loginAsAdmin(); + + config(['products.skipAttributesOnCopy' => ['name', 'inventories']]); + + $original = $I->haveProduct(Laravel5Helper::SIMPLE_PRODUCT, [ + 'productInventory' => [ + 'qty' => 10, + ], + 'attributeValues' => [ + 'name' => 'Original', + ], + ]); + + $I->amOnAdminRoute('admin.catalog.products.copy', ['id' => $original->id], false); + + // test attribute is skipped: + $attr = $I->dontSeeRecord(ProductAttributeValue::class, [ + 'attribute_id' => 2, // name + 'product_id' => $original->id + 1, + ]); + + // test relation is skipped: + $I->dontSeeRecord(ProductInventory::class, [ + 'product_id' => $original->id + 1, + 'qty' => 10, + ]); + } + public function testProductCopy(FunctionalTester $I) { $I->loginAsAdmin();