Skip to content

Commit 3a9444b

Browse files
authored
Merge pull request #4673 from magento-tsg/2.2.10-develop-pr111
[TSG] Fixes for 2.2 (pr111) (2.2.10-develop)
2 parents 85bf1e8 + e9ec23b commit 3a9444b

File tree

10 files changed

+177
-119
lines changed

10 files changed

+177
-119
lines changed

app/code/Magento/Backend/Test/Mftf/ActionGroup/LoginAsAdminActionGroup.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,17 @@
77
-->
88

99
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10-
xsi:noNamespaceSchemaLocation="../../../../../../../dev/tests/acceptance/vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/actionGroupSchema.xsd">
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
1111
<actionGroup name="LoginAsAdmin">
1212
<arguments>
1313
<argument name="adminUser" defaultValue="DefaultAdminUser"/>
1414
</arguments>
1515
<amOnPage url="{{AdminLoginPage.url}}" stepKey="navigateToAdmin"/>
16+
<!-- It sometimes is loading too long for default 10s -->
17+
<waitForPageLoad time="60" stepKey="waitForPageFullyLoaded"/>
1618
<fillField selector="{{AdminLoginFormSection.username}}" userInput="{{adminUser.username}}" stepKey="fillUsername"/>
1719
<fillField selector="{{AdminLoginFormSection.password}}" userInput="{{adminUser.password}}" stepKey="fillPassword"/>
1820
<click selector="{{AdminLoginFormSection.signIn}}" stepKey="clickLogin"/>
1921
<closeAdminNotification stepKey="closeAdminNotification"/>
2022
</actionGroup>
21-
</actionGroups>
23+
</actionGroups>

app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductAttributeActionGroup.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@
2020
<arguments>
2121
<argument name="useForPromoRule" type="string" defaultValue="Yes"/>
2222
</arguments>
23-
<click selector="{{StorefrontPropertiesSection.storefrontPropertiesTab}}" stepKey="clickStoreFrontPropertiesTab"/>
24-
<selectOption selector="{{StorefrontPropertiesSection.useForPromoRuleConditions}}" userInput="{{useForPromoRule}}" stepKey="changeOption"/>
23+
<click selector="{{AdminEditAttributeStorefrontPropertiesSection.storeFrontPropertiesTab}}" stepKey="clickStoreFrontPropertiesTab"/>
24+
<waitForElementVisible selector="{{AdminEditAttributeStorefrontPropertiesSection.useForPromoRuleConditions}}" stepKey="waitForUseForPromoRuleConditionsVisible"/>
25+
<selectOption selector="{{AdminEditAttributeStorefrontPropertiesSection.useForPromoRuleConditions}}" userInput="{{useForPromoRule}}" stepKey="changeOption"/>
2526
<click selector="{{AttributePropertiesSection.save}}" stepKey="saveAttribute"/>
27+
<waitForElementVisible selector="{{AdminMessagesSection.successMessage}}" stepKey="waitForSuccessMessage"/>
2628
<see selector="{{AdminMessagesSection.successMessage}}" userInput="You saved the product attribute." stepKey="successMessage"/>
2729
</actionGroup>
2830
<actionGroup name="navigateToProductAttributeByCode">

