Skip to content

Commit c4c29b3

Browse files
authored
🔃 [Magento Community Engineering] Community Contributions
Accepted Community Pull Requests: - #27187: 26117: "Current user does not have an active cart" even when he actually has one (by @engcom-Charlie) - #27170: 26825 add all image roles for first product entity (by @sergiy-v) - #25733: Resolve Mass Delete Widget should have "Confirmation Modal" (by @edenduong) Fixed GitHub Issues: - #26117: "Current user does not have an active cart" even when he actually has one (reported by @TomashKhamlai) has been fixed in #27187 by @engcom-Charlie in 2.4-develop branch Related commits: 1. afb752e 2. 1f87785 3. a8450f4 - #26825: Adding/updating image using API will not create thumbnail for admin products grid (reported by @Zyles) has been fixed in #27170 by @sergiy-v in 2.4-develop branch Related commits: 1. 960732a
2 parents be49d90 + 5cc6819 commit c4c29b3

File tree

16 files changed

+232
-6
lines changed

16 files changed

+232
-6
lines changed

app/code/Magento/Catalog/Model/Product/Gallery/GalleryManagement.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ public function create($sku, ProductAttributeMediaGalleryEntryInterface $entry)
6161
$existingMediaGalleryEntries = $product->getMediaGalleryEntries();
6262
$existingEntryIds = [];
6363
if ($existingMediaGalleryEntries == null) {
64+
// set all media types if not specified
65+
if ($entry->getTypes() == null) {
66+
$entry->setTypes(array_keys($product->getMediaAttributes()));
67+
}
6468
$existingMediaGalleryEntries = [$entry];
6569
} else {
6670
foreach ($existingMediaGalleryEntries as $existingEntries) {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
11+
<actionGroup name="AdminOpenProductImagesSectionActionGroup">
12+
<annotations>
13+
<description>Requires the navigation to the Product page. Opens 'Image and Videos' section.</description>
14+
</annotations>
15+
<conditionalClick selector="{{AdminProductImagesSection.productImagesToggle}}" dependentSelector="{{AdminProductImagesSection.imageUploadButton}}" visible="false" stepKey="openProductImagesSection"/>
16+
<waitForElementVisible selector="{{AdminProductImagesSection.imageUploadButton}}" stepKey="waitForImageUploadButton"/>
17+
</actionGroup>
18+
</actionGroups>
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
11+
<actionGroup name="AssertAdminProductImageRolesSelectedActionGroup">
12+
<annotations>
13+
<description>Requires the navigation to the Product page and opened 'Image and Videos' section.
14+
Checks the Base, Small, Thumbnail and Swatch Roles are selected for provided image.</description>
15+
</annotations>
16+
<arguments>
17+
<argument name="imageFileName" type="string" defaultValue="test_image"/>
18+
</arguments>
19+
<waitForElementVisible selector="{{AdminProductImagesSection.imageFile(imageFileName)}}" stepKey="seeProductImageName"/>
20+
<click selector="{{AdminProductImagesSection.imageFile(imageFileName)}}" stepKey="clickProductImage"/>
21+
<waitForElementVisible selector="{{AdminProductImagesSection.isBaseSelected}}" stepKey="checkRoleBaseSelected"/>
22+
<waitForElementVisible selector="{{AdminProductImagesSection.isSmallSelected}}" stepKey="checkRoleSmallSelected"/>
23+
<waitForElementVisible selector="{{AdminProductImagesSection.isThumbnailSelected}}" stepKey="checkRoleThumbnailSelected"/>
24+
<waitForElementVisible selector="{{AdminProductImagesSection.isSwatchSelected}}" stepKey="checkRoleSwatchSelected"/>
25+
</actionGroup>
26+
</actionGroups>

app/code/Magento/Catalog/Test/Mftf/Data/ProductAttributeMediaGalleryEntryData.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,11 @@
3535
<data key="label">Magento Logo</data>
3636
<requiredEntity type="ImageContent">MagentoLogoImageContentExportImport</requiredEntity>
3737
</entity>
38+
<entity name="ApiProductAttributeMediaGalleryEntryWithoutTypesTestImage" type="ProductAttributeMediaGalleryEntry">
39+
<data key="media_type">image</data>
40+
<data key="label" unique="suffix">Test Image</data>
41+
<data key="position">0</data>
42+
<data key="disabled">false</data>
43+
<requiredEntity type="ImageContent">TestImageContent</requiredEntity>
44+
</entity>
3845
</entities>
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
11+
<test name="AdminCheckMediaRolesForFirstAddedImageViaApiTest">
12+
<annotations>
13+
<stories value="Add Simple Product with image via API"/>
14+
<title value="Check that added image for created product has selected image roles."/>
15+
<description value="Login as admin, create simple product, add image to created product (via API).Go to
16+
Admin Product Edit page for created product to check that added image has selected image roles."/>
17+
<group value="catalog"/>
18+
</annotations>
19+
<before>
20+
<actionGroup ref="AdminLoginActionGroup" stepKey="loginToAdminPanel"/>
21+
<createData entity="SimpleOutOfStockProduct" stepKey="createSimpleProduct"/>
22+
<createData entity="ApiProductAttributeMediaGalleryEntryWithoutTypesTestImage" stepKey="createSimpleProductImage">
23+
<requiredEntity createDataKey="createSimpleProduct"/>
24+
</createData>
25+
</before>
26+
<after>
27+
<deleteData createDataKey="createSimpleProduct" stepKey="deleteSimpleProduct"/>
28+
<actionGroup ref="logout" stepKey="logout"/>
29+
<!-- Reindex invalidated indices after product attribute has been created/deleted -->
30+
<actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
31+
</after>
32+
33+
<actionGroup ref="GoToProductPageViaIDActionGroup" stepKey="goToSimpleProduct">
34+
<argument name="productId" value="$$createSimpleProduct.id$$"/>
35+
</actionGroup>
36+
<actionGroup ref="AdminOpenProductImagesSectionActionGroup" stepKey="openProductImagesSection"/>
37+
<actionGroup ref="AssertAdminProductImageRolesSelectedActionGroup" stepKey="checkImageRolesSelected">
38+
<argument name="imageFileName" value="$createSimpleProductImage.entry[content][name]$"/>
39+
</actionGroup>
40+
</test>
41+
</tests>

app/code/Magento/Catalog/Test/Unit/Model/Product/Gallery/GalleryManagementTest.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ protected function setUp()
5959
'getCustomAttribute',
6060
'getMediaGalleryEntries',
6161
'setMediaGalleryEntries',
62+
'getMediaAttributes',
6263
]
6364
);
6465
$this->mediaGalleryEntryMock =
@@ -99,6 +100,9 @@ public function testCreateWithCannotSaveException()
99100
$entryContentMock = $this->getMockBuilder(\Magento\Framework\Api\Data\ImageContentInterface::class)
100101
->disableOriginalConstructor()
101102
->getMock();
103+
$attributeMock = $this->getMockBuilder(\Magento\Eav\Model\Entity\Attribute\AbstractAttribute::class)
104+
->disableOriginalConstructor()
105+
->getMock();
102106
$this->mediaGalleryEntryMock->expects($this->any())->method('getContent')->willReturn($entryContentMock);
103107
$this->productRepositoryMock->expects($this->once())
104108
->method('get')
@@ -108,6 +112,10 @@ public function testCreateWithCannotSaveException()
108112
$this->contentValidatorMock->expects($this->once())->method('isValid')->with($entryContentMock)
109113
->willReturn(true);
110114

