Skip to content

Commit 2b3b6c9

Browse files
[Magento Community Engineering] Community Contributions - 2.4-develop
- merged latest code from mainline branch
2 parents d24867b + 13b7326 commit 2b3b6c9

17 files changed

+437
-143
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
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="AdminSetManageStockConfigActionGroup">
12+
<annotations>
13+
<description>Set "Manage Stock" config in 'Advanced Inventory' panel on the Admin Product creation/edit page.</description>
14+
</annotations>
15+
<arguments>
16+
<argument name="value" type="string"/>
17+
</arguments>
18+
<uncheckOption selector="{{AdminProductFormAdvancedInventorySection.useConfigSettings}}" stepKey="uncheckConfigSetting"/>
19+
<selectOption selector="{{AdminProductFormAdvancedInventorySection.manageStock}}" userInput="{{value}}"
20+
stepKey="setManageStockConfig"/>
21+
</actionGroup>
22+
</actionGroups>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
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="AdminSetMaxAllowedQtyForProductActionGroup">
12+
<annotations>
13+
<description>Fills in the "Maximum Qty Allowed in Shopping Cart" option in 'Advanced Inventory' panel on the Admin Product creation/edit page.</description>
14+
</annotations>
15+
<arguments>
16+
<argument name="qty" type="string"/>
17+
</arguments>
18+
<uncheckOption selector="{{AdminProductFormAdvancedInventorySection.maxiQtyConfigSetting}}" stepKey="uncheckMaxQtyCheckBox"/>
19+
<fillField selector="{{AdminProductFormAdvancedInventorySection.maxiQtyAllowedInCart}}" userInput="{{qty}}"
20+
stepKey="fillMaxAllowedQty"/>
21+
</actionGroup>
22+
</actionGroups>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
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="AdminSetMinAllowedQtyForProductActionGroup">
12+
<annotations>
13+
<description>Fills in the "Minimum Qty Allowed in Shopping Cart" option in 'Advanced Inventory' panel on the Admin Product creation/edit page.</description>
14+
</annotations>
15+
<arguments>
16+
<argument name="qty" type="string"/>
17+
</arguments>
18+
<uncheckOption selector="{{AdminProductFormAdvancedInventorySection.miniQtyConfigSetting}}" stepKey="uncheckMiniQtyCheckBox"/>
19+
<fillField selector="{{AdminProductFormAdvancedInventorySection.miniQtyAllowedInCart}}" userInput="{{qty}}"
20+
stepKey="fillMinAllowedQty"/>
21+
</actionGroup>
22+
</actionGroups>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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="AdminSetNotifyBelowQtyValueActionGroup">
12+
<annotations>
13+
<description>Fills in the "Notify for Quantity Below" option in 'Advanced Inventory' panel on the Admin Product creation/edit page.</description>
14+
</annotations>
15+
<arguments>
16+
<argument name="qty" type="string"/>
17+
</arguments>
18+
<uncheckOption selector="{{AdminProductFormAdvancedInventorySection.notifyBelowQtyConfigSetting}}"
19+
stepKey="uncheckNotifyBelowQtyCheckBox"/>
20+
<fillField selector="{{AdminProductFormAdvancedInventorySection.notifyBelowQty}}" userInput="{{qty}}"
21+
stepKey="fillNotifyBelowQty"/>
22+
</actionGroup>
23+
</actionGroups>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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="AdminSetQtyUsesDecimalsConfigActionGroup">
12+
<annotations>
13+
<description>Set "Qty Uses Decimals" config in 'Advanced Inventory' panel on the Admin Product creation/edit page.</description>
14+
</annotations>
15+
<arguments>
16+
<argument name="value" type="string"/>
17+
</arguments>
18+
<selectOption selector="{{AdminProductFormAdvancedInventorySection.qtyUsesDecimals}}" userInput="{{value}}"
19+
stepKey="setQtyUsesDecimalsConfig"/>
20+
</actionGroup>
21+
</actionGroups>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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="AdminSetStockStatusConfigActionGroup">
12+
<annotations>
13+
<description>Set "Stock status" config in 'Advanced Inventory' panel on the Admin Product creation/edit page.</description>
14+
</annotations>
15+
<arguments>
16+
<argument name="stockStatus" type="string"/>
17+
</arguments>
18+
<selectOption selector="{{AdminProductFormAdvancedInventorySection.advancedInventoryStockStatus}}"
19+
userInput="{{stockStatus}}" stepKey="selectStockStatus"/>
20+
</actionGroup>
21+
</actionGroups>

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,9 @@
3030
<data key="label">No</data>
3131
<data key="value">0</data>
3232
</entity>
33+
<entity name="CatalogInventoryOptionsOnlyXleftThreshold">
34+
<!-- Magento default value -->
35+
<data key="path">cataloginventory/options/stock_threshold_qty</data>
36+
<data key="value">0</data>
37+
</entity>
3338
</entities>