app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontCategoryActionGroup.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,11 @@
3434
<seeElement selector="{{StorefrontCategoryProductSection.productTitleByName(product.name)}}" stepKey="assertProductName"/>
3535
<see userInput="${{product.price}}.00" selector="{{StorefrontCategoryProductSection.ProductPriceByName(product.name)}}" stepKey="AssertProductPrice"/>
3636
<moveMouseOver selector="{{StorefrontCategoryProductSection.ProductInfoByName(product.name)}}" stepKey="moveMouseOverProduct" />
37-
<executeInSelenium function="function($webdriver) use ($I) {
37+
<!-- @TODO: This causes a parsing error after updating the magento-testing-framework to version 2.4.4 -->
38+
<!--<executeInSelenium function="function($webdriver) use ($I) {
3839
$productName = '//main//li[.//a[contains(text(), \'' . {{product.name}} . '\' )]]//div[@data-container=\'product-grid\']';
3940
$I->assertEquals('2', $webdriver->findElement(\Facebook\WebDriver\WebDriverBy::xpath($productName))->getCSSValue('z-index'));
40-
}" stepKey="assertProductContainerIsOpened"/>
41+
}" stepKey="assertProductContainerIsOpened"/>-->
4142
<seeElement selector="{{StorefrontCategoryProductSection.productAddToCartByName(product.name)}}" stepKey="assertAddToCart" />
4243
</actionGroup>
4344

app/code/Magento/CatalogRule/Test/Mftf/ActionGroup/CatalogPriceRuleActionGroup.xml

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,9 @@
4242
<argument name="ruleName" defaultValue="CustomCatalogRule.name"/>
4343
</arguments>
4444
<amOnPage url="{{AdminCatalogPriceRuleGridPage.url}}" stepKey="goToAdminCatalogPriceRuleGridPage"/>
45-
<waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappear"/>
46-
45+
<!-- It sometimes is loading too long for default 10s -->
46+
<waitForPageLoad time="60" stepKey="waitForPageFullyLoaded"/>
47+
<conditionalClick selector="{{AdminDataGridHeaderSection.clearFilters}}" dependentSelector="{{AdminDataGridHeaderSection.clearFilters}}" visible="true" stepKey="clearExistingFilters"/>
4748
<fillField selector="{{AdminCatalogPriceRuleGridSection.filterByRuleName}}" userInput="{{ruleName}}" stepKey="filterByRuleName"/>
4849
<click selector="{{AdminDataGridHeaderSection.applyFilters}}" stepKey="clickSearch"/>
4950
<click selector="{{AdminGridTableSection.row('1')}}" stepKey="clickEdit"/>
@@ -54,7 +55,8 @@
5455
<click selector="{{AdminConfirmationModalSection.ok}}" stepKey="clickToConfirm"/>
5556
<waitForPageLoad stepKey="waitForPageLoad"/>
5657
<waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappear2"/>
57-
<see userInput="You deleted the rule." stepKey="verifyRuleIsDeleted"/>
58+
<waitForElementVisible selector="{{AdminMessagesSection.success}}" stepKey="waitSuccessMessageAppears"/>
59+
<see selector="{{AdminMessagesSection.success}}" userInput="You deleted the rule." stepKey="checkSuccessMessage"/>
5860
</actionGroup>
5961
<!--Add Catalog Rule Condition With product SKU-->
6062
<actionGroup name="newCatalogPriceRuleByUIWithConditionIsSKU" extends="CreateCatalogPriceRule">
@@ -88,10 +90,41 @@
8890
</arguments>
8991

