ConfigurableTest.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\ConfigurableImportExport\Model;
  7. use Magento\CatalogImportExport\Model\AbstractProductExportImportTestCase;
  8. class ConfigurableTest extends AbstractProductExportImportTestCase
  9. {
  10. /**
  11. * @return array
  12. */
  13. public function exportImportDataProvider(): array
  14. {
  15. return [
  16. 'configurable-product' => [
  17. [
  18. 'Magento/ConfigurableProduct/_files/product_configurable.php'
  19. ],
  20. [
  21. 'configurable',
  22. ],
  23. ['_cache_instance_products', '_cache_instance_configurable_attributes'],
  24. ],
  25. 'configurable-product-12345' => [
  26. [
  27. 'Magento/ConfigurableProduct/_files/product_configurable_12345.php'
  28. ],
  29. [
  30. '12345',
  31. ],
  32. ['_cache_instance_products', '_cache_instance_configurable_attributes'],
  33. ],
  34. ];
  35. }
  36. /**
  37. * @inheritdoc
  38. */
  39. protected function assertEqualsSpecificAttributes(
  40. \Magento\Catalog\Model\Product $expectedProduct,
  41. \Magento\Catalog\Model\Product $actualProduct
  42. ): void {
  43. /** @var \Magento\ConfigurableProduct\Model\Product\Type\Configurable $productType */
  44. $productType = $expectedProduct->getTypeInstance();
  45. $expectedAssociatedProducts = $productType->getUsedProductCollection($expectedProduct);
  46. $actualAssociatedProducts = iterator_to_array($productType->getUsedProductCollection($actualProduct));
  47. $expectedAssociatedProductSkus = [];
  48. $actualAssociatedProductSkus = [];
  49. foreach ($expectedAssociatedProducts as $i => $associatedProduct) {
  50. $expectedAssociatedProductSkus[] = $associatedProduct->getSku();
  51. $actualAssociatedProductSkus[] = $actualAssociatedProducts[$i]->getSku();
  52. }
  53. $this->assertEquals($expectedAssociatedProductSkus, $actualAssociatedProductSkus);
  54. $expectedProductExtensionAttributes = $expectedProduct->getExtensionAttributes();
  55. $actualProductExtensionAttributes = $actualProduct->getExtensionAttributes();
  56. $this->assertEquals(
  57. count($expectedProductExtensionAttributes->getConfigurableProductLinks()),
  58. count($actualProductExtensionAttributes->getConfigurableProductLinks())
  59. );
  60. $expectedConfigurableProductOptions = $expectedProductExtensionAttributes->getConfigurableProductOptions();
  61. $actualConfigurableProductOptions = $actualProductExtensionAttributes->getConfigurableProductOptions();
  62. $this->assertEquals(count($expectedConfigurableProductOptions), count($actualConfigurableProductOptions));
  63. $expectedConfigurableProductOptionsToCompare = [];
  64. foreach ($expectedConfigurableProductOptions as $expectedConfigurableProductOption) {
  65. foreach ($expectedConfigurableProductOption->getOptions() as $optionValue) {
  66. $expectedConfigurableProductOptionsToCompare[$expectedConfigurableProductOption->getLabel()][]
  67. = $optionValue['label'];
  68. }
  69. }
  70. $actualConfigurableProductOptionsToCompare = [];
  71. foreach ($actualConfigurableProductOptions as $actualConfigurableProductOption) {
  72. foreach ($actualConfigurableProductOption->getOptions() as $optionValue) {
  73. $actualConfigurableProductOptionsToCompare[$actualConfigurableProductOption->getLabel()][]
  74. = $optionValue['label'];
  75. }
  76. }
  77. $this->assertEquals(
  78. count($expectedConfigurableProductOptionsToCompare),
  79. count($actualConfigurableProductOptionsToCompare)
  80. );
  81. foreach ($expectedConfigurableProductOptionsToCompare as $key => $expectedOptionValues) {
  82. $actualOptionValues = $actualConfigurableProductOptionsToCompare[$key];
  83. sort($expectedOptionValues);
  84. sort($actualOptionValues);
  85. $this->assertEquals($expectedOptionValues, $actualOptionValues);
  86. }
  87. }
  88. /**
  89. * @inheritdoc
  90. */
  91. protected function executeImportReplaceTest(
  92. $skus,
  93. $skippedAttributes,
  94. $usePagination = false,
  95. string $csvfile = null
  96. ) {
  97. $skippedAttributes = array_merge($skippedAttributes, ['_cache_instance_product_set_attributes']);
  98. parent::executeImportReplaceTest($skus, $skippedAttributes, $usePagination, $csvfile);
  99. }
  100. }