app/code/Magento/Catalog/Test/Mftf/Section/StorefrontProductPageSection.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,6 @@
2525
<element name="customOptionDropDown" type="select" selector="//*[@id='product-options-wrapper']//select[contains(@class, 'product-custom-option admin__control-select')]"/>
2626
<element name="qtyInputWithProduct" type="input" selector="//tr//strong[contains(.,'{{productName}}')]/../../td[@class='col qty']//input" parameterized="true"/>
2727
<element name="customOptionRadio" type="input" selector="//span[contains(text(),'{{customOption}}')]/../../input" parameterized="true"/>
28+
<element name="onlyProductsLeft" type="block" selector="//div[@class='product-info-price']//div[@class='product-info-stock-sku']//div[@class='availability only']"/>
2829
</section>
29-
</sections>
30+
</sections>

app/code/Magento/Catalog/Test/Mftf/Test/AdminCheckOutOfStockProductIsNotVisibleInCategoryTest.xml

Lines changed: 35 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -34,42 +34,46 @@
3434
<actionGroup ref="AdminLogoutActionGroup" stepKey="logout"/>
3535
</after>
3636
<!--Open Product Index Page and filter the product-->
37-
<amOnPage url="{{AdminProductIndexPage.url}}" stepKey="navigateToProductIndex"/>
38-
<waitForPageLoad stepKey="waitForProductIndexPageToLoad"/>
37+
<actionGroup ref="AdminOpenProductIndexPageActionGroup" stepKey="openProductIndexPage"/>
3938
<actionGroup ref="FilterProductGridBySkuActionGroup" stepKey="filterProduct">
4039
<argument name="product" value="SimpleProduct"/>
4140
</actionGroup>
4241
<!-- Update product Advanced Inventory Setting -->
43-
<click stepKey="openSelectedProduct" selector="{{AdminProductGridSection.productRowBySku($$createSimpleProduct.sku$$)}}"/>
44-
<waitForPageLoad stepKey="waitForProductToLoad"/>
45-
<click selector="{{AdminProductFormSection.advancedInventoryLink}}" stepKey="clickOnAdvancedInventoryLink"/>
46-
<waitForPageLoad stepKey="waitForAdvancedInventoryPageToLoad"/>
47-
<uncheckOption selector="{{AdminProductFormAdvancedInventorySection.useConfigSettings}}" stepKey="uncheckConfigSetting"/>
48-
<selectOption selector="{{AdminProductFormAdvancedInventorySection.manageStock}}" userInput="Yes" stepKey="clickOnManageStock"/>
49-
<fillField selector="{{AdminProductFormAdvancedInventorySection.advancedInventoryQty}}" userInput="5" stepKey="fillProductQty"/>
50-
<uncheckOption selector="{{AdminProductFormAdvancedInventorySection.miniQtyConfigSetting}}" stepKey="uncheckMiniQtyCheckBox"/>
51-
<fillField selector="{{AdminProductFormAdvancedInventorySection.miniQtyAllowedInCart}}" userInput="1" stepKey="fillMiniAllowedQty"/>
52-
<uncheckOption selector="{{AdminProductFormAdvancedInventorySection.maxiQtyConfigSetting}}" stepKey="uncheckMaxQtyCheckBox"/>
53-
<fillField selector="{{AdminProductFormAdvancedInventorySection.maxiQtyAllowedInCart}}" userInput="10000" stepKey="fillMaxAllowedQty"/>
54-
<selectOption selector="{{AdminProductFormAdvancedInventorySection.qtyUsesDecimals}}" userInput="Yes" stepKey="selectQuatityUsesDecimal"/>
55-
<uncheckOption selector="{{AdminProductFormAdvancedInventorySection.notifyBelowQtyConfigSetting}}" stepKey="uncheckNotifyBelowQtyheckBox"/>
56-
<fillField selector="{{AdminProductFormAdvancedInventorySection.notifyBelowQty}}" userInput="1" stepKey="fillNotifyBelowQty"/>
57-
<selectOption selector="{{AdminProductFormAdvancedInventorySection.advancedInventoryStockStatus}}" userInput="Out of Stock" stepKey="selectOutOfStock"/>
58-
<click selector="{{AdminProductFormAdvancedInventorySection.doneButton}}" stepKey="clickOnDoneButton"/>
59-
<waitForPageLoad stepKey="waitForProductPageToSave"/>
60-
<click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickOnSaveButton"/>
61-
<waitForLoadingMaskToDisappear stepKey="waitForLoading"/>
62-
<see selector="{{AdminCategoryMessagesSection.SuccessMessage}}" userInput="You saved the product." stepKey="messageYouSavedTheProductIsShown"/>
42+
<actionGroup ref="OpenProductForEditByClickingRowXColumnYInProductGridActionGroup" stepKey="openProduct"/>
43+
<actionGroup ref="AdminClickOnAdvancedInventoryLinkActionGroup" stepKey="clickOnAdvancedInventoryLink"/>
44+
<actionGroup ref="AdminSetManageStockConfigActionGroup" stepKey="setManageStockConfig">
45+
<argument name="value" value="Yes"/>
46+
</actionGroup>
47+
<actionGroup ref="AdminFillAdvancedInventoryQtyActionGroup" stepKey="fillProductQty">
48+
<argument name="qty" value="5"/>
49+
</actionGroup>
50+
<actionGroup ref="AdminSetMinAllowedQtyForProductActionGroup" stepKey="fillMiniAllowedQty">
51+
<argument name="qty" value="1"/>
52+
</actionGroup>
53+
<actionGroup ref="AdminSetMaxAllowedQtyForProductActionGroup" stepKey="fillMaxAllowedQty">
54+
<argument name="qty" value="1000"/>
55+
</actionGroup>
56+
<actionGroup ref="AdminSetQtyUsesDecimalsConfigActionGroup" stepKey="setQtyUsesDecimalsConfig">
57+
<argument name="value" value="Yes"/>
58+
</actionGroup>
59+
<actionGroup ref="AdminSetNotifyBelowQtyValueActionGroup" stepKey="fillNotifyBelowQty">
60+
<argument name="qty" value="1"/>
61+
</actionGroup>
62+
<actionGroup ref="AdminSetStockStatusConfigActionGroup" stepKey="selectOutOfStock">
63+
<argument name="stockStatus" value="Out of Stock"/>
64+
</actionGroup>
65+
<actionGroup ref="AdminSubmitAdvancedInventoryFormActionGroup" stepKey="clickDoneButton"/>
66+
<actionGroup ref="SaveProductFormActionGroup" stepKey="saveProduct"/>
6367
<!--Verify product is not visible in category store front page -->
64-
<amOnPage url="$$createCategory.name$$.html" stepKey="openCategoryStoreFrontPage"/>
65-
<waitForPageLoad stepKey="waitForCategoryPageToLoad"/>
66-
<seeElement selector="{{StorefrontHeaderSection.NavigationCategoryByName(SimpleSubCategory.name)}}" stepKey="seeCategoryInFrontPage"/>
67-
<click selector="{{StorefrontHeaderSection.NavigationCategoryByName(SimpleSubCategory.name)}}" stepKey="clickOnCategory"/>
68-
<dontSee selector="{{StorefrontCategoryMainSection.productName}}" userInput="{{SimpleProduct.name}}" stepKey="dontSeeProductInCategoryPage"/>
68+
<actionGroup ref="AssertStorefrontProductAbsentOnCategoryPageActionGroup" stepKey="doNotSeeProductInCategoryPage">
69+
<argument name="categoryUrlKey" value="$$createCategory.name$$"/>
70+
<argument name="productName" value="{{SimpleProduct.name}}"/>
71+
</actionGroup>
6972
<!--Verify Product In Store Front-->
70-
<amOnPage url="$$createSimpleProduct.name$$.html" stepKey="goToProductStorefrontPage"/>
71-
<waitForPageLoad stepKey="waitForProductPageTobeLoaded"/>
72-
<see selector="{{StorefrontProductInfoMainSection.productName}}" userInput="{{SimpleProduct.name}}" stepKey="seeProductNameInStoreFront"/>
73-
<see selector="{{StorefrontProductInfoMainSection.productStockStatus}}" userInput="Out of stock" stepKey="seeProductStatusIsOutOfStock"/>
73+
<actionGroup ref="StorefrontCheckProductStockStatus" stepKey="seeProductOnStorefront">
74+
<argument name="productUrlKey" value="$$createSimpleProduct.custom_attributes[url_key]$$"/>
75+
<argument name="productName" value="$$createSimpleProduct.name$$"/>
76+
<argument name="stockStatus" value="Out of stock"/>
77+
</actionGroup>
7478
</test>
7579
</tests>