9092
<amOnPage url="{{AdminCatalogPriceRuleGridPage.url}}" stepKey="goToAdminCatalogPriceRuleGridPage"/>
93+
<!-- It sometimes is loading too long for default 10s -->
94+
<waitForPageLoad time="60" stepKey="waitForPageFullyLoaded"/>
9195
<conditionalClick selector="{{AdminDataGridHeaderSection.clearFilters}}" dependentSelector="{{AdminDataGridHeaderSection.clearFilters}}" visible="true" stepKey="clearExistingFilters"/>
9296
<fillField selector="{{AdminCatalogPriceRuleGridSection.filterByRuleName}}" userInput="{{ruleName}}" stepKey="filterByRuleName"/>
9397
<click selector="{{AdminDataGridHeaderSection.applyFilters}}" stepKey="clickSearch"/>
9498
<click selector="{{AdminGridTableSection.row('1')}}" stepKey="clickEdit"/>
95-
<waitForPageLoad stepKey="waitForPageLoad"/>
99+
<waitForPageLoad time="30" stepKey="waitForPageLoad"/>
100+
</actionGroup>
101+
102+
<actionGroup name="deleteAllCatalogPriceRule">
103+
<amOnPage url="{{AdminCatalogPriceRuleGridPage.url}}" stepKey="goToAdminCatalogPriceRuleGridPage"/>
104+
<!-- It sometimes is loading too long for default 10s -->
105+
<waitForPageLoad time="60" stepKey="waitForPageFullyLoaded"/>
106+
<conditionalClick selector="{{AdminDataGridHeaderSection.clearFilters}}" dependentSelector="{{AdminDataGridHeaderSection.clearFilters}}" visible="true" stepKey="clearExistingFilters"/>
107+
<executeInSelenium
108+
function="
109+
function ($webdriver) use ($I) {
110+
$rows = $webdriver->findElements(\Facebook\WebDriver\WebDriverBy::cssSelector('table.data-grid tbody tr._clickable[data-role=row]:nth-of-type(1)'));
111+
while(!empty($rows)) {
112+
$rows[0]->click();
113+
$I->waitForPageLoad(30);
114+
$I->click('#delete');
115+
$I->waitForPageLoad(30);
116+
$I->waitForElementVisible('aside.confirm .modal-footer button.action-accept', 10);
117+
$I->waitForPageLoad(60);
118+
$I->click('aside.confirm .modal-footer button.action-accept');
119+
$I->waitForPageLoad(60);
120+
$I->waitForLoadingMaskToDisappear();
121+
$I->waitForElementVisible('#messages div.message-success', 10);
122+
$I->see('You deleted the rule.', '#messages div.message-success');
123+
$rows = $webdriver->findElements(\Facebook\WebDriver\WebDriverBy::cssSelector('table.data-grid tbody tr._clickable[data-role=row]:nth-of-type(1)'));
124+
}
125+
}"
126+
stepKey="deleteAllCartPriceRulesOneByOne"/>
127+
<waitForElementVisible selector="{{AdminDataGridTableSection.dataGridEmpty}}" stepKey="waitDataGridEmptyMessageAppears"/>
128+
<see selector="{{AdminDataGridTableSection.dataGridEmpty}}" userInput="We couldn't find any records." stepKey="assertDataGridEmptyMessage"/>
96129
</actionGroup>
97130
</actionGroups>

app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontMiniCartActionGroup.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
<waitForElementVisible selector="{{StorefrontMinicartSection.viewAndEditCart}}" stepKey="waitForViewAndEditCartVisible"/>
1313
<click selector="{{StorefrontMinicartSection.viewAndEditCart}}" stepKey="viewAndEditCart"/>
1414
<seeInCurrentUrl url="checkout/cart" stepKey="seeInCurrentUrl"/>
15+
<waitForPageLoad time="30" stepKey="waitForCartPageIsLoaded"/>
1516
</actionGroup>
1617
<actionGroup name="assertOneProductNameInMiniCart">
1718
<arguments>