115+
$this->productMock->expects($this->any())
116+
->method('getMediaAttributes')
117+
->willReturn(['small_image' => $attributeMock]);
118+
111119
$this->productRepositoryMock->expects($this->once())->method('save')->with($this->productMock)
112120
->willThrowException(new \Exception());
113121
$this->model->create($productSku, $this->mediaGalleryEntryMock);
@@ -133,6 +141,8 @@ public function testCreate()
133141
$this->contentValidatorMock->expects($this->once())->method('isValid')->with($entryContentMock)
134142
->willReturn(true);
135143

144+
$this->mediaGalleryEntryMock->expects($this->any())->method('getTypes')->willReturn(['small_image']);
145+
136146
$newEntryMock = $this->createMock(\Magento\Catalog\Api\Data\ProductAttributeMediaGalleryEntryInterface::class);
137147
$newEntryMock->expects($this->exactly(2))->method('getId')->willReturn(42);
138148
$this->productMock->expects($this->at(2))->method('getMediaGalleryEntries')

app/code/Magento/QuoteGraphQl/Model/Cart/GetCartForUser.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,7 @@ public function execute(string $cartHash, ?int $customerId, int $storeId): Quote
7272
}
7373

7474
if (false === (bool)$cart->getIsActive()) {
75-
throw new GraphQlNoSuchEntityException(
76-
__('Current user does not have an active cart.')
77-
);
75+
throw new GraphQlNoSuchEntityException(__('The cart isn\'t active.'));
7876
}
7977

