Skip to content

Commit dc94dc9

Browse files
committed
Merge remote-tracking branch 'origin/2.3.2-develop' into MC-16221
2 parents e67fbbd + b651a26 commit dc94dc9

File tree

54 files changed

+1170
-363
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+1170
-363
lines changed

app/code/Magento/Catalog/Block/Product/View/Options/Type/Select.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public function __construct(
5858
*
5959
* @return string
6060
*/
61-
public function getValuesHtml()
61+
public function getValuesHtml(): string
6262
{
6363
$option = $this->getOption();
6464
$optionType = $option->getType();

app/code/Magento/CatalogGraphQl/Model/Resolver/Category/CategoriesIdentity.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
*/
1515
class CategoriesIdentity implements IdentityInterface
1616
{
17+
/** @var string */
18+
private $cacheTag = \Magento\Catalog\Model\Category::CACHE_TAG;
19+
1720
/**
1821
* Get category IDs from resolved data
1922
*
@@ -25,7 +28,10 @@ public function getIdentities(array $resolvedData): array
2528
$ids = [];
2629
if (!empty($resolvedData)) {
2730
foreach ($resolvedData as $category) {
28-
$ids[] = $category['id'];
31+
$ids[] = sprintf('%s_%s', $this->cacheTag, $category['id']);
32+
}
33+
if (!empty($ids)) {
34+
array_unshift($ids, $this->cacheTag);
2935
}
3036
}
3137
return $ids;

app/code/Magento/CatalogGraphQl/Model/Resolver/Category/CategoryTreeIdentity.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
*/
1515
class CategoryTreeIdentity implements IdentityInterface
1616
{
17+
/** @var string */
18+
private $cacheTag = \Magento\Catalog\Model\Category::CACHE_TAG;
19+
1720
/**
1821
* Get category ID from resolved data
1922
*
@@ -22,6 +25,7 @@ class CategoryTreeIdentity implements IdentityInterface
2225
*/
2326
public function getIdentities(array $resolvedData): array
2427
{
25-
return empty($resolvedData['id']) ? [] : [$resolvedData['id']];
28+
return empty($resolvedData['id']) ?
29+
[] : [$this->cacheTag, sprintf('%s_%s', $this->cacheTag, $resolvedData['id'])];
2630
}
2731
}

app/code/Magento/CatalogGraphQl/Model/Resolver/Product/Identity.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
*/
1515
class Identity implements IdentityInterface
1616
{
17+
/** @var string */
18+
private $cacheTag = \Magento\Catalog\Model\Product::CACHE_TAG;
19+
1720
/**
1821
* Get product ids for cache tag
1922
*
@@ -25,7 +28,10 @@ public function getIdentities(array $resolvedData): array
2528
$ids = [];
2629
$items = $resolvedData['items'] ?? [];
2730
foreach ($items as $item) {
28-
$ids[] = $item['entity_id'];
31+
$ids[] = sprintf('%s_%s', $this->cacheTag, $item['entity_id']);
32+
}
33+
if (!empty($ids)) {
34+
array_unshift($ids, $this->cacheTag);
2935
}
3036

3137
return $ids;

app/code/Magento/CatalogGraphQl/etc/schema.graphqls

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ type Query {
88
pageSize: Int = 20 @doc(description: "Specifies the maximum number of results to return at once. This attribute is optional."),
99
currentPage: Int = 1 @doc(description: "Specifies which page of results to return. The default value is 1."),
1010
sort: ProductSortInput @doc(description: "Specifies which attribute to sort on, and whether to return the results in ascending or descending order.")
11-
): Products
12-
@resolver(class: "Magento\\CatalogGraphQl\\Model\\Resolver\\Products") @doc(description: "The products query searches for products that match the criteria specified in the search and filter attributes") @cache(cacheTag: "cat_p", cacheIdentity: "Magento\\CatalogGraphQl\\Model\\Resolver\\Product\\Identity")
11+
): Products
12+
@resolver(class: "Magento\\CatalogGraphQl\\Model\\Resolver\\Products") @doc(description: "The products query searches for products that match the criteria specified in the search and filter attributes") @cache(cacheIdentity: "Magento\\CatalogGraphQl\\Model\\Resolver\\Product\\Identity")
1313
category (
1414
id: Int @doc(description: "Id of the category")
1515
): CategoryTree
16-
@resolver(class: "Magento\\CatalogGraphQl\\Model\\Resolver\\CategoryTree") @doc(description: "The category query searches for categories that match the criteria specified in the search and filter attributes") @cache(cacheTag: "cat_c", cacheIdentity: "Magento\\CatalogGraphQl\\Model\\Resolver\\Category\\CategoryTreeIdentity")
16+
@resolver(class: "Magento\\CatalogGraphQl\\Model\\Resolver\\CategoryTree") @doc(description: "The category query searches for categories that match the criteria specified in the search and filter attributes") @cache(cacheIdentity: "Magento\\CatalogGraphQl\\Model\\Resolver\\Category\\CategoryTreeIdentity")
1717
}
1818

1919
type Price @doc(description: "The Price object defines the price of a product as well as any tax-related adjustments.") {
@@ -97,7 +97,7 @@ interface ProductInterface @typeResolver(class: "Magento\\CatalogGraphQl\\Model\
9797
price: ProductPrices @doc(description: "A ProductPrices object, indicating the price of an item") @resolver(class: "Magento\\CatalogGraphQl\\Model\\Resolver\\Product\\Price")
9898
gift_message_available: String @doc(description: "Indicates whether a gift message is available")
9999
manufacturer: Int @doc(description: "A number representing the product's manufacturer")
100-
categories: [CategoryInterface] @doc(description: "The categories assigned to a product") @cache(cacheTag: "cat_c", cacheIdentity: "Magento\\CatalogGraphQl\\Model\\Resolver\\Category\\CategoriesIdentity") @resolver(class: "Magento\\CatalogGraphQl\\Model\\Resolver\\Categories")
100+
categories: [CategoryInterface] @doc(description: "The categories assigned to a product") @resolver(class: "Magento\\CatalogGraphQl\\Model\\Resolver\\Categories") @cache(cacheIdentity: "Magento\\CatalogGraphQl\\Model\\Resolver\\Category\\CategoriesIdentity")
101101
canonical_url: String @doc(description: "Canonical URL") @resolver(class: "Magento\\CatalogGraphQl\\Model\\Resolver\\Product\\CanonicalUrl")
102102
}
103103

@@ -218,7 +218,7 @@ interface CategoryInterface @typeResolver(class: "Magento\\CatalogGraphQl\\Model
218218
pageSize: Int = 20 @doc(description: "Specifies the maximum number of results to return at once. This attribute is optional."),
219219
currentPage: Int = 1 @doc(description: "Specifies which page of results to return. The default value is 1."),
220220
sort: ProductSortInput @doc(description: "Specifies which attribute to sort on, and whether to return the results in ascending or descending order.")
221-
): CategoryProducts @doc(description: "The list of products assigned to the category") @cache(cacheTag: "cat_p", cacheIdentity: "Magento\\CatalogGraphQl\\Model\\Resolver\\Product\\Identity") @resolver(class: "Magento\\CatalogGraphQl\\Model\\Resolver\\Category\\Products")
221+
): CategoryProducts @doc(description: "The list of products assigned to the category") @cache(cacheIdentity: "Magento\\CatalogGraphQl\\Model\\Resolver\\Product\\Identity") @resolver(class: "Magento\\CatalogGraphQl\\Model\\Resolver\\Category\\Products")
222222
breadcrumbs: [Breadcrumb] @doc(description: "Breadcrumbs, parent categories info") @resolver(class: "Magento\\CatalogGraphQl\\Model\\Resolver\\Category\\Breadcrumbs")
223223
}
224224

@@ -233,7 +233,7 @@ type CustomizableRadioOption implements CustomizableOptionInterface @doc(descrip
233233
value: [CustomizableRadioValue] @doc(description: "An array that defines a set of radio buttons")
234234
}
235235

236-
type CustomizableRadioValue @doc(description: "CustomizableRadioValue defines the price and sku of a product whose page contains a customized set of radio buttons") {
236+
type CustomizableRadioValue @doc(description: "CustomizableRadioValue defines the price and sku of a product whose page contains a customized set of radio buttons") {
237237
option_type_id: Int @doc(description: "The ID assigned to the value")
238238
price: Float @doc(description: "The price assigned to this option")
239239
price_type: PriceTypeEnum @doc(description: "FIXED, PERCENT, or DYNAMIC")
@@ -246,7 +246,7 @@ type CustomizableCheckboxOption implements CustomizableOptionInterface @doc(desc
246246
value: [CustomizableCheckboxValue] @doc(description: "An array that defines a set of checkbox values")
247247
}
248248

249-
type CustomizableCheckboxValue @doc(description: "CustomizableCheckboxValue defines the price and sku of a product whose page contains a customized set of checkbox values") {
249+
type CustomizableCheckboxValue @doc(description: "CustomizableCheckboxValue defines the price and sku of a product whose page contains a customized set of checkbox values") {
250250
option_type_id: Int @doc(description: "The ID assigned to the value")
251251
price: Float @doc(description: "The price assigned to this option")
252252
price_type: PriceTypeEnum @doc(description: "FIXED, PERCENT, or DYNAMIC")
@@ -329,7 +329,7 @@ type ProductMediaGalleryEntriesVideoContent @doc(description: "ProductMediaGalle
329329
video_metadata: String @doc(description: "Optional data about the video")
330330
}
331331

332-
input ProductSortInput @doc(description: "ProductSortInput specifies the attribute to use for sorting search results and indicates whether the results are sorted in ascending or descending order") {
332+
input ProductSortInput @doc(description: "ProductSortInput specifies the attribute to use for sorting search results and indicates whether the results are sorted in ascending or descending order") {
333333
name: SortEnum @doc(description: "The product name. Customers use this name to identify the product.")
334334
sku: SortEnum @doc(description: "A number or code assigned to a product to identify the product, options, price, and manufacturer")
335335
description: SortEnum @doc(description: "Detailed information about the product. The value can include simple HTML tags.")
@@ -363,7 +363,7 @@ input ProductSortInput @doc(description: "ProductSortInput specifies the attrib
363363
gift_message_available: SortEnum @doc(description: "Indicates whether a gift message is available")
364364
}
365365

366-
type MediaGalleryEntry @doc(description: "MediaGalleryEntry defines characteristics about images and videos associated with a specific product") {
366+
type MediaGalleryEntry @doc(description: "MediaGalleryEntry defines characteristics about images and videos associated with a specific product") {
367367
id: Int @doc(description: "The identifier assigned to the object")
368368
media_type: String @doc(description: "image or video")
369369
label: String @doc(description: "The alt text displayed on the UI when the user points to the image")
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\CatalogUrlRewriteGraphQl\Model\Resolver\UrlRewrite;
9+
10+
use Magento\Framework\GraphQl\Query\Resolver\IdentityInterface;
11+
12+
/**
13+
* Get ids from catalog url rewrite
14+
*/
15+
class CatalogUrlResolverIdentity implements IdentityInterface
16+
{
17+
/** @var string */
18+
private $categoryCacheTag = \Magento\Catalog\Model\Category::CACHE_TAG;
19+
20+
/** @var string */
21+
private $productCacheTag = \Magento\Catalog\Model\Product::CACHE_TAG;
22+
23+
/**
24+
* Get identities cache ID from a catalog url rewrite entities
25+
*
26+
* @param array $resolvedData
27+
* @return string[]
28+
*/
29+
public function getIdentities(array $resolvedData): array
30+
{
31+
$ids = [];
32+
if (isset($resolvedData['id'])) {
33+
$selectedCacheTag = isset($resolvedData['type']) ?
34+
$this->getTagFromEntityType($resolvedData['type']) : '';
35+
if (!empty($selectedCacheTag)) {
36+
$ids = [$selectedCacheTag, sprintf('%s_%s', $selectedCacheTag, $resolvedData['id'])];
37+
}
38+
}
39+
return $ids;
40+
}
41+
42+
/**
43+
* Match tag to entity type
44+
*
45+
* @param string $entityType
46+
* @return string
47+
*/
48+
private function getTagFromEntityType(string $entityType) : string
49+
{
50+
$selectedCacheTag = '';
51+
$type = strtolower($entityType);
52+
switch ($type) {
53+
case 'product':
54+
$selectedCacheTag = $this->productCacheTag;
55+
break;
56+
case 'category':
57+
$selectedCacheTag = $this->categoryCacheTag;
58+
break;
59+
}
60+
return $selectedCacheTag;
61+
}
62+
}

app/code/Magento/CatalogUrlRewriteGraphQl/composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"type": "magento2-module",
55
"require": {
66
"php": "~7.1.3||~7.2.0",
7+
"magento/module-catalog": "*",
78
"magento/framework": "*"
89
},
910
"suggest": {
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
9+
<type name="Magento\UrlRewriteGraphQl\Model\Resolver\UrlRewrite\UrlResolverIdentity">
10+
<arguments>
11+
<argument name="urlResolverIdentities" xsi:type="array">
12+
<item name="product" xsi:type="object">Magento\CatalogUrlRewriteGraphQl\Model\Resolver\UrlRewrite\CatalogUrlResolverIdentity</item>
13+
<item name="category" xsi:type="object">Magento\CatalogUrlRewriteGraphQl\Model\Resolver\UrlRewrite\CatalogUrlResolverIdentity</item>
14+
</argument>
15+
</arguments>
16+
</type>
17+
</config>

app/code/Magento/CmsGraphQl/Model/Resolver/Block/Identity.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
*/
1616
class Identity implements IdentityInterface
1717
{
18+
/** @var string */
19+
private $cacheTag = \Magento\Cms\Model\Block::CACHE_TAG;
20+
1821
/**
1922
* Get block identities from resolved data
2023
*
@@ -27,11 +30,15 @@ public function getIdentities(array $resolvedData): array
2730
$items = $resolvedData['items'] ?? [];
2831
foreach ($items as $item) {
2932
if (is_array($item) && !empty($item[BlockInterface::BLOCK_ID])) {
30-
$ids[] = $item[BlockInterface::BLOCK_ID];
31-
$ids[] = $item[BlockInterface::IDENTIFIER];
33+
$ids[] = sprintf('%s_%s', $this->cacheTag, $item[BlockInterface::BLOCK_ID]);
34+
$ids[] = sprintf('%s_%s', $this->cacheTag, $item[BlockInterface::IDENTIFIER]);
3235
}
3336
}
3437

38+
if (!empty($ids)) {
39+
array_unshift($ids, $this->cacheTag);
40+
}
41+
3542
return $ids;
3643
}
3744
}

app/code/Magento/CmsGraphQl/Model/Resolver/Page/Identity.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
*/
1616
class Identity implements IdentityInterface
1717
{
18+
/** @var string */
19+
private $cacheTag = \Magento\Cms\Model\Page::CACHE_TAG;
20+
1821
/**
1922
* Get page ID from resolved data
2023
*
@@ -23,6 +26,7 @@ class Identity implements IdentityInterface
2326
*/
2427
public function getIdentities(array $resolvedData): array
2528
{
26-
return empty($resolvedData[PageInterface::PAGE_ID]) ? [] : [$resolvedData[PageInterface::PAGE_ID]];
29+
return empty($resolvedData[PageInterface::PAGE_ID]) ?
30+
[] : [$this->cacheTag, sprintf('%s_%s', $this->cacheTag, $resolvedData[PageInterface::PAGE_ID])];
2731
}
2832
}

app/code/Magento/CmsGraphQl/etc/schema.graphqls

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ type StoreConfig @doc(description: "The type contains information about a store
1313
type Query {
1414
cmsPage (
1515
id: Int @doc(description: "Id of the CMS page")
16-
): CmsPage @resolver(class: "Magento\\CmsGraphQl\\Model\\Resolver\\Page") @doc(description: "The CMS page query returns information about a CMS page") @cache(cacheTag: "cms_p", cacheIdentity: "Magento\\CmsGraphQl\\Model\\Resolver\\Page\\Identity")
16+
): CmsPage @resolver(class: "Magento\\CmsGraphQl\\Model\\Resolver\\Page") @doc(description: "The CMS page query returns information about a CMS page") @cache(cacheIdentity: "Magento\\CmsGraphQl\\Model\\Resolver\\Page\\Identity")
1717
cmsBlocks (
1818
identifiers: [String] @doc(description: "Identifiers of the CMS blocks")
19-
): CmsBlocks @resolver(class: "Magento\\CmsGraphQl\\Model\\Resolver\\Blocks") @doc(description: "The CMS block query returns information about CMS blocks") @cache(cacheTag: "cms_b", cacheIdentity: "Magento\\CmsGraphQl\\Model\\Resolver\\Block\\Identity")
19+
): CmsBlocks @resolver(class: "Magento\\CmsGraphQl\\Model\\Resolver\\Blocks") @doc(description: "The CMS block query returns information about CMS blocks") @cache(cacheIdentity: "Magento\\CmsGraphQl\\Model\\Resolver\\Block\\Identity")
2020
}
2121

2222
type CmsPage @doc(description: "CMS page defines all CMS page information") {
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\CmsUrlRewriteGraphQl\Model\Resolver\UrlRewrite;
9+
10+
use Magento\Framework\GraphQl\Query\Resolver\IdentityInterface;
11+
12+
/**
13+
* Get ids from cms page url rewrite
14+
*/
15+
class CmsUrlResolverIdentity implements IdentityInterface
16+
{
17+
/** @var string */
18+
private $cacheTag = \Magento\Cms\Model\Page::CACHE_TAG;
19+
20+
/**
21+
* Get identities cache ID from a url rewrite entities
22+
*
23+
* @param array $resolvedData
24+
* @return string[]
25+
*/
26+
public function getIdentities(array $resolvedData): array
27+
{
28+
$ids = [];
29+
if (isset($resolvedData['id'])) {
30+
$selectedCacheTag = $this->cacheTag;
31+
$ids = [$selectedCacheTag, sprintf('%s_%s', $selectedCacheTag, $resolvedData['id'])];
32+
}
33+
return $ids;
34+
}
35+
}

app/code/Magento/CmsUrlRewriteGraphQl/composer.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
"require": {
66
"php": "~7.1.3||~7.2.0",
77
"magento/framework": "*",
8-
"magento/module-url-rewrite-graph-ql": "*",
8+
"magento/module-cms": "*",
99
"magento/module-store": "*",
10-
"magento/module-cms": "*"
10+
"magento/module-url-rewrite-graph-ql": "*"
1111
},
1212
"suggest": {
1313
"magento/module-cms-url-rewrite": "*",

app/code/Magento/CmsUrlRewriteGraphQl/etc/di.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,11 @@
1313
</argument>
1414
</arguments>
1515
</type>
16+
<type name="Magento\UrlRewriteGraphQl\Model\Resolver\UrlRewrite\UrlResolverIdentity">
17+
<arguments>
18+
<argument name="urlResolverIdentities" xsi:type="array">
19+
<item name="cms_page" xsi:type="object">Magento\CmsUrlRewriteGraphQl\Model\Resolver\UrlRewrite\CmsUrlResolverIdentity</item>
20+
</argument>
21+
</arguments>
22+
</type>
1623
</config>

app/code/Magento/ConfigurableProductGraphQl/etc/schema.graphqls

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ type ConfigurableProduct implements ProductInterface, PhysicalProductInterface,
1010
}
1111

1212
type ConfigurableVariant @doc(description: "An array containing all the simple product variants of a configurable product") {
13-
attributes: [ConfigurableAttributeOption] @resolver(class: "Magento\\ConfigurableProductGraphQl\\Model\\Resolver\\Variant\\Attributes") @doc(description: "")
13+
attributes: [ConfigurableAttributeOption] @resolver(class: "Magento\\ConfigurableProductGraphQl\\Model\\Resolver\\Variant\\Attributes") @doc(description: "")
1414
product: SimpleProduct @resolver(class: "Magento\\CatalogGraphQl\\Model\\Resolver\\Product")
1515
}
1616

app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminEditCustomerAddressesFromActionGroup.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,13 @@
3939
<click selector="{{AdminEditCustomerAddressesSection.defaultBillingAddressButton}}" stepKey="setDefaultBilling" before="setDefaultShipping"/>
4040
<click selector="{{AdminEditCustomerAddressesSection.defaultShippingAddressButton}}" stepKey="setDefaultShipping" before="fillPrefixName"/>
4141
</actionGroup>
42+
<actionGroup name="SelectDropdownCustomerAddressAttributeValueActionGroup">
43+
<arguments>
44+
<argument name="customerAddressAttribute"/>
45+
<argument name="optionValue" type="string"/>
46+
</arguments>
47+
<selectOption selector="{{AdminEditCustomerAddressesSection.dropDownAttribute(customerAddressAttribute.code)}}" userInput="{{optionValue}}" stepKey="selectOptionValue"/>
48+
<click selector="{{AdminEditCustomerAddressesSection.save}}" stepKey="saveAddress"/>
49+
<waitForPageLoad stepKey="waitForAddressSaved"/>
50+
</actionGroup>
4251
</actionGroups>

app/code/Magento/Customer/Test/Mftf/Data/CustomerData.xml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,4 +216,18 @@
216216
<data key="store_id">0</data>
217217
<data key="website_id">0</data>
218218
</entity>
219+
<entity name="Simple_US_Customer_Two_Addresses" type="customer">
220+
<data key="group_id">0</data>
221+
<data key="default_billing">true</data>
222+
<data key="default_shipping">true</data>
223+
<data key="email" unique="prefix">John.Doe@example.com</data>
224+
<data key="firstname">John</data>
225+
<data key="lastname">Doe</data>
226+
<data key="fullname">John Doe</data>
227+
<data key="password">pwdTest123!</data>
228+
<data key="store_id">0</data>
229+
<data key="website_id">0</data>
230+
<requiredEntity type="address">US_Address_TX</requiredEntity>
231+
<requiredEntity type="address">US_Address_NY_Not_Default_Address</requiredEntity>
232+
</entity>
219233
</entities>

0 commit comments

Comments
 (0)