app/code/Magento/Checkout/Test/Mftf/Test/AdminZeroSubtotalOrdersWithProcessingStatusTest.xml

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,63 +10,66 @@
1010
<test name="AdminZeroSubtotalOrdersWithProcessingStatusTest">
1111
<annotations>
1212
<features value="Checkout"/>
13-
<stories value="MAGETWO-72877: Zero Subtotal Orders have incorrect status"/>
13+
<stories value="Checkout via the Storefront"/>
1414
<title value="Checking status of Zero Subtotal Orders with 'Processing' New Order Status"/>
1515
<description value="Created order should be in Processing status"/>
1616
<severity value="MAJOR"/>
1717
<testCaseId value="MAGETWO-95994"/>
18+
<useCaseId value="MAGETWO-72877"/>
1819
<group value="checkout"/>
1920
</annotations>
2021
<before>
21-
<createData entity="SimpleSubCategory" stepKey="simpleSubCategory"/>
22-
<createData entity="SimpleProduct" stepKey="simpleProduct">
23-
<requiredEntity createDataKey="simpleSubCategory"/>
22+
<!--Create entities-->
23+
<createData entity="SimpleProduct3" stepKey="createProduct"/>
24+
<createData entity="SaleRule50PercentDiscountNoCoupon" stepKey="createCartPriceRule">
25+
<field key="discount_amount">100</field>
26+
<field key="coupon_type">SPECIFIC_COUPON</field>
27+
</createData>
28+
<createData entity="SimpleSalesRuleCoupon" stepKey="createCouponForCartPriceRule">
29+
<requiredEntity createDataKey="createCartPriceRule"/>
2430
</createData>
2531
<createData entity="FreeShippinMethodConfig" stepKey="enableFreeShipping"/>
2632
<createData entity="ZeroSubtotalCheckoutPaymentMethodConfig" stepKey="enableZeroSubtotalCheckout"/>
33+
<!--Login to Admin page-->
2734
<actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/>
2835
</before>
2936
<after>
30-
<actionGroup ref="AdminOrdersGridClearFiltersActionGroup" stepKey="clearAdminOrdersGridFilters"/>
31-
<actionGroup ref="DeleteCartPriceRuleByName" stepKey="deleteCartPriceRule">
32-
<argument name="ruleName" value="{{SalesRule100PercentDiscount.name}}"/>
33-
</actionGroup>
37+
<!--Delete entities-->
38+
<deleteData createDataKey="createProduct" stepKey="deleteProduct"/>
39+
<deleteData createDataKey="createCartPriceRule" stepKey="deleteCartPriceRule"/>
3440
<createData entity="ZeroSubtotalCheckoutPaymentMethodDefault" stepKey="disableZeroSubtotalCheckout"/>
3541
<createData entity="FreeShippinMethodDefault" stepKey="disableFreeShipping"/>
36-
<deleteData createDataKey="simpleProduct" stepKey="deleteSimpleProduct"/>
37-
<deleteData createDataKey="simpleSubCategory" stepKey="deleteSimpleSubCategory"/>
42+
<!--Clear filters-->
43+
<actionGroup ref="AdminOrdersGridClearFiltersActionGroup" stepKey="clearAdminOrdersGridFilters"/>
44+
<!--Logout from Admin page-->
3845
<actionGroup ref="logout" stepKey="logout"/>
3946
</after>
4047

41-
<!--Add New Rule-->
42-
<actionGroup ref="AdminCreateCartPriceRuleSpecificCouponActionGroup" stepKey="addNewRule">
43-
<argument name="rule" value="SalesRule100PercentDiscount"/>
44-
<argument name="userPerCoupon" value="99"/>
48+
<!--Navigate to product page-->
49+
<amOnPage url="{{StorefrontProductPage.url($$createProduct.custom_attributes[url_key]$$)}}" stepKey="navigateToProductPage"/>
50+
51+
<!--Add product to shopping cart-->
52+
<actionGroup ref="addToCartFromStorefrontProductPage" stepKey="addProductToCart">
53+
<argument name="productName" value="$$createProduct.name$$"/>
4554
</actionGroup>
4655

47-
<!--Open Product Page-->
48-
<amOnPage url="{{StorefrontProductPage.url($$simpleProduct.name$$)}}" stepKey="openProductPage"/>
56+
<!--Navigate to shopping cart page-->
57+
<actionGroup ref="StorefrontOpenCartFromMinicartActionGroup" stepKey="navigateToCartPage"/>
4958