8078
if ((int)$cart->getStoreId() !== $storeId) {
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
11+
<actionGroup name="AdminMassDeleteWidgetActionGroup">
12+
<annotations>
13+
<description>Goes to the Admin Widgets list page. Mass delete widgets.</description>
14+
</annotations>
15+
<arguments>
16+
<argument name="row" type="string"/>
17+
</arguments>
18+
19+
<amOnPage url="{{AdminWidgetsPage.url}}" stepKey="visitAdminWidetPage"/>
20+
<conditionalClick selector="{{AdminDataGridHeaderSection.clearFilters}}"
21+
dependentSelector="{{AdminDataGridHeaderSection.clearFilters}}"
22+
visible="true" stepKey="clickClearFilters"/>
23+
24+
<waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappear1"/>
25+
<waitForPageLoad stepKey="waitForPageLoad"/>
26+
<click selector="{{AdminWidgetsSection.massActionSelect}}" stepKey="massActionSelectClick"/>
27+
<click selector="{{AdminWidgetsSection.massActionSelectOptionAll}}" stepKey="massActionSelectOptionAllClick"/>
28+
<waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappear2"/>
29+
<click selector="{{AdminWidgetsSection.massActionSelectAction}}" stepKey="massActionSelectActionClick"/>
30+
<click selector="{{AdminWidgetsSection.massActionSelectActionDelete}}" stepKey="massActionSelectActionDeleteClick"/>
31+
<waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappear3"/>
32+
<click selector="{{AdminWidgetsSection.massActionSelectActionDeleteSubmit}}" stepKey="massActionSelectActionDeleteSubmitClick1"/>
33+
<waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappear4"/>
34+
<seeElement selector="{{AdminWidgetsSection.WidgetViewModalDismiss}}" stepKey="widgetViewModalDismissSeeElement"/>
35+
<waitForPageLoad stepKey="waitForPageLoad3"/>
36+
<seeElement selector="{{AdminWidgetsSection.WidgetViewModalClose}}" stepKey="widgetViewModalCloseSeeElement"/>
37+
<click selector="{{AdminWidgetsSection.WidgetViewModalDismiss}}" stepKey="widgetViewModalDismissClick"/>
38+
<waitForElementNotVisible selector="{{AdminWidgetsSection.WidgetViewModalDismiss}}" stepKey="waitForModalClosed"/>
39+
<seeElement selector="{{AdminWidgetsSection.WidgetViewGridInstanceId(row)}}" stepKey="widgetViewGridRowSeeElement"/>
40+
<waitForPageLoad stepKey="waitForPageLoad4"/>
41+
<waitForElementVisible selector="{{AdminWidgetsSection.WidgetViewGridInstanceId(row)}}" stepKey="widgetViewGridInstanceIdWaitForElementVisible"/>
42+
<click selector="{{AdminWidgetsSection.massActionSelectActionDeleteSubmit}}" stepKey="massActionSelectActionDeleteSubmitClick2"/>
43+
<waitForElementVisible selector="{{AdminWidgetsSection.WidgetViewModalAccept}}" stepKey="waitForModalVisible"/>
44+
<click selector="{{AdminWidgetsSection.WidgetViewModalAccept}}" stepKey="widgetViewModalAcceptClick"/>
45+
<waitForPageLoad stepKey="waitForPageLoad5" />
46+
<waitForElementVisible selector="{{AdminWidgetsSection.WidgetViewGridInstanceRow(row)}}" stepKey="widgetViewGridInstanceRowWaitForElementVisible"/>
47+
<dontSeeElement selector="{{AdminWidgetsSection.WidgetViewGridInstanceId(row)}}" stepKey="widgetViewGridRowDontSeeElement"/>
48+
</actionGroup>
49+
</actionGroups>

app/code/Magento/Widget/Test/Mftf/Data/WidgetData.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,14 @@
1111
<entity name="WidgetWithBlock" type="widget">
1212
<data key="type">CMS Static Block</data>
1313
<data key="designTheme">Magento Luma</data>
14+
<data key="design_theme">Magento Luma</data>
1415
<data key="name" unique="suffix">testName</data>
1516
<data key="store_id">All Store Views</data>
17+
<array key="store_ids">
18+
<item>All Store Views</item>
19+
</array>
1620
<data key="display">All Pages</data>
1721
<data key="container">Page Top</data>
22+
<data key="display_on">All Pages</data>
1823
</entity>
1924
</entities>

app/code/Magento/Widget/Test/Mftf/Section/AdminWidgetsSection.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,16 @@
1313
<element name="searchButton" type="button" selector=".action-default.scalable.action-secondary"/>
1414
<element name="searchResult" type="text" selector="#widgetInstanceGrid_table>tbody>tr:nth-child(1)"/>
1515
<element name="resetFilter" type="button" selector="button[data-action='grid-filter-reset']"/>
16+
<element name="massActionSelect" type="select" selector="#widgetInstanceGrid_massaction-mass-select"/>
17+
<element name="massActionSelectOptionAll" type="select" selector="//*[@id='widgetInstanceGrid_massaction-mass-select']//option[@value='selectAll']"/>
18+
<element name="massActionSelectAction" type="multiselect" selector="//*[@id='widgetInstanceGrid_massaction-select']//option[contains(., 'Action')]" />
19+
<element name="massActionSelectActionDelete" type="multiselect" selector="//*[@id='widgetInstanceGrid_massaction-select']//option[@value='delete']" />
20+
<element name="massActionSelectActionDeleteSubmit" type="button" selector="#widgetInstanceGrid_massaction-form button.action-default"/>
21+
<element name="WidgetViewModalAccept" type="button" selector=".modal-popup.confirm._show .action-accept"/>
22+
<element name="WidgetViewModalDismiss" type="button" selector=".modal-popup.confirm._show .action-dismiss"/>
23+
<element name="WidgetViewModalClose" type="button" selector=".modal-popup.confirm._show .action-close"/>
24+
<element name="WidgetViewGridRow" type="text" selector="table.data-grid tbody tr[data-role=row]:nth-of-type({{row}})" parameterized="true"/>
25+
<element name="WidgetViewGridInstanceRow" type="text" selector="table.data-grid tbody tr[data-role=row]:nth-of-type({{row}})" parameterized="true"/>
26+
<element name="WidgetViewGridInstanceId" type="text" selector="table.data-grid tbody tr[data-role=row]:nth-of-type({{row}}) td[data-column=instance_id]" parameterized="true"/>
1627
</section>
1728
</sections>
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
11+
<test name="AdminContentWidgetsMassDeletesTest">
12+
<annotations>
13+
<features value="Widget"/>
14+
<stories value="Widget mass delete"/>
15+
<title value="Admin mass delete widgets in grid"/>
16+
<description value="Admin select widgets in grid and try to mass delete action, will show pop-up with confirm action"/>
17+
<severity value="MAJOR"/>
18+
<group value="widget"/>
19+
</annotations>
20+
<before>
21+
<actionGroup ref="LoginAsAdmin" stepKey="LoginAsAdmin"/>
22+
</before>
23+
<after>
24+
<actionGroup ref="logout" stepKey="logout"/>
25+
</after>
26+
<actionGroup ref="AdminNavigateMenuActionGroup" stepKey="navigateToContentWidgetsPageFirst">
27+
<argument name="menuUiId" value="{{AdminMenuContent.dataUiId}}"/>
28+
<argument name="submenuUiId" value="{{AdminMenuContentElementsWidgets.dataUiId}}"/>
29+
</actionGroup>
30+
<actionGroup ref="AdminAssertPageTitleActionGroup" stepKey="seePageTitleFirst">
31+
<argument name="title" value="{{AdminMenuContentElementsWidgets.pageTitle}}"/>
32+
</actionGroup>
33+
<waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappear1"/>
34+
<actionGroup ref="AdminCreateAndSaveWidgetActionGroup" stepKey="addWidgetForTest1">
35+
<argument name="widget" value="ProductsListWidget"/>
36+
</actionGroup>
37+
<waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappear2"/>
38+
<actionGroup ref="AdminCreateAndSaveWidgetActionGroup" stepKey="addWidgetForTest2">
39+
<argument name="widget" value="ProductsListWidget"/>
40+
</actionGroup>
41+
<waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappear4"/>
42+
<actionGroup ref="AdminNavigateMenuActionGroup" stepKey="navigateToContentWidgetsPageSecond">
43+
<argument name="menuUiId" value="{{AdminMenuContent.dataUiId}}"/>
44+
<argument name="submenuUiId" value="{{AdminMenuContentElementsWidgets.dataUiId}}"/>
45+
</actionGroup>
46+
<actionGroup ref="AdminAssertPageTitleActionGroup" stepKey="seePageTitleSecond">
47+
<argument name="title" value="{{AdminMenuContentElementsWidgets.pageTitle}}"/>
48+
</actionGroup>
49+
<waitForPageLoad stepKey="waitForPageLoad1"/>
50+
<actionGroup ref="AdminMassDeleteWidgetActionGroup" stepKey="massWidgetDelete">
51+
<argument name="row" value="1"/>
52+
</actionGroup>
53+
</test>
54+
</tests>
55+

app/code/Magento/Widget/i18n/en_US.csv

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,4 @@ Product,Product
7171
Conditions,Conditions
7272
"Widget ID","Widget ID"
7373
"Inserting a widget does not create a widget instance.","Inserting a widget does not create a widget instance."
74+
"Are you sure you want to delete the selected widget(s)?","Are you sure you want to delete the selected widget(s)?"

app/code/Magento/Widget/view/adminhtml/layout/adminhtml_widget_instance_block.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<item name="label" xsi:type="string" translate="true">Delete</item>
2626
<item name="url" xsi:type="string">*/*/massDelete</item>
2727
<item name="selected" xsi:type="string">0</item>
28+
<item name="confirm" xsi:type="string" translate="true">Are you sure you want to delete the selected widget(s)?</item>
2829
</item>
2930
</argument>
3031
</arguments>

dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/GetCartTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ public function testGetNonExistentCart()
162162
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/make_cart_inactive.php
163163
*
164164
* @expectedException Exception
165-
* @expectedExceptionMessage Current user does not have an active cart.
165+
* @expectedExceptionMessage The cart isn't active.
166166
*/
167167
public function testGetInactiveCart()
168168
{

dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/MergeCartsTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ public function testMergeGuestWithCustomerCart()
108108
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/customer/create_empty_cart.php
109109
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
110110
* @expectedException \Exception
111-
* @expectedExceptionMessage Current user does not have an active cart.
111+
* @expectedExceptionMessage The cart isn't active.
112112
*/
113113
public function testGuestCartExpiryAfterMerge()
114114
{

dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/GetCartTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public function testGetNonExistentCart()
119119
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/make_cart_inactive.php
120120
*
121121
* @expectedException Exception
122-
* @expectedExceptionMessage Current user does not have an active cart.
122+
* @expectedExceptionMessage The cart isn't active.
123123
*/
124124
public function testGetInactiveCart()
125125
{

0 commit comments

Comments
 (0)