diff --git a/test/ui-test/src/screens/StatusCommunityScreen.py b/test/ui-test/src/screens/StatusCommunityScreen.py index 226007ff13..053e476822 100644 --- a/test/ui-test/src/screens/StatusCommunityScreen.py +++ b/test/ui-test/src/screens/StatusCommunityScreen.py @@ -32,6 +32,22 @@ class CommunityScreenComponents(Enum): EDIT_CHANNEL_MENU_ITEM = "edit_Channel_StatusMenuItemDelegate" COMMUNITY_COLUMN_VIEW = "mainWindow_communityColumnView_CommunityColumnView" +class CommunitySettingsComponents(Enum): + EDIT_COMMUNITY_SCROLL_VIEW = "communitySettings_EditCommunity_ScrollView" + EDIT_COMMUNITY_BUTTON = "communitySettings_EditCommunity_Button" + EDIT_COMMUNITY_NAME_INPUT = "communitySettings_EditCommunity_Name_Input" + EDIT_COMMUNITY_DESCRIPTION_INPUT = "communitySettings_EditCommunity_Description_Input" + EDIT_COMMUNITY_COLOR_PICKER_BUTTON = "communitySettings_EditCommunity_ColorPicker_Button" + SAVE_BUTTON = "communitySettings_Save_Button" + BACK_TO_COMMUNITY_BUTTON = "communitySettings_BackToCommunity_Button" + COMMUNITY_NAME_TEXT = "communitySettings_CommunityName_Text" + COMMUNITY_DESCRIPTION_TEXT = "communitySettings_CommunityDescription_Text" + COMMUNITY_LETTER_IDENTICON = "communitySettings_Community_LetterIdenticon" + +class CommunityColorPanelComponents(Enum): + HEX_COLOR_INPUT = "communitySettings_ColorPanel_HexColor_Input" + SAVE_COLOR_BUTTON = "communitySettings_SaveColor_Button" + class CreateOrEditCommunityChannelPopup(Enum): COMMUNITY_CHANNEL_NAME_INPUT: str = "createOrEditCommunityChannelNameInput_TextEdit" COMMUNITY_CHANNEL_DESCRIPTION_INPUT: str = "createOrEditCommunityChannelDescriptionInput_TextEdit" @@ -60,10 +76,10 @@ class StatusCommunityScreen: click_obj_by_name(CreateOrEditCommunityChannelPopup.COMMUNITY_CHANNEL_BUTTON.value) # TODO check if this function is needed, it seems to do the same as verify_chat_title in StatusChatScreen - def verify_channel_name(self, communityChannelName: str): - verify_text_matching(CommunityScreenComponents.CHAT_IDENTIFIER_CHANNEL_NAME.value, communityChannelName) + def verify_channel_name(self, community_channel_name: str): + verify_text_matching(CommunityScreenComponents.CHAT_IDENTIFIER_CHANNEL_NAME.value, community_channel_name) - def edit_community_channel(self, communityChannelName: str, newCommunityChannelName: str): + def edit_community_channel(self, new_community_channel_name: str): [bannerLoaded, _] = is_loaded_visible_and_enabled(MainUi.MODULE_WARNING_BANNER.value) if (bannerLoaded): time.sleep(5) # Wait for the banner to disappear otherwise the click might land badly @@ -73,6 +89,39 @@ class StatusCommunityScreen: # Select all text in the input before typing wait_for_object_and_type(CreateOrEditCommunityChannelPopup.COMMUNITY_CHANNEL_NAME_INPUT.value, "") - type(CreateOrEditCommunityChannelPopup.COMMUNITY_CHANNEL_NAME_INPUT.value, newCommunityChannelName) + type(CreateOrEditCommunityChannelPopup.COMMUNITY_CHANNEL_NAME_INPUT.value, new_community_channel_name) click_obj_by_name(CreateOrEditCommunityChannelPopup.COMMUNITY_CHANNEL_BUTTON.value) time.sleep(0.5) + + def edit_community(self, new_community_name: str, new_community_description: str, new_community_color: str): + click_obj_by_name(CommunityScreenComponents.COMMUNITY_HEADER_BUTTON.value) + click_obj_by_name(CommunitySettingsComponents.EDIT_COMMUNITY_BUTTON.value) + + # Select all text in the input before typing + wait_for_object_and_type(CommunitySettingsComponents.EDIT_COMMUNITY_NAME_INPUT.value, "") + type(CommunitySettingsComponents.EDIT_COMMUNITY_NAME_INPUT.value, new_community_name) + + wait_for_object_and_type(CommunitySettingsComponents.EDIT_COMMUNITY_DESCRIPTION_INPUT.value, "") + type(CommunitySettingsComponents.EDIT_COMMUNITY_DESCRIPTION_INPUT.value, new_community_description) + + scroll_obj_by_name(CommunitySettingsComponents.EDIT_COMMUNITY_SCROLL_VIEW.value) + time.sleep(1) + scroll_obj_by_name(CommunitySettingsComponents.EDIT_COMMUNITY_SCROLL_VIEW.value) + time.sleep(1) + + click_obj_by_name(CommunitySettingsComponents.EDIT_COMMUNITY_COLOR_PICKER_BUTTON.value) + wait_for_object_and_type(CommunityColorPanelComponents.HEX_COLOR_INPUT.value, "") + type(CommunityColorPanelComponents.HEX_COLOR_INPUT.value, new_community_color) + click_obj_by_name(CommunityColorPanelComponents.SAVE_COLOR_BUTTON.value) + + click_obj_by_name(CommunitySettingsComponents.SAVE_BUTTON.value) + time.sleep(0.5) + + # Validation + verify_text_matching(CommunitySettingsComponents.COMMUNITY_NAME_TEXT.value, new_community_name) + verify_text_matching(CommunitySettingsComponents.COMMUNITY_DESCRIPTION_TEXT.value, new_community_description) + obj = get_obj(CommunitySettingsComponents.COMMUNITY_LETTER_IDENTICON.value) + test.verify(obj.color.name == new_community_color, "Community color was not changed correctly") + + def go_back_to_community(self): + click_obj_by_name(CommunitySettingsComponents.BACK_TO_COMMUNITY_BUTTON.value) diff --git a/test/ui-test/testSuites/suite_status/shared/scripts/sections/community_names.py b/test/ui-test/testSuites/suite_status/shared/scripts/sections/community_names.py index 9140fb860c..53dd382b56 100644 --- a/test/ui-test/testSuites/suite_status/shared/scripts/sections/community_names.py +++ b/test/ui-test/testSuites/suite_status/shared/scripts/sections/community_names.py @@ -16,3 +16,23 @@ msgDelegate_channelIdentifierNameText_StyledText = {"container": chatMessageList createOrEditCommunityChannelNameInput_TextEdit = {"container": statusDesktop_mainWindow_overlay, "objectName": "createOrEditCommunityChannelNameInput", "type": "TextEdit", "visible": True} createOrEditCommunityChannelDescriptionInput_TextEdit = {"container": statusDesktop_mainWindow_overlay, "objectName": "createOrEditCommunityChannelDescriptionInput", "type": "TextEdit", "visible": True} createOrEditCommunityChannelBtn_StatusButton = {"container": statusDesktop_mainWindow_overlay, "objectName": "createOrEditCommunityChannelBtn", "type": "StatusButton", "visible": True} + +# Community settings +communitySettings_EditCommunity_Button = {"container": statusDesktop_mainWindow, "objectName": "communityOverviewSettingsEditCommunityButton", "type": "StatusButton"} +communitySettings_BackToCommunity_Button = {"container": statusDesktop_mainWindow, "objectName": "communitySettingsBackToCommunityButton", "type": "StatusBaseText", "visible": True} +communitySettings_CommunityName_Text = {"container": statusDesktop_mainWindow, "objectName": "communityOverviewSettingsCommunityName", "type": "StatusBaseText", "visible": True} +communitySettings_CommunityDescription_Text = {"container": statusDesktop_mainWindow, "objectName": "communityOverviewSettingsCommunityDescription", "type": "StatusBaseText", "visible": True} +communitySettings_Community_Identicon = {"container": statusDesktop_mainWindow, "objectName": "communityOverviewSettingsPanelIdenticon", "type": "StatusSmartIdenticon", "visible": True} +communitySettings_Community_LetterIdenticon = {"container": communitySettings_Community_Identicon, "objectName": "statusSmartIdenticonLetter", "type": "StatusLetterIdenticon", "visible": True} + +# Community Edit: +communitySettings_EditCommunity_ScrollView = {"container": statusDesktop_mainWindow, "objectName": "communityEditPanelScrollView", "type": "StatusScrollView", "visible": True} +communitySettings_EditCommunity_Name_Input = {"container": communitySettings_EditCommunity_ScrollView, "objectName": "editCommunityNameInput", "type": "TextEdit"} +communitySettings_EditCommunity_Description_Input = {"container": communitySettings_EditCommunity_ScrollView, "objectName": "editCommunityDescriptionInput", "type": "TextEdit"} +communitySettings_EditCommunity_ColorPicker_Button = {"container": communitySettings_EditCommunity_ScrollView, "objectName": "editCommunityColorPicker", "type": "CommunityColorPicker"} +communitySettings_Save_Button = {"container": statusDesktop_mainWindow, "objectName": "settingsDirtyToastMessageSaveButton", "type": "StatusButton", "visible": True} + + +# Community color popup: +communitySettings_ColorPanel_HexColor_Input = {"container": statusDesktop_mainWindow_overlay, "objectName": "communityColorPanelHexInput", "type": "TextEdit"} +communitySettings_SaveColor_Button = {"container": statusDesktop_mainWindow_overlay, "objectName": "communityColorPanelSelectColorButton", "type": "StatusButton", "visible": True} diff --git a/test/ui-test/testSuites/suite_status/shared/steps/communitySteps.py b/test/ui-test/testSuites/suite_status/shared/steps/communitySteps.py index c12d7f1aa2..d1fa8326a9 100644 --- a/test/ui-test/testSuites/suite_status/shared/steps/communitySteps.py +++ b/test/ui-test/testSuites/suite_status/shared/steps/communitySteps.py @@ -29,10 +29,19 @@ def step(context, community_name): def step(context, community_channel_name, community_channel_description, method): _statusCommunityScreen.create_community_channel(community_channel_name, community_channel_description, method) -@When("the admin edits a community channel named |any| to the name |any|") -def step(context, community_channel_name, new_community_channel_name): - _statusCommunityScreen.edit_community_channel(community_channel_name, new_community_channel_name) +@When("the admin edits the current community channel to the name |any|") +def step(context, new_community_channel_name): + _statusCommunityScreen.edit_community_channel(new_community_channel_name) @Then("the user lands on the community channel named |any|") def step(context, community_channel_name): - _statusCommunityScreen.verify_channel_name(community_channel_name) \ No newline at end of file + _statusCommunityScreen.verify_channel_name(community_channel_name) + +@When("the admin edits the current community to the name |any| and description |any| and color |any|") +def step(context, new_community_name, new_community_description, new_community_color): + _statusCommunityScreen.edit_community(new_community_name, new_community_description, new_community_color) + +@When("the admin goes back to the community") +def step(context): + _statusCommunityScreen.go_back_to_community() + \ No newline at end of file diff --git a/test/ui-test/testSuites/suite_status/tst_communityFlows/test.feature b/test/ui-test/testSuites/suite_status/tst_communityFlows/test.feature index bcab7024cf..a5b409670b 100644 --- a/test/ui-test/testSuites/suite_status/tst_communityFlows/test.feature +++ b/test/ui-test/testSuites/suite_status/tst_communityFlows/test.feature @@ -47,10 +47,21 @@ Feature: Status Desktop community Then the user lands on the community named myCommunity When the admin creates a community channel named test-channel, with description My description with the method bottom_menu Then the user lands on the community channel named test-channel - When the admin edits a community channel named to the name + When the admin edits the current community channel to the name Then the user lands on the community channel named Examples: | community_channel_name | community_channel_description | new_community_channel_name | | test-channel | Community channel description tested 1 | new-test-channel | + Scenario Outline: Admin edits a community + When the user creates a community named myCommunity, with description My community description, intro Community Intro and outro Community Outro + Then the user lands on the community named myCommunity + When the admin edits the current community to the name and description and color + When the admin goes back to the community + Then the user lands on the community named + + Examples: + | new_community_name | new_community_description | new_community_color | + | myCommunityNamedChanged | Cool new description 123 | #ff0000 | + diff --git a/ui/app/AppLayouts/Chat/panels/communities/CommunityEditSettingsPanel.qml b/ui/app/AppLayouts/Chat/panels/communities/CommunityEditSettingsPanel.qml index b7549dfe40..bf75c420e1 100644 --- a/ui/app/AppLayouts/Chat/panels/communities/CommunityEditSettingsPanel.qml +++ b/ui/app/AppLayouts/Chat/panels/communities/CommunityEditSettingsPanel.qml @@ -23,6 +23,7 @@ import "../../../CommunitiesPortal/panels" StatusScrollView { id: root + objectName: "communityEditPanelScrollView" property alias name: nameInput.text property alias description: descriptionTextInput.text @@ -56,27 +57,32 @@ StatusScrollView { CommunityNameInput { id: nameInput + input.edit.objectName: "editCommunityNameInput" Layout.fillWidth: true Component.onCompleted: nameInput.input.forceActiveFocus(Qt.MouseFocusReason) } CommunityDescriptionInput { id: descriptionTextInput + input.edit.objectName: "editCommunityDescriptionInput" Layout.fillWidth: true } CommunityLogoPicker { id: logoPicker + objectName: "editCommunityLogoPicker" Layout.fillWidth: true } CommunityBannerPicker { id: bannerPicker + objectName: "editCommunityBannerPicker" Layout.fillWidth: true } CommunityColorPicker { id: colorPicker + objectName: "editCommunityColorPicker" onPick: Global.openPopup(pickColorComponent) Layout.fillWidth: true @@ -100,6 +106,7 @@ StatusScrollView { CommunityTagsPicker { id: tagsPicker + objectName: "editCommunityTagsPicker" onPick: Global.openPopup(pickTagsComponent) Layout.fillWidth: true @@ -141,6 +148,7 @@ StatusScrollView { CommunityIntroMessageInput { id: introMessageTextInput + input.edit.objectName: "editCommunityIntroInput" Layout.fillWidth: true minimumHeight: 108 maximumHeight: 108 @@ -148,6 +156,7 @@ StatusScrollView { CommunityOutroMessageInput { id: outroMessageTextInput + input.edit.objectName: "editCommunityOutroInput" Layout.fillWidth: true } diff --git a/ui/app/AppLayouts/Chat/panels/communities/CommunityOverviewSettingsPanel.qml b/ui/app/AppLayouts/Chat/panels/communities/CommunityOverviewSettingsPanel.qml index 6326123f48..ac9b32ec36 100644 --- a/ui/app/AppLayouts/Chat/panels/communities/CommunityOverviewSettingsPanel.qml +++ b/ui/app/AppLayouts/Chat/panels/communities/CommunityOverviewSettingsPanel.qml @@ -53,6 +53,7 @@ StackLayout { spacing: 16 StatusSmartIdenticon { + objectName: "communityOverviewSettingsPanelIdenticon" name: root.name icon { @@ -75,6 +76,7 @@ StackLayout { StatusBaseText { id: nameText + objectName: "communityOverviewSettingsCommunityName" Layout.fillWidth: true font.pixelSize: 24 color: Theme.palette.directColor1 @@ -84,6 +86,7 @@ StackLayout { StatusBaseText { id: descriptionText + objectName: "communityOverviewSettingsCommunityDescription" Layout.fillWidth: true font.pixelSize: 15 color: Theme.palette.directColor1 @@ -93,6 +96,7 @@ StackLayout { } StatusButton { + objectName: "communityOverviewSettingsEditCommunityButton" visible: root.editable text: qsTr("Edit Community") onClicked: root.currentIndex = 1 diff --git a/ui/app/AppLayouts/Chat/views/CommunitySettingsView.qml b/ui/app/AppLayouts/Chat/views/CommunitySettingsView.qml index 34c00c428f..65c377a4c6 100644 --- a/ui/app/AppLayouts/Chat/views/CommunitySettingsView.qml +++ b/ui/app/AppLayouts/Chat/views/CommunitySettingsView.qml @@ -104,6 +104,7 @@ StatusAppTwoPanelLayout { } StatusBaseText { + objectName: "communitySettingsBackToCommunityButton" Layout.alignment: Qt.AlignHCenter text: "<- " + qsTr("Back to community") color: Theme.palette.baseColor1 diff --git a/ui/app/AppLayouts/CommunitiesPortal/panels/CommunityColorPanel.qml b/ui/app/AppLayouts/CommunitiesPortal/panels/CommunityColorPanel.qml index 540aa9bb2c..918c6ccbce 100644 --- a/ui/app/AppLayouts/CommunitiesPortal/panels/CommunityColorPanel.qml +++ b/ui/app/AppLayouts/CommunitiesPortal/panels/CommunityColorPanel.qml @@ -12,10 +12,11 @@ import StatusQ.Popups 0.1 StatusScrollView { id: root - property string title: qsTr("Community Color") + property string title: qsTr("Community Colour") property var rightButtons: StatusButton { - text: qsTr("Select Community Color") + objectName: "communityColorPanelSelectColorButton" + text: qsTr("Select Community Colour") onClicked: root.accepted() } @@ -58,6 +59,7 @@ StatusScrollView { StatusInput { id: hexInput + input.edit.objectName: "communityColorPanelHexInput" property color newColor: text // TODO: editingFinished() signal instead of this crutch diff --git a/ui/imports/shared/popups/SettingsDirtyToastMessage.qml b/ui/imports/shared/popups/SettingsDirtyToastMessage.qml index 41d3f0d168..9038f38c0d 100644 --- a/ui/imports/shared/popups/SettingsDirtyToastMessage.qml +++ b/ui/imports/shared/popups/SettingsDirtyToastMessage.qml @@ -117,6 +117,7 @@ Rectangle { StatusButton { id: saveChangesButton + objectName: "settingsDirtyToastMessageSaveButton" enabled: root.active && root.saveChangesButtonEnabled text: qsTr("Save changes") onClicked: root.saveChangesClicked()