Skip to content

Commit 3ae9e5b

Browse files
authored
LYNX-184: Scope issue in attributeForm result
1 parent c2c0baa commit 3ae9e5b

File tree

3 files changed

+69
-3
lines changed

3 files changed

+69
-3
lines changed

app/code/Magento/Customer/Test/Fixture/CustomerAttribute.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,10 @@ class CustomerAttribute implements RevertibleDataFixtureInterface
4141
'attribute_group_id' => null,
4242
'input_filter' => null,
4343
'multiline_count' => 0,
44-
'validate_rules' => null
44+
'validate_rules' => null,
45+
'website_id' => null,
46+
'is_visible' => 1,
47+
'scope_is_visible' => 1,
4548
];
4649

4750
/**
@@ -110,6 +113,9 @@ public function apply(array $data = []): ?DataObject
110113
$attr = $this->attributeFactory->createAttribute(Attribute::class, self::DEFAULT_DATA);
111114
$mergedData = $this->processor->process($this, $this->dataMerger->merge(self::DEFAULT_DATA, $data));
112115
$attr->setData($mergedData);
116+
if (isset($data['website_id'])) {
117+
$attr->setWebsite($data['website_id']);
118+
}
113119
$this->resourceModelAttribute->save($attr);
114120
return $attr;
115121
}

app/code/Magento/EavGraphQl/Model/GetAttributesMetadata.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,7 @@ public function execute(array $attributesInputs, int $storeId): array
7575
foreach ($codes as $entityType => $attributeCodes) {
7676
$builder = $this->searchCriteriaBuilderFactory->create();
7777
$builder
78-
->addFilter('attribute_code', $attributeCodes, 'in')
79-
->addFilter('is_visible', true);
78+
->addFilter('attribute_code', $attributeCodes, 'in');
8079
try {
8180
$attributes = $this->attributeRepository->getList($entityType, $builder->create())->getItems();
8281
} catch (LocalizedException $exception) {
@@ -95,6 +94,9 @@ public function execute(array $attributesInputs, int $storeId): array
9594
];
9695
}
9796
foreach ($attributes as $attribute) {
97+
if (method_exists($attribute, 'getIsVisible') && !$attribute->getIsVisible()) {
98+
continue;
99+
}
98100
$items[] = $this->getAttributeData->execute($attribute, $entityType, $storeId);
99101
}
100102
}

dev/tests/api-functional/testsuite/Magento/GraphQl/Customer/Attribute/AttributesFormTest.php

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
use Magento\Customer\Api\AddressMetadataInterface;
1111
use Magento\Customer\Test\Fixture\CustomerAttribute;
1212
use Magento\Eav\Api\Data\AttributeInterface;
13+
use Magento\Store\Api\Data\StoreInterface;
14+
use Magento\Store\Test\Fixture\Group as StoreGroupFixture;
15+
use Magento\Store\Test\Fixture\Store as StoreFixture;
16+
use Magento\Store\Test\Fixture\Website as WebsiteFixture;
1317
use Magento\TestFramework\Fixture\DataFixture;
1418
use Magento\TestFramework\Fixture\DataFixtureStorageManager;
1519
use Magento\TestFramework\TestCase\GraphQlAbstract;
@@ -123,4 +127,58 @@ public function testAttributesFormDoesNotExist(): void
123127
$this->graphQlQuery(sprintf(self::QUERY, 'not_existing_form'))
124128
);
125129
}
130+
131+
#[
132+
DataFixture(WebsiteFixture::class, as: 'website2'),
133+
DataFixture(StoreGroupFixture::class, ['website_id' => '$website2.id$'], 'store_group2'),
134+
DataFixture(StoreFixture::class, ['store_group_id' => '$store_group2.id$'], 'store2'),
135+
DataFixture(
136+
CustomerAttribute::class,
137+
[
138+
'entity_type_id' => AddressMetadataInterface::ATTRIBUTE_SET_ID_ADDRESS,
139+
'used_in_forms' => ['customer_register_address'],
140+
'website_id' => '$website2.id$',
141+
'scope_is_visible' => 1,
142+
'is_visible' => 0,
143+
],
144+
'attribute_1'
145+
),
146+
]
147+
public function testAttributesFormScope(): void
148+
{
149+
/** @var AttributeInterface $attribute1 */
150+
$attribute1 = DataFixtureStorageManager::getStorage()->get('attribute_1');
151+
152+
$result = $this->graphQlQuery(sprintf(self::QUERY, 'customer_register_address'));
153+
154+
foreach ($result['attributesForm']['items'] as $item) {
155+
if (array_contains($item, $attribute1->getAttributeCode())) {
156+
$this->fail(
157+
sprintf("Attribute '%s' found in query response in global scope", $attribute1->getAttributeCode())
158+
);
159+
}
160+
}
161+
162+
/** @var StoreInterface $store */
163+
$store = DataFixtureStorageManager::getStorage()->get('store2');
164+
165+
$result = $this->graphQlQuery(
166+
sprintf(self::QUERY, 'customer_register_address'),
167+
[],
168+
'',
169+
['Store' => $store->getCode()]
170+
);
171+
172+
foreach ($result['attributesForm']['items'] as $item) {
173+
if (array_contains($item, $attribute1->getAttributeCode())) {
174+
return;
175+
}
176+
}
177+
$this->fail(
178+
sprintf(
179+
"Attribute '%s' not found in query response in website scope",
180+
$attribute1->getAttributeCode()
181+
)
182+
);
183+
}
126184
}

0 commit comments

Comments
 (0)