app/code/Magento/Catalog/Test/Mftf/Test/AdminCheckOutOfStockProductIsVisibleInCategoryTest.xml

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -37,41 +37,48 @@
3737
<magentoCLI stepKey="setDisplayOutOfStockProduct" command="config:set cataloginventory/options/show_out_of_stock 0" />
3838
</after>
3939
<!--Open Product Index Page and filter the product-->
40-
<amOnPage url="{{AdminProductIndexPage.url}}" stepKey="navigateToProductIndex"/>
41-
<waitForPageLoad stepKey="waitForProductIndexPageToLoad"/>
40+
<actionGroup ref="AdminOpenProductIndexPageActionGroup" stepKey="openProductIndexPage"/>
4241
<actionGroup ref="FilterProductGridBySkuActionGroup" stepKey="filterProduct">
4342
<argument name="product" value="SimpleProduct"/>
4443
</actionGroup>
4544
<!-- Update product Advanced Inventory Setting -->
46-
<click stepKey="openSelectedProduct" selector="{{AdminProductGridSection.productRowBySku($$createSimpleProduct.sku$$)}}"/>
47-
<waitForPageLoad stepKey="waitForProductToLoad"/>
48-
<click selector="{{AdminProductFormSection.advancedInventoryLink}}" stepKey="clickOnAdvancedInventoryLink"/>
49-
<waitForPageLoad stepKey="waitForAdvancedInventoryPageToLoad"/>
50-
<uncheckOption selector="{{AdminProductFormAdvancedInventorySection.useConfigSettings}}" stepKey="uncheckConfigSetting"/>
51-
<selectOption selector="{{AdminProductFormAdvancedInventorySection.manageStock}}" userInput="Yes" stepKey="clickOnManageStock"/>
52-
<fillField selector="{{AdminProductFormAdvancedInventorySection.advancedInventoryQty}}" userInput="5" stepKey="fillProductQty"/>
53-
<uncheckOption selector="{{AdminProductFormAdvancedInventorySection.miniQtyConfigSetting}}" stepKey="uncheckMiniQtyCheckBox"/>
54-
<fillField selector="{{AdminProductFormAdvancedInventorySection.miniQtyAllowedInCart}}" userInput="1" stepKey="fillMiniAllowedQty"/>
55-
<uncheckOption selector="{{AdminProductFormAdvancedInventorySection.maxiQtyConfigSetting}}" stepKey="uncheckMaxQtyCheckBox"/>
56-
<fillField selector="{{AdminProductFormAdvancedInventorySection.maxiQtyAllowedInCart}}" userInput="10000" stepKey="fillMaxAllowedQty"/>
57-
<selectOption selector="{{AdminProductFormAdvancedInventorySection.qtyUsesDecimals}}" userInput="Yes" stepKey="selectQuantityUsesDecimal"/>
58-
<uncheckOption selector="{{AdminProductFormAdvancedInventorySection.notifyBelowQtyConfigSetting}}" stepKey="uncheckNotifyBelowQtyCheckBox"/>
59-
<fillField selector="{{AdminProductFormAdvancedInventorySection.notifyBelowQty}}" userInput="1" stepKey="fillNotifyBelowQty"/>
60-
<selectOption selector="{{AdminProductFormAdvancedInventorySection.advancedInventoryStockStatus}}" userInput="Out of Stock" stepKey="selectOutOfStock"/>
61-
<click stepKey="clickOnDoneButton" selector="{{AdminProductFormAdvancedInventorySection.doneButton}}"/>
62-
<waitForPageLoad stepKey="waitForProductPageToLoad"/>
63-
<click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickOnSaveButton"/>
64-
<waitForLoadingMaskToDisappear stepKey="waitForLoading"/>
65-
<see selector="{{AdminCategoryMessagesSection.SuccessMessage}}" userInput="You saved the product." stepKey="messageYouSavedTheProductIsShown"/>
66-
45+
<actionGroup ref="OpenProductForEditByClickingRowXColumnYInProductGridActionGroup" stepKey="openProduct"/>
46+
<actionGroup ref="AdminClickOnAdvancedInventoryLinkActionGroup" stepKey="clickOnAdvancedInventoryLink"/>
47+
<actionGroup ref="AdminSetManageStockConfigActionGroup" stepKey="setManageStockConfig">
48+
<argument name="value" value="Yes"/>
49+
</actionGroup>
50+
<actionGroup ref="AdminFillAdvancedInventoryQtyActionGroup" stepKey="fillProductQty">
51+
<argument name="qty" value="5"/>
52+
</actionGroup>
53+
<actionGroup ref="AdminSetMinAllowedQtyForProductActionGroup" stepKey="fillMiniAllowedQty">
54+
<argument name="qty" value="1"/>
55+
</actionGroup>
56+
<actionGroup ref="AdminSetMaxAllowedQtyForProductActionGroup" stepKey="fillMaxAllowedQty">
57+
<argument name="qty" value="1000"/>
58+
</actionGroup>
59+
<actionGroup ref="AdminSetQtyUsesDecimalsConfigActionGroup" stepKey="setQtyUsesDecimalsConfig">
60+
<argument name="value" value="Yes"/>
61+
</actionGroup>
62+
<actionGroup ref="AdminSetNotifyBelowQtyValueActionGroup" stepKey="fillNotifyBelowQty">
63+
<argument name="qty" value="1"/>
64+
</actionGroup>
65+
<actionGroup ref="AdminSetStockStatusConfigActionGroup" stepKey="selectOutOfStock">
66+
<argument name="stockStatus" value="Out of Stock"/>
67+
</actionGroup>
68+
<actionGroup ref="AdminSubmitAdvancedInventoryFormActionGroup" stepKey="clickDoneButton"/>
69+
<actionGroup ref="SaveProductFormActionGroup" stepKey="saveProduct"/>
6770
<!--Run re-index task -->
6871
<magentoCLI command="indexer:reindex" stepKey="reindex"/>
69-
7072
<!--Verify product is visible in category front page -->
71-
<amOnPage url="$$createCategory.name$$.html" stepKey="openCategoryStoreFrontPage"/>
72-
<waitForPageLoad stepKey="waitForCategoryPageToLoad"/>
73-
<seeElement selector="{{StorefrontHeaderSection.NavigationCategoryByName(SimpleSubCategory.name)}}" stepKey="seeCategoryInFrontPage"/>
74-
<click selector="{{StorefrontHeaderSection.NavigationCategoryByName(SimpleSubCategory.name)}}" stepKey="clickOnCategory"/>
75-
<see selector="{{StorefrontCategoryMainSection.productName}}" userInput="{{SimpleProduct.name}}" stepKey="seeProductNameInCategoryPage"/>
73+
<actionGroup ref="StorefrontOpenHomePageActionGroup" stepKey="goToHomepage"/>
74+
<actionGroup ref="StorefrontAssertCategoryNameIsShownInMenuActionGroup" stepKey="seeCatergoryNameInStoreFront">
75+
<argument name="categoryName" value="{{SimpleSubCategory.name}}"/>
76+
</actionGroup>
77+
<actionGroup ref="StorefrontGoToCategoryPageActionGroup" stepKey="selectCategory">
78+
<argument name="categoryName" value="{{SimpleSubCategory.name}}"/>
79+
</actionGroup>
80+
<actionGroup ref="StorefrontAssertProductNameOnProductMainPageActionGroup" stepKey="seeProductName">
81+
<argument name="productName" value="{{SimpleProduct.name}}"/>
82+
</actionGroup>
7683
</test>
7784
</tests>

0 commit comments

Comments
 (0)