test(community): add a test that edits a community

Fixes #6756
This commit is contained in:
Jonathan Rainville 2022-08-03 16:16:43 -04:00
parent 1b6fc3b266
commit 44cf440a05
9 changed files with 117 additions and 11 deletions

View File

@ -32,6 +32,22 @@ class CommunityScreenComponents(Enum):
EDIT_CHANNEL_MENU_ITEM = "edit_Channel_StatusMenuItemDelegate" EDIT_CHANNEL_MENU_ITEM = "edit_Channel_StatusMenuItemDelegate"
COMMUNITY_COLUMN_VIEW = "mainWindow_communityColumnView_CommunityColumnView" 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): class CreateOrEditCommunityChannelPopup(Enum):
COMMUNITY_CHANNEL_NAME_INPUT: str = "createOrEditCommunityChannelNameInput_TextEdit" COMMUNITY_CHANNEL_NAME_INPUT: str = "createOrEditCommunityChannelNameInput_TextEdit"
COMMUNITY_CHANNEL_DESCRIPTION_INPUT: str = "createOrEditCommunityChannelDescriptionInput_TextEdit" COMMUNITY_CHANNEL_DESCRIPTION_INPUT: str = "createOrEditCommunityChannelDescriptionInput_TextEdit"
@ -60,10 +76,10 @@ class StatusCommunityScreen:
click_obj_by_name(CreateOrEditCommunityChannelPopup.COMMUNITY_CHANNEL_BUTTON.value) 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 # 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): def verify_channel_name(self, community_channel_name: str):
verify_text_matching(CommunityScreenComponents.CHAT_IDENTIFIER_CHANNEL_NAME.value, communityChannelName) 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) [bannerLoaded, _] = is_loaded_visible_and_enabled(MainUi.MODULE_WARNING_BANNER.value)
if (bannerLoaded): if (bannerLoaded):
time.sleep(5) # Wait for the banner to disappear otherwise the click might land badly 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 # Select all text in the input before typing
wait_for_object_and_type(CreateOrEditCommunityChannelPopup.COMMUNITY_CHANNEL_NAME_INPUT.value, "<Ctrl+a>") wait_for_object_and_type(CreateOrEditCommunityChannelPopup.COMMUNITY_CHANNEL_NAME_INPUT.value, "<Ctrl+a>")
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) click_obj_by_name(CreateOrEditCommunityChannelPopup.COMMUNITY_CHANNEL_BUTTON.value)
time.sleep(0.5) 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, "<Ctrl+a>")
type(CommunitySettingsComponents.EDIT_COMMUNITY_NAME_INPUT.value, new_community_name)
wait_for_object_and_type(CommunitySettingsComponents.EDIT_COMMUNITY_DESCRIPTION_INPUT.value, "<Ctrl+a>")
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, "<Ctrl+a>")
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)

View File