5059
<!--Apply Cart Rule On Storefront-->
51-
<actionGroup ref="ApplyCartRuleOnStorefrontActionGroup" stepKey="applyCartRule">
52-
<argument name="product" value="$$simpleProduct$$"/>
53-
<argument name="couponCode" value="{{_defaultCoupon.code}}"/>
60+
<actionGroup ref="StorefrontApplyCouponActionGroup" stepKey="applyCartRule">
61+
<argument name="couponCode" value="$$createCouponForCartPriceRule.code$$"/>
5462
</actionGroup>
55-
<waitForText userInput='You used coupon code "{{_defaultCoupon.code}}"' stepKey="waitForSuccessMessage"/>
56-
<see selector="{{StorefrontMessagesSection.success}}" userInput='You used coupon code "{{_defaultCoupon.code}}"'
57-
stepKey="seeSuccessMessageUsedCouponCode"/>
58-
<waitForElementVisible selector="{{StorefrontCheckoutCartSummarySection.discountAmount}}" time="30"
59-
stepKey="waitForElementVisible"/>
63+
<waitForElementVisible selector="{{StorefrontCheckoutCartSummarySection.discountAmount}}" stepKey="waitForDiscountAmountVisible"/>
6064

6165
<!--Navigate to Checkout-->
62-
<actionGroup ref="NavigateToCheckoutActionGroup" stepKey="navigateToCheckout"/>
66+
<actionGroup ref="GoToCheckoutFromMinicartActionGroup" stepKey="navigateToCheckout"/>
6367

6468
<!--Place Order with Free Shipping-->
6569
<actionGroup ref="GuestCheckoutFillingShippingSectionActionGroup" stepKey="guestCheckoutFillingShippingSection">
6670
<argument name="shippingMethod" value="Free Shipping"/>
6771
</actionGroup>
68-
<see selector="{{CheckoutPaymentSection.notAvailablePaymentSolutions}}"
69-
userInput="No Payment Information Required" stepKey="seePaymentInformation"/>
72+
<see selector="{{CheckoutPaymentSection.notAvailablePaymentSolutions}}" userInput="No Payment Information Required" stepKey="seePaymentInformation"/>
7073
<actionGroup ref="ClickPlaceOrderActionGroup" stepKey="checkoutPlaceOrder"/>
7174
<grabTextFrom selector="{{CheckoutSuccessMainSection.orderNumber}}" stepKey="grabOrderNumber"/>
7275

@@ -76,7 +79,6 @@
7679
</actionGroup>
7780
<click selector="{{AdminDataGridTableSection.firstRow}}" stepKey="clickOrderRow"/>
7881
<waitForPageLoad stepKey="waitForCreatedOrderPageOpened"/>
79-
<see selector="{{AdminOrderDetailsInformationSection.orderStatus}}" userInput="Processing"
80-
stepKey="seeOrderStatus"/>
82+
<see selector="{{AdminOrderDetailsInformationSection.orderStatus}}" userInput="Processing" stepKey="seeOrderStatus"/>
8183
</test>
8284
</tests>
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="StorefrontSelectConfigurableAttributeOptionActionGroup">
12+
<arguments>
13+
<argument name="attributeLabel" type="string"/>
14+
<argument name="optionValue" type="string"/>
15+
<argument name="qty" type="string" defaultValue="1"/>
16+
</arguments>
17+
<waitForElementVisible selector="{{StorefrontProductInfoMainSection.productOptionSelect(attributeLabel)}}" stepKey="waitForOptionSelectVisible"/>
18+
<selectOption selector="{{StorefrontProductInfoMainSection.productOptionSelect(attributeLabel)}}" userInput="{{optionValue}}" stepKey="selectProductOption"/>
19+
<fillField selector="{{StorefrontProductPageSection.qtyInput}}" userInput="{{qty}}" stepKey="fillProductQuantity"/>
20+
</actionGroup>
21+
</actionGroups>

