From f45275bb1a741a6e5bee786223a43d75a02f9296 Mon Sep 17 00:00:00 2001 From: MishkaRogachev Date: Fri, 19 Aug 2022 16:08:25 +0400 Subject: [PATCH] test(community): refactor and improve categary relates test cases --- test/ui-test/src/drivers/SquishDriver.py | 16 +++--- .../src/screens/StatusCommunityScreen.py | 56 +++++++++++++------ .../shared/steps/communitySteps.py | 8 +-- .../tst_communityFlows/test.feature | 15 ++--- .../popups/community/CreateCategoryPopup.qml | 1 + 5 files changed, 61 insertions(+), 35 deletions(-) diff --git a/test/ui-test/src/drivers/SquishDriver.py b/test/ui-test/src/drivers/SquishDriver.py index 8c7d13d170..7a51609268 100755 --- a/test/ui-test/src/drivers/SquishDriver.py +++ b/test/ui-test/src/drivers/SquishDriver.py @@ -203,7 +203,7 @@ def click_link(objName: str, link: str): if point[0] != -1 and point[1] != -1: squish.mouseClick(getattr(names, objName), point[0], point[1], 0, squish.Qt.LeftButton) -# Global properties for getting link / hovered handler management: +# Global properties for getting link / hovered handler management: _expected_link = None _link_found = False @@ -220,13 +220,13 @@ def _find_link(objName: str, link: str): _expected_link = link _link_found = False obj = squish.waitForObject(objName) - + # Inject desired function into main module: sys.modules['__main__']._handle_link_hovered = _handle_link_hovered squish.installSignalHandler(obj, "linkHovered(QString)", "_handle_link_hovered") - - # Start moving the cursor: - squish.mouseMove(obj, int(obj.x), int(obj.y)) + + # Start moving the cursor: + squish.mouseMove(obj, int(obj.x), int(obj.y)) end_x = obj.x + obj.width end_y = obj.y + obj.height y = int(obj.y) @@ -252,11 +252,11 @@ def wait_for_object_focused_and_type(obj_name: str, text: str): try: squish.waitForObject(getattr(names, obj_name)) squish.nativeType(text) - squish.snooze(1) + squish.snooze(1) return True except LookupError: - return False - + return False + # NOTE: It is a specific method for ListView components. # It positions the mouse in the middle of the list_obj and scrolls until reaching the item at specific index is visible. # Return True if it has been possible to scroll until item index, False if timeout or index not found. diff --git a/test/ui-test/src/screens/StatusCommunityScreen.py b/test/ui-test/src/screens/StatusCommunityScreen.py index eb90769d21..06942cfb09 100644 --- a/test/ui-test/src/screens/StatusCommunityScreen.py +++ b/test/ui-test/src/screens/StatusCommunityScreen.py @@ -94,9 +94,6 @@ class StatusCommunityScreen: return False, None def _toggle_channels_in_category_popop(self, community_channel_names: str): - # Wait for the channel list - time.sleep(0.5) - for channel_name in community_channel_names.split(", "): [loaded, channel] = self._find_channel_in_category_popup(channel_name) if loaded: @@ -104,12 +101,28 @@ class StatusCommunityScreen: else: verify_failure("Can't find channel " + channel_name) - def open_edit_channel_popup(self): + def _get_checked_channel_names_in_category_popup(self): + listView = get_obj(CreateOrEditCommunityCategoryPopup.COMMUNITY_CATEGORY_LIST.value) + result = [] + + for index in range(listView.count): + listItem = listView.itemAtIndex(index) + if (listItem.checked): + result.append(listItem.objectName.toLower()) + return result + + def _open_edit_channel_popup(self): StatusMainScreen.wait_for_banner_to_disappear() click_obj_by_name(CommunityScreenComponents.CHAT_MORE_OPTIONS_BUTTON.value) click_obj_by_name(CommunityScreenComponents.EDIT_CHANNEL_MENU_ITEM.value) + def _open_category_edit_popup(self, category): + # For some reason it clicks on a first channel in category instead of category + click_obj(category.parent) + right_click_obj(category.parent) + click_obj_by_name(CommunityScreenComponents.COMMUNITY_EDIT_CATEGORY_MENU_ITEM.value) + def verify_community_name(self, communityName: str): verify_text_matching(CommunityScreenComponents.COMMUNITY_HEADER_NAME_TEXT.value, communityName) @@ -133,7 +146,7 @@ class StatusCommunityScreen: verify_text_matching(CommunityScreenComponents.CHAT_IDENTIFIER_CHANNEL_NAME.value, community_channel_name) def edit_community_channel(self, new_community_channel_name: str): - self.open_edit_channel_popup() + self._open_edit_channel_popup() # Select all text in the input before typing wait_for_object_and_type(CreateOrEditCommunityChannelPopup.COMMUNITY_CHANNEL_NAME_INPUT.value, "") @@ -157,11 +170,9 @@ class StatusCommunityScreen: def edit_community_category(self, community_category_name, new_community_category_name, community_channel_names): [loaded, category] = self._find_category_in_chat(community_category_name) - verify(loaded, "Can't find category " + community_category_name) + verify(loaded, "Finding category: " + community_category_name) - # For some reason it clicks on a first channel in category instead of category - squish.mouseClick(category.parent, squish.Qt.RightButton) - click_obj_by_name(CommunityScreenComponents.COMMUNITY_EDIT_CATEGORY_MENU_ITEM.value) + self._open_category_edit_popup(category) # Select all text in the input before typing wait_for_object_and_type(CreateOrEditCommunityCategoryPopup.COMMUNITY_CATEGORY_NAME_INPUT.value, "") @@ -171,21 +182,34 @@ class StatusCommunityScreen: def delete_community_category(self, community_category_name): [loaded, category] = self._find_category_in_chat(community_category_name) - verify(loaded, "Can't find category " + community_category_name) + verify(loaded, "Finding category: " + community_category_name) # For some reason it clicks on a first channel in category instead of category - squish.mouseClick(category.parent, squish.Qt.RightButton) + click_obj(category.parent) + right_click_obj(category.parent) click_obj_by_name(CommunityScreenComponents.COMMUNITY_DELETE_CATEGORY_MENU_ITEM.value) click_obj_by_name(CommunityScreenComponents.COMMUNITY_CONFIRM_DELETE_CATEGORY_BUTTON.value) - def verify_category_name(self, community_category_name): - [result, _] = self._find_category_in_chat(community_category_name) - verify(result, "Can't find category " + community_category_name) - def verify_category_name_missing(self, community_category_name): [result, _] = self._find_category_in_chat(community_category_name) verify_false(result, "Category " + community_category_name + " still exist") + def verify_category_contains_channels(self, community_category_name, community_channel_names): + [loaded, category] = self._find_category_in_chat(community_category_name) + verify(loaded, "Finding category: " + community_category_name) + + self._open_category_edit_popup(category) + + checked_channel_names = self._get_checked_channel_names_in_category_popup() + split = community_channel_names.split(", ") + for channel_name in split: + if channel_name in checked_channel_names: + split.remove(channel_name) + else: + verify_failure("Channel " + channel_name + " should be checked in category " + community_category_name) + comma = ", " + verify(len(split) == 0, "Channel(s) " + comma.join(split) + " should not be checked in category " + community_category_name) + 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) @@ -232,7 +256,7 @@ class StatusCommunityScreen: verify_equals(chatListObj.statusChatListItems.count, int(count_to_check)) def search_and_change_community_channel_emoji(self, emoji_description: str): - self.open_edit_channel_popup() + self._open_edit_channel_popup() click_obj_by_name(CreateOrEditCommunityChannelPopup.EMOJI_BUTTON.value) 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 43f9d32485..48bb0e5e30 100644 --- a/test/ui-test/testSuites/suite_status/shared/steps/communitySteps.py +++ b/test/ui-test/testSuites/suite_status/shared/steps/communitySteps.py @@ -49,14 +49,14 @@ def step(context, community_category_name, new_community_category_name, communit def step(context, community_category_name): _statusCommunityScreen.delete_community_category(community_category_name) -@Then("the category named |any| is created") -def step(context, community_category_name): - _statusCommunityScreen.verify_category_name(community_category_name) - @Then("the category named |any| is missing") def step(context, community_category_name): _statusCommunityScreen.verify_category_name_missing(community_category_name) +@Then("the category named |any| has channels |any|") +def step(context, community_category_name, community_channel_names): + _statusCommunityScreen.verify_category_contains_channels(community_category_name, community_channel_names) + @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) 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 c3cac5dc80..e506b41f29 100644 --- a/test/ui-test/testSuites/suite_status/tst_communityFlows/test.feature +++ b/test/ui-test/testSuites/suite_status/tst_communityFlows/test.feature @@ -70,7 +70,7 @@ Feature: Status Desktop community Then the user lands on the community named myCommunity When the admin creates a community channel named , with description Some description with the method And the admin creates a community category named , with channels and with the method - Then the category named is created + Then the category named has channels Examples: | community_channel_name | community_category_name | method | @@ -83,17 +83,18 @@ 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 And the admin creates a community category named test-category, with channels test-channel and with the method bottom_menu - Then the category named test-category is created - When the admin edits category named test-category to the name new-test-category and channels general, test-channel - Then the category named test-category is missing - And the category named new-test-category is created + Then the category named test-category has channels test-channel + When the admin edits category named test-category to the name new-test-category and channels test-channel, general + Then the category named new-test-category has channels general + And the category named test-category is missing Scenario: Admin deletes a community category 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 creates a community category named test-category, with channels general and with the method bottom_menu - Then the category named test-category is created + When the admin creates a community channel named test-channel, with description My description with the method bottom_menu + And the admin creates a community category named test-category, with channels test-channel and with the method bottom_menu + Then the category named test-category has channels test-channel When the admin deletes category named test-category Then the category named test-category is missing diff --git a/ui/app/AppLayouts/Chat/popups/community/CreateCategoryPopup.qml b/ui/app/AppLayouts/Chat/popups/community/CreateCategoryPopup.qml index ca3fa507f7..386248f70c 100644 --- a/ui/app/AppLayouts/Chat/popups/community/CreateCategoryPopup.qml +++ b/ui/app/AppLayouts/Chat/popups/community/CreateCategoryPopup.qml @@ -119,6 +119,7 @@ StatusModal { interactive: false delegate: StatusListItem { + readonly property bool checked: channelItemCheckbox.checked objectName: model.name anchors.horizontalCenter: parent.horizontalCenter visible: model.type != Constants.chatType.unknown