@ -16,3 +16,23 @@ msgDelegate_channelIdentifierNameText_StyledText = {"container": chatMessageList
createOrEditCommunityChannelNameInput_TextEdit = {"container": statusDesktop_mainWindow_overlay, "objectName": "createOrEditCommunityChannelNameInput", "type": "TextEdit", "visible": True} createOrEditCommunityChannelNameInput_TextEdit = {"container": statusDesktop_mainWindow_overlay, "objectName": "createOrEditCommunityChannelNameInput", "type": "TextEdit", "visible": True}
createOrEditCommunityChannelDescriptionInput_TextEdit = {"container": statusDesktop_mainWindow_overlay, "objectName": "createOrEditCommunityChannelDescriptionInput", "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} 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}

View File

@ -29,10 +29,19 @@ def step(context, community_name):
def step(context, community_channel_name, community_channel_description, method): def step(context, community_channel_name, community_channel_description, method):
_statusCommunityScreen.create_community_channel(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|") @When("the admin edits the current community channel to the name |any|")
def step(context, community_channel_name, new_community_channel_name): def step(context, new_community_channel_name):
_statusCommunityScreen.edit_community_channel(community_channel_name, new_community_channel_name) _statusCommunityScreen.edit_community_channel(new_community_channel_name)
@Then("the user lands on the community channel named |any|") @Then("the user lands on the community channel named |any|")
def step(context, community_channel_name): def step(context, community_channel_name):
_statusCommunityScreen.verify_channel_name(community_channel_name) _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()

View File

@ -47,10 +47,21 @@ Feature: Status Desktop community
Then the user lands on the community named myCommunity 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 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 Then the user lands on the community channel named test-channel
When the admin edits a community channel named <community_channel_name> to the name <new_community_channel_name> When the admin edits the current community channel to the name <new_community_channel_name>
Then the user lands on the community channel named <new_community_channel_name> Then the user lands on the community channel named <new_community_channel_name>
Examples: Examples:
| community_channel_name | community_channel_description | new_community_channel_name | | community_channel_name | community_channel_description | new_community_channel_name |
| test-channel | Community channel description tested 1 | new-test-channel | | 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 <new_community_name> and description <new_community_description> and color <new_community_color>
When the admin goes back to the community
Then the user lands on the community named <new_community_name>
Examples:
| new_community_name | new_community_description | new_community_color |
| myCommunityNamedChanged | Cool new description 123 | #ff0000 |

View File

@ -23,6 +23,7 @@ import "../../../CommunitiesPortal/panels"
StatusScrollView { StatusScrollView {
id: root id: root
objectName: "communityEditPanelScrollView"
property alias name: nameInput.text property alias name: nameInput.text
property alias description: descriptionTextInput.text property alias description: descriptionTextInput.text
@ -56,27 +57,32 @@ StatusScrollView {
CommunityNameInput { CommunityNameInput {
id: nameInput id: nameInput
input.edit.objectName: "editCommunityNameInput"
Layout.fillWidth: true Layout.fillWidth: true
Component.onCompleted: nameInput.input.forceActiveFocus(Qt.MouseFocusReason) Component.onCompleted: nameInput.input.forceActiveFocus(Qt.MouseFocusReason)
} }
CommunityDescriptionInput { CommunityDescriptionInput {
id: descriptionTextInput id: descriptionTextInput
input.edit.objectName: "editCommunityDescriptionInput"
Layout.fillWidth: true Layout.fillWidth: true
} }
CommunityLogoPicker { CommunityLogoPicker {
id: logoPicker id: logoPicker
objectName: "editCommunityLogoPicker"
Layout.fillWidth: true Layout.fillWidth: true
} }
CommunityBannerPicker { CommunityBannerPicker {
id: bannerPicker id: bannerPicker
objectName: "editCommunityBannerPicker"
Layout.fillWidth: true Layout.fillWidth: true
} }
CommunityColorPicker { CommunityColorPicker {
id: colorPicker id: colorPicker
objectName: "editCommunityColorPicker"
onPick: Global.openPopup(pickColorComponent) onPick: Global.openPopup(pickColorComponent)
Layout.fillWidth: true Layout.fillWidth: true
@ -100,6 +106,7 @@ StatusScrollView {
CommunityTagsPicker { CommunityTagsPicker {
id: tagsPicker id: tagsPicker
objectName: "editCommunityTagsPicker"
onPick: Global.openPopup(pickTagsComponent) onPick: Global.openPopup(pickTagsComponent)
Layout.fillWidth: true Layout.fillWidth: true
@ -141,6 +148,7 @@ StatusScrollView {
CommunityIntroMessageInput { CommunityIntroMessageInput {
id: introMessageTextInput id: introMessageTextInput
input.edit.objectName: "editCommunityIntroInput"
Layout.fillWidth: true Layout.fillWidth: true
minimumHeight: 108 minimumHeight: 108
maximumHeight: 108 maximumHeight: 108
@ -148,6 +156,7 @@ StatusScrollView {
CommunityOutroMessageInput { CommunityOutroMessageInput {
id: outroMessageTextInput id: outroMessageTextInput
input.edit.objectName: "editCommunityOutroInput"
Layout.fillWidth: true Layout.fillWidth: true
} }

View File

@ -53,6 +53,7 @@ StackLayout {
spacing: 16 spacing: 16
StatusSmartIdenticon { StatusSmartIdenticon {
objectName: "communityOverviewSettingsPanelIdenticon"
name: root.name name: root.name
icon { icon {
@ -75,6 +76,7 @@ StackLayout {
StatusBaseText { StatusBaseText {
id: nameText id: nameText
objectName: "communityOverviewSettingsCommunityName"
Layout.fillWidth: true Layout.fillWidth: true
font.pixelSize: 24 font.pixelSize: 24
color: Theme.palette.directColor1 color: Theme.palette.directColor1
@ -84,6 +86,7 @@ StackLayout {
StatusBaseText { StatusBaseText {
id: descriptionText id: descriptionText
objectName: "communityOverviewSettingsCommunityDescription"
Layout.fillWidth: true Layout.fillWidth: true
font.pixelSize: 15 font.pixelSize: 15
color: Theme.palette.directColor1 color: Theme.palette.directColor1
@ -93,6 +96,7 @@ StackLayout {
} }
StatusButton { StatusButton {
objectName: "communityOverviewSettingsEditCommunityButton"
visible: root.editable visible: root.editable
text: qsTr("Edit Community") text: qsTr("Edit Community")
onClicked: root.currentIndex = 1 onClicked: root.currentIndex = 1

View File

@ -104,6 +104,7 @@ StatusAppTwoPanelLayout {
} }
StatusBaseText { StatusBaseText {
objectName: "communitySettingsBackToCommunityButton"
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignHCenter
text: "<- " + qsTr("Back to community") text: "<- " + qsTr("Back to community")
color: Theme.palette.baseColor1 color: Theme.palette.baseColor1

View File

@ -12,10 +12,11 @@ import StatusQ.Popups 0.1
StatusScrollView { StatusScrollView {
id: root id: root
property string title: qsTr("Community Color") property string title: qsTr("Community Colour")
property var rightButtons: StatusButton { property var rightButtons: StatusButton {
text: qsTr("Select Community Color") objectName: "communityColorPanelSelectColorButton"
text: qsTr("Select Community Colour")
onClicked: root.accepted() onClicked: root.accepted()
} }
@ -58,6 +59,7 @@ StatusScrollView {
StatusInput { StatusInput {
id: hexInput id: hexInput
input.edit.objectName: "communityColorPanelHexInput"
property color newColor: text property color newColor: text
// TODO: editingFinished() signal instead of this crutch // TODO: editingFinished() signal instead of this crutch

View File

@ -117,6 +117,7 @@ Rectangle {
StatusButton { StatusButton {
id: saveChangesButton id: saveChangesButton
objectName: "settingsDirtyToastMessageSaveButton"
enabled: root.active && root.saveChangesButtonEnabled enabled: root.active && root.saveChangesButtonEnabled
text: qsTr("Save changes") text: qsTr("Save changes")
onClicked: root.saveChangesClicked() onClicked: root.saveChangesClicked()