app/code/Magento/Sales/Test/Mftf/Test/AdminReorderWithCatalogPriceTest.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
<group value="catalogRule"/>
2121
</annotations>
2222
<before>
23+
<!-- Login as admin -->
24+
<actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/>
25+
<actionGroup ref="deleteAllCatalogPriceRule" stepKey="removeAllExistingCartPriceRules"/>
2326
<!--Create the catalog price rule -->
2427
<createData entity="CatalogRuleToPercent" stepKey="createCatalogRule"/>
2528
<!--Create product-->
@@ -44,14 +47,13 @@
4447
<actionGroup ref="RemoveCatalogPriceRule" stepKey="deletePriceRule">
4548
<argument name="ruleName" value="CatalogRuleToPercent.name" />
4649
</actionGroup>
50+
4751
<!--Clear all filters in grid-->
4852
<actionGroup ref="clearFiltersAdminDataGrid" stepKey="resetCatalogRuleGridFilters"/>
4953
<amOnPage url="{{AdminOrdersPage.url}}" stepKey="onOrdersPage"/>
5054
<actionGroup ref="clearFiltersAdminDataGrid" stepKey="clearGridFilter"/>
5155
<actionGroup ref="logout" stepKey="logout"/>
5256
</after>
53-
<!-- Login as admin -->
54-
<actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/>
5557
<!--Open order by Id-->
5658
<actionGroup ref="OpenOrderById" stepKey="openOrderById">
5759
<argument name="orderId" value="$createGuestCart.return$"/>

app/code/Magento/SalesRule/Test/Mftf/ActionGroup/AdminCartPriceRuleActionGroup.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
<argument name="actionsAggregator" type="string" defaultValue="ANY"/>
5252
<argument name="actionsValue" type="string" defaultValue="FALSE"/>
5353
<argument name="childAttribute" type="string" defaultValue="Category"/>
54+
<argument name="actionOperator" type="string" defaultValue="is"/>
5455
<argument name="actionValue" type="string"/>
5556
</arguments>
5657
<click selector="{{AdminCartPriceRulesFormSection.actionsHeader}}" stepKey="clickOnActionTab"/>
@@ -61,11 +62,16 @@
6162
<click selector="{{AdminCartPriceRulesFormSection.conditions}}" stepKey="selectActionConditions"/>
6263
<waitForPageLoad stepKey="waitForDropDownOpened"/>
6364
<selectOption selector="{{AdminCartPriceRulesFormSection.childAttribute}}" userInput="{{childAttribute}}" stepKey="selectAttribute"/>
64-
<waitForPageLoad stepKey="waitForOperatorOpened"/>
65+
<waitForPageLoad stepKey="waitForAttributeSelected"/>
66+
<click selector="{{AdminCartPriceRulesFormSection.condition('is')}}" stepKey="clickOnOperator"/>
67+
<selectOption selector="{{AdminCartPriceRulesFormSection.operator}}" userInput="{{actionOperator}}" stepKey="selectOperator"/>
68+
<!-- In case we are choosing already selected value - select is not closed automatically -->
69+
<conditionalClick selector="{{AdminCartPriceRulesFormSection.condition('...')}}" dependentSelector="{{AdminCartPriceRulesFormSection.operator}}" visible="true" stepKey="closeSelect"/>
6570
<click selector="{{AdminCartPriceRulesFormSection.condition('...')}}" stepKey="clickToChooseOption3"/>
6671
<fillField selector="{{AdminCartPriceRulesFormSection.actionValue}}" userInput="{{actionValue}}" stepKey="fillActionValue"/>
6772
<click selector="{{AdminCartPriceRulesFormSection.applyAction}}" stepKey="applyAction"/>
6873
<click selector="{{AdminMainActionsSection.save}}" stepKey="clickSaveButton"/>
74+
<waitForElementVisible selector="{{AdminMessagesSection.success}}" stepKey="waitSuccessMessage"/>
6975
<see selector="{{AdminMessagesSection.success}}" userInput="You saved the rule." stepKey="seeSuccessMessage"/>
7076
</actionGroup>
7177
</actionGroups>

0 commit comments

Comments
 (0)