Skip to content

Commit 24da4b7

Browse files
Merge branch 'develop' into remove_hardcoded_opendialog_url
2 parents f8d798b + eb5fa6c commit 24da4b7

File tree

876 files changed

+3073
-2002
lines changed

Some content is hidden

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

876 files changed

+3073
-2002
lines changed

app/code/Magento/PageBuilder/Test/Mftf/ActionGroup/CatalogProductActionGroup/SaveCatalogCategoryActionGroup.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
-->
88
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
99
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
10-
<actionGroup name="saveCatalogCategory" extends="SaveCategoryFormActionGroup">
10+
<actionGroup name="saveCatalogCategory" extends="AdminSaveCategoryFormActionGroup">
1111
<!-- Move to CE: Fix CE action group -->
1212
<waitForElementVisible selector="{{AdminCategoryMainActionsSection.SaveButton}}" stepKey="waitForSaveCategoryButton" before="saveCategory"/>
1313
<waitForPageLoad stepKey="waitForPageLoad" after="saveCategory"/>

app/code/Magento/PageBuilder/Test/Mftf/ActionGroup/ContentTypeProductsActionGroup/AddConditionToProductConditionsActionGroup.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
<argument name="conditionInput" defaultValue="1" type="string"/>
1414
<argument name="index" defaultValue="1" type="string"/>
1515
</arguments>
16-
<comment userInput="addConditionToProductConditions" stepKey="comment"/>
1716
<waitForElementVisible selector="{{ProductsContentTypeForm.conditionsList}}" stepKey="waitForConditionsToLoad"/>
1817
<waitForElementVisible selector="{{ProductsContentTypeForm.conditionsListAddButton(index)}}" stepKey="waitForAddConditionButton"/>
1918
<click selector="{{ProductsContentTypeForm.conditionsListAddButton(index)}}" stepKey="clickAddConditionButton"/>
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+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
10+
<actionGroup name="AdminClickInsertWidgetFromInsertWidgetSlideOutActionGroup">
11+
<annotations>
12+
<description>Clicks the Insert Widget button from the Insert Widget slide out to save the widget form.</description>
13+
</annotations>
14+
<arguments>
15+
<argument name="baseContent" defaultValue="{{CmsNewPagePageActionsSection.saveAndContinueEdit}}" type="string"/>
16+
</arguments>
17+
<waitForElementVisible selector="{{WidgetSection.InsertWidget}}" stepKey="waitForInsertWidgetButton"/>
18+
<click selector="{{WidgetSection.InsertWidget}}" stepKey="clickInsertWidgetButton"/>
19+
<waitForPageLoad stepKey="waitForSlideOutToClose"/>
20+
<waitForElementNotVisible selector="{{WidgetSection.InsertWidget}}" stepKey="waitForInsertWidgetModalNotVisible"/>
21+
<waitForElementVisible time="10" selector="{{baseContent}}" stepKey="waitForCmsPageSaveButton"/>
22+
</actionGroup>
23+
</actionGroups>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
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+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
10+
<actionGroup name="AdminClickInsertWidgetButtonInInlineTinyMCEEditorActionGroup">
11+
<annotations>
12+
<description>Clicks the Insert Widget button in the inline tinyMCE editor to open the Insert Widget slide out.</description>
13+
</annotations>
14+
<waitForElementVisible selector="{{TinyMCESection.InsertWidgetIcon}}" stepKey="waitForInsertWidgetIcon"/>
15+
<click selector="{{TinyMCESection.InsertWidgetIcon}}" stepKey="clickInsertWidgetBtn"/>
16+
<waitForPageLoad stepKey="waitForSlideOut"/>
17+
<waitForElementVisible selector="{{EditPanelForm.editFormTitle}}" stepKey="waitForSlideOutTitle"/>
18+
<see userInput="Insert Widget" selector="{{EditPanelForm.editFormTitle}}" stepKey="seeSlideOutTitle"/>
19+
</actionGroup>
20+
</actionGroups>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
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+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
10+
<actionGroup name="AdminSelectCatalogProductsListWidgetFromInsertWidgetSlideOutActionGroup">
11+
<annotations>
12+
<description>Fills out the Widget Options form for the Catalog Products List widget from the Insert Widget slide out.</description>
13+
</annotations>
14+
<arguments>
15+
<argument name="productsCount" type="string" defaultValue="1"/>
16+
<argument name="widgetTemplate" type="string" defaultValue="Products Grid Template"/>
17+
</arguments>
18+
<waitForElementVisible selector="{{WidgetSection.WidgetType}}" stepKey="waitForWidgetType"/>
19+
<selectOption selector="{{WidgetSection.WidgetType}}" userInput="{{TinyMCEWidgets.CatalogProductsListName}}" stepKey="selectCatalogProductsListWidget"/>
20+
<waitForPageLoad stepKey="waitForWidgetOptions"/>
21+
<waitForElementVisible selector="{{WidgetSection.NoOfProductToDisplay}}" stepKey="waitForNumberOfProductsToDisplayInput"/>
22+
<fillField selector="{{WidgetSection.NoOfProductToDisplay}}" userInput="{{productsCount}}" stepKey="fillNumberOfProductsToDisplay"/>
23+
<selectOption selector="{{WidgetSection.WidgetTemplate}}" userInput="{{widgetTemplate}}" stepKey="selectTemplate"/>
24+
</actionGroup>
25+
</actionGroups>

app/code/Magento/PageBuilder/Test/Mftf/Data/TextData.xml

Lines changed: 0 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -38,103 +38,4 @@
3838
<data key="value"/>
3939
<data key="errorMessage">This is a required field.</data>
4040
</entity>
41-
<!-- Variables -->
42-
<entity name="TinyMCEVariableBaseURL" type="pagebuilder_text_variable_property">
43-
<data key="variableName">default:web/unsecure/base_url</data>
44-
<data key="variableNameEncoded">d2ViL3Vuc2VjdXJlL2Jhc2VfdXJs</data>
45-
<data key="editPanelValue">Base URL</data>
46-
<data key="stageValue">{{config path=&quot;web/unsecure/base_url&quot;}}</data>
47-
</entity>
48-
<entity name="TinyMCEVariableStoreName" type="pagebuilder_text_variable_property">
49-
<data key="variableName">default:general/store_information/name</data>
50-
<data key="storefrontValue">The_Magento_Store_Name_Is_A_Long_Magento_Store_Name_With_No_Spaces</data>
51-
</entity>
52-
<entity name="TinyMCEVariableCountry" type="pagebuilder_text_variable_property">
53-
<data key="variableName">default:general/store_information/country_id</data>
54-
<data key="editPanelValue">Country</data>
55-
<data key="stageValue">{{config path=&quot;general/store_information/country_id&quot;}}</data>
56-
</entity>
57-
<entity name="PageBuilderTextArea_VariableBaseURL" type="pagebuilder_text_variable_property">
58-
<data key="variableName">default:web/unsecure/base_url</data>
59-
<data key="editPanelValue">{{config path="web/unsecure/base_url"}}</data>
60-
</entity>
61-
<!-- Widgets -->
62-
<entity name="TinyMCEWidgetCMSPageLink" type="pagebuilder_text_widget_property">
63-
<data key="widgetType">Magento\Cms\Block\Widget\Page\Link</data>
64-
<data key="editPanelValue">CMS Page Link</data>
65-
<data key="stageValue">{{widget type=&quot;Magento\Cms\Block\Widget\Page\Link&quot; template=&quot;widget/link/link_block.phtml&quot; page_id=</data>
66-
<data key="stageValueEncoded">e3t3aWRnZXQgdHlwZT0iTWFnZW50b1xDbXNcQmxvY2tcV2lkZ2V0XFBhZ2VcTGluayIgdGVtcGxhdGU9IndpZGdldC9saW5rL2xpbmtfYmxvY2sucGh0bWwiIHBhZ2VfaWQ9</data>
67-
</entity>
68-
<entity name="PageBuilderTextArea_WidgetCMSPageLink" type="pagebuilder_text_widget_property">
69-
<data key="widgetType">Magento\Cms\Block\Widget\Page\Link</data>
70-
<data key="editPanelValue">{{widget type=&quot;Magento\\Cms\\Block\\Widget\\Page\\Link&quot; template=&quot;widget/link/link_block.phtml&quot; page_id=</data>
71-
</entity>
72-
<entity name="PageBuilderTextArea_WidgetCMSHomepageLink" type="pagebuilder_text_widget_property">
73-
<data key="widgetType">Magento\Cms\Block\Widget\Page\Link</data>
74-
<data key="editPanelValue">{{widget type="Magento\Cms\Block\Widget\Page\Link" template="widget/link/link_block.phtml" page_id="2" type_name="CMS Page Link"}}</data>
75-
<data key="identifier">home</data>
76-
</entity>
77-
<entity name="PageBuilderVariableWidgetText" type="pagebuilder_text_property">
78-
<data key="value">test string</data>
79-
<data key="expectedString1">test str</data>
80-
<data key="expectedString2">ing</data>
81-
</entity>
82-
<!-- TinyMCE Formats -->
83-
<entity name="TinyMCEFormatParagraph" type="pagebuilder_tinymce_format">
84-
<data key="label">Paragraph</data>
85-
<data key="tagName">p</data>
86-
</entity>
87-
<entity name="TinyMCEFormatHeading1" type="pagebuilder_tinymce_format">
88-
<data key="label">Heading 1</data>
89-
<data key="tagName">h1</data>
90-
</entity>
91-
<entity name="TinyMCEFormatHeading2" type="pagebuilder_tinymce_format">
92-
<data key="label">Heading 2</data>
93-
<data key="tagName">h2</data>
94-
</entity>
95-
<entity name="TinyMCEFormatHeading3" type="pagebuilder_tinymce_format">
96-
<data key="label">Heading 3</data>
97-
<data key="tagName">h3</data>
98-
</entity>
99-
<entity name="TinyMCEFormatHeading4" type="pagebuilder_tinymce_format">
100-
<data key="label">Heading 4</data>
101-
<data key="tagName">h4</data>
102-
</entity>
103-
<entity name="TinyMCEFormatHeading5" type="pagebuilder_tinymce_format">
104-
<data key="label">Heading 5</data>
105-
<data key="tagName">h5</data>
106-
</entity>
107-
<entity name="TinyMCEFormatHeading6" type="pagebuilder_tinymce_format">
108-
<data key="label">Heading 6</data>
109-
<data key="tagName">h6</data>
110-
</entity>
111-
<entity name="TinyMCEFormatImportant" type="pagebuilder_tinymce_format">
112-
<data key="label">Important</data>
113-
<data key="tagName">div</data>
114-
</entity>
115-
<entity name="TinyMCEFormatPreformatted" type="pagebuilder_tinymce_format">
116-
<data key="label">Preformatted</data>
117-
<data key="tagName">div</data>
118-
</entity>
119-
<!-- TinyMCE Selections -->
120-
<entity name="TinyMCEPartialHeadingSelection" type="pagebuilder_text_selection">
121-
<data key="startX">15</data>
122-
<data key="endX">115</data>
123-
<data key="startY">15</data>
124-
<data key="endY">15</data>
125-
<data key="selection">his is a h</data>
126-
</entity>
127-
<entity name="TinyMCEPartialTextSelection" type="pagebuilder_text_selection">
128-
<data key="startX">18</data>
129-
<data key="endX">55</data>
130-
<data key="startY">15</data>
131-
<data key="endY">15</data>
132-
<data key="selection">t strin</data>
133-
</entity>
134-
<entity name="TinyMCEHeadingVariableTextSelection" type="pagebuilder_multiple_text_selection">
135-
<data key="selection">his is a heading
136-
Base URL
137-
138-
test strin</data>
139-
</entity>
14041
</entities>
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
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+
<entities xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:DataGenerator/etc/dataProfileSchema.xsd">
11+
<!-- Variables -->
12+
<entity name="TinyMCEVariableBaseURL" type="pagebuilder_text_variable_property">
13+
<data key="variableName">default:web/unsecure/base_url</data>
14+
<data key="variableNameEncoded">d2ViL3Vuc2VjdXJlL2Jhc2VfdXJs</data>
15+
<data key="editPanelValue">Base URL</data>
16+
<data key="stageValue">{{config path=&quot;web/unsecure/base_url&quot;}}</data>
17+
</entity>
18+
<entity name="TinyMCEVariableStoreName" type="pagebuilder_text_variable_property">
19+
<data key="variableName">default:general/store_information/name</data>
20+
<data key="storefrontValue">The_Magento_Store_Name_Is_A_Long_Magento_Store_Name_With_No_Spaces</data>
21+
</entity>
22+
<entity name="TinyMCEVariableCountry" type="pagebuilder_text_variable_property">
23+
<data key="variableName">default:general/store_information/country_id</data>
24+
<data key="editPanelValue">Country</data>
25+
<data key="stageValue">{{config path=&quot;general/store_information/country_id&quot;}}</data>
26+
</entity>
27+
<entity name="PageBuilderTextArea_VariableBaseURL" type="pagebuilder_text_variable_property">
28+
<data key="variableName">default:web/unsecure/base_url</data>
29+
<data key="editPanelValue">{{config path="web/unsecure/base_url"}}</data>
30+
</entity>
31+
<!-- Widgets -->
32+
<entity name="TinyMCEWidgets" type="pagebuilder_widget_property">
33+
<data key="CatalogProductsListType">Magento\CatalogWidget\Block\Product\ProductsList</data>
34+
<data key="CatalogProductsListName">Catalog Products List</data>
35+
</entity>
36+
<entity name="TinyMCEWidgetCMSPageLink" type="pagebuilder_text_widget_property">
37+
<data key="widgetType">Magento\Cms\Block\Widget\Page\Link</data>
38+
<data key="editPanelValue">CMS Page Link</data>
39+
<data key="stageValue">{{widget type=&quot;Magento\Cms\Block\Widget\Page\Link&quot; template=&quot;widget/link/link_block.phtml&quot; page_id=</data>
40+
<data key="stageValueEncoded">e3t3aWRnZXQgdHlwZT0iTWFnZW50b1xDbXNcQmxvY2tcV2lkZ2V0XFBhZ2VcTGluayIgdGVtcGxhdGU9IndpZGdldC9saW5rL2xpbmtfYmxvY2sucGh0bWwiIHBhZ2VfaWQ9</data>
41+
</entity>
42+
<entity name="PageBuilderTextArea_WidgetCMSPageLink" type="pagebuilder_text_widget_property">
43+
<data key="widgetType">Magento\Cms\Block\Widget\Page\Link</data>
44+
<data key="editPanelValue">{{widget type=&quot;Magento\\Cms\\Block\\Widget\\Page\\Link&quot; template=&quot;widget/link/link_block.phtml&quot; page_id=</data>
45+
</entity>
46+
<entity name="PageBuilderTextArea_WidgetCMSHomepageLink" type="pagebuilder_text_widget_property">
47+
<data key="widgetType">Magento\Cms\Block\Widget\Page\Link</data>
48+
<data key="editPanelValue">{{widget type="Magento\Cms\Block\Widget\Page\Link" template="widget/link/link_block.phtml" page_id="2" type_name="CMS Page Link"}}</data>
49+
<data key="identifier">home</data>
50+
</entity>
51+
<entity name="PageBuilderVariableWidgetText" type="pagebuilder_text_property">
52+
<data key="value">test string</data>
53+
<data key="expectedString1">test str</data>
54+
<data key="expectedString2">ing</data>
55+
</entity>
56+
<!-- TinyMCE Formats -->
57+
<entity name="TinyMCEFormatParagraph" type="pagebuilder_tinymce_format">
58+
<data key="label">Paragraph</data>
59+
<data key="tagName">p</data>
60+
</entity>
61+
<entity name="TinyMCEFormatHeading1" type="pagebuilder_tinymce_format">
62+
<data key="label">Heading 1</data>
63+
<data key="tagName">h1</data>
64+
</entity>
65+
<entity name="TinyMCEFormatHeading2" type="pagebuilder_tinymce_format">
66+
<data key="label">Heading 2</data>
67+
<data key="tagName">h2</data>
68+
</entity>
69+
<entity name="TinyMCEFormatHeading3" type="pagebuilder_tinymce_format">
70+
<data key="label">Heading 3</data>
71+
<data key="tagName">h3</data>
72+
</entity>
73+
<entity name="TinyMCEFormatHeading4" type="pagebuilder_tinymce_format">
74+
<data key="label">Heading 4</data>
75+
<data key="tagName">h4</data>
76+
</entity>
77+
<entity name="TinyMCEFormatHeading5" type="pagebuilder_tinymce_format">
78+
<data key="label">Heading 5</data>
79+
<data key="tagName">h5</data>
80+
</entity>
81+
<entity name="TinyMCEFormatHeading6" type="pagebuilder_tinymce_format">
82+
<data key="label">Heading 6</data>
83+
<data key="tagName">h6</data>
84+
</entity>
85+
<entity name="TinyMCEFormatImportant" type="pagebuilder_tinymce_format">
86+
<data key="label">Important</data>
87+
<data key="tagName">div</data>
88+
</entity>
89+
<entity name="TinyMCEFormatPreformatted" type="pagebuilder_tinymce_format">
90+
<data key="label">Preformatted</data>
91+
<data key="tagName">div</data>
92+
</entity>
93+
<!-- TinyMCE Selections -->
94+
<entity name="TinyMCEPartialHeadingSelection" type="pagebuilder_text_selection">
95+
<data key="startX">15</data>
96+
<data key="endX">115</data>
97+
<data key="startY">15</data>
98+
<data key="endY">15</data>
99+
<data key="selection">his is a h</data>
100+
</entity>
101+
<entity name="TinyMCEPartialTextSelection" type="pagebuilder_text_selection">
102+
<data key="startX">18</data>
103+
<data key="endX">55</data>
104+
<data key="startY">15</data>
105+
<data key="endY">15</data>
106+
<data key="selection">t strin</data>
107+
</entity>
108+
<entity name="TinyMCEHeadingVariableTextSelection" type="pagebuilder_multiple_text_selection">
109+
<data key="selection">his is a heading
110+
Base URL
111+
112+
test strin</data>
113+
</entity>
114+
</entities>
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\PageBuilder\Test\Mftf\Helper;
8+
9+
use Magento\FunctionalTestingFramework\Helper\Helper;
10+
11+
/**
12+
* Class SelectText provides an ability to select needed text.
13+
*/
14+
class SelectText extends Helper
15+
{
16+
/**
17+
* Select needed text.
18+
*
19+
* @param string $context
20+
* @param int $startX
21+
* @param int $startY
22+
* @param int $endX
23+
* @param int $endY
24+
* @return void
25+
*/
26+
public function selectText(string $context, int $startX, int $startY, int $endX, int $endY)
27+
{
28+
try {
29+
/** @var \Magento\FunctionalTestingFramework\Module\MagentoWebDriver $webDriver */
30+
$webDriver = $this->getModule('\Magento\FunctionalTestingFramework\Module\MagentoWebDriver');
31+
32+
$contextElement = $webDriver->webDriver->findElement(\Facebook\WebDriver\WebDriverBy::xpath($context));
33+
$actions = new \Facebook\WebDriver\Interactions\WebDriverActions($webDriver->webDriver);
34+
$actions->moveToElement($contextElement, $startX, $startY)
35+
->clickAndHold()
36+
->moveToElement($contextElement, $endX, $endY)
37+
->release()
38+
->perform();
39+
} catch (\Exception $e) {
40+
$this->fail($e->getMessage());
41+
}
42+
}
43+
44+
/**
45+
* Select needed text between 2 context elements.
46+
*
47+
* @param string $firstContext
48+
* @param string $secondContext
49+
* @param int $startX
50+
* @param int $startY
51+
* @param int $endX
52+
* @param int $endY
53+
* @return void
54+
*/
55+
public function selectHeadingTextAndVariableTinyMCE(
56+
string $firstContext,
57+
string $secondContext,
58+
int $startX,
59+
int $startY,
60+
int $endX,
61+
int $endY
62+
) {
63+
try {
64+
/** @var \Magento\FunctionalTestingFramework\Module\MagentoWebDriver $webDriver */
65+
$webDriver = $this->getModule('\Magento\FunctionalTestingFramework\Module\MagentoWebDriver');
66+
67+
$heading = $webDriver->webDriver->findElement(\Facebook\WebDriver\WebDriverBy::xpath($firstContext));
68+
$text = $webDriver->webDriver->findElement(\Facebook\WebDriver\WebDriverBy::xpath($secondContext));
69+
$actions = new \Facebook\WebDriver\Interactions\WebDriverActions($webDriver->webDriver);
70+
$actions->moveToElement($heading, $startX, $startY)
71+
->clickAndHold()
72+
->moveToElement($text, $endX, $endY)
73+
->release()
74+
->perform();
75+
} catch (\Exception $e) {
76+
$this->fail($e->getMessage());
77+
}
78+
}
79+
}

app/code/Magento/PageBuilder/Test/Mftf/Section/PageBuilderEditFormSection/EditPanelFormSection.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd">
1010
<section name="EditPanelForm">
1111
<element name="editForm" type="text" selector="//div[contains(@class, &quot;pagebuilder_modal_form_pagebuilder_modal_form_modal&quot;)]"/>
12-
<element name="editFormTitle" type="text" selector=".modal-title[data-role='title']"/>
12+
<element name="editFormTitle" type="text" selector="aside._show .modal-title[data-role='title']"/>
1313
<element name="editFormClose" type="button" selector=".modal-header .page-main-actions [data-form-role='close']" timeout="30"/>
1414
<element name="editFormReset" type="button" selector=".modal-header .page-main-actions [data-form-role='reset']" timeout="30"/>
1515
<element name="editFormSave" type="button" selector=".modal-header .page-main-actions [data-form-role='save']" timeout="30"/>

0 commit comments

Comments
 (0)