From 8c933bde87e5a284f809f55a105c8b88883194c9 Mon Sep 17 00:00:00 2001 From: Amaia Anabitarte Date: Tue, 21 May 2019 17:10:35 +0200 Subject: [PATCH 1/2] MDL-65336 core_message: Behat tests for mute/unmute conversations --- .../tests/behat/mute_conversations.feature | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 message/tests/behat/mute_conversations.feature diff --git a/message/tests/behat/mute_conversations.feature b/message/tests/behat/mute_conversations.feature new file mode 100644 index 00000000000..4a40e60e9c2 --- /dev/null +++ b/message/tests/behat/mute_conversations.feature @@ -0,0 +1,94 @@ +@core @core_message @javascript +Feature: Mute and unmute conversations + In order to manage my conversations + As a user + I need to be able to mute and unmute conversations + + Background: + Given the following "courses" exist: + | fullname | shortname | category | groupmode | + | Course 1 | C1 | 0 | 1 | + And the following "users" exist: + | username | firstname | lastname | email | + | student1 | Student | 1 | student1@example.com | + | student2 | Student | 2 | student2@example.com | + And the following "course enrolments" exist: + | user | course | role | + | student1 | C1 | student | + | student2 | C1 | student | + And the following "groups" exist: + | name | course | idnumber | enablemessaging | + | Group 1 | C1 | G1 | 1 | + And the following "group members" exist: + | user | group | course | + | student1 | G1 | C1 | + | student2 | G1 | C1 | + And the following config values are set as admin: + | messaging | 1 | + And the following "private messages" exist: + | user | contact | message | + | student1 | student2 | Hi! | + + Scenario: Mute a group conversation + Given I log in as "student1" + When I open messaging + And I open the "Group" conversations list + Then "Group 1" "group_message" should exist + And "muted" "icon_container" in the "Group 1" "group_message" should not be visible + And I select "Group 1" conversation in messaging + And "muted" "icon_container" in the "Group 1" "group_message_header" should not be visible + And I open contact menu + And I click on "Mute" "link" in the "[data-region='header-container']" "css_element" + And "muted" "icon_container" in the "Group 1" "group_message_header" should be visible + And I go back in "view-conversation" message drawer + And "muted" "icon_container" in the "Group 1" "group_message" should be visible + + Scenario: Mute a private conversation + When I log in as "student1" + And I open messaging + Then I should see "Private" + And I open the "Private" conversations list + And I should see "Student 2" + And "muted" "icon_container" in the "Student 2" "group_message" should not be visible + And I select "Student 2" conversation in messaging + And "muted" "icon_container" in the "[data-action='view-contact']" "css_element" should not be visible + And I open contact menu + And I click on "Mute" "link" in the "[data-region='header-container']" "css_element" + And "muted" "icon_container" in the "[data-action='view-contact']" "css_element" should be visible + And I go back in "view-conversation" message drawer + And "muted" "icon_container" in the "Student 2" "group_message" should be visible + + Scenario: Unmute a group conversation + Given the following "muted group conversations" exist: + | user | group | course | + | student1 | G1 | C1 | + When I log in as "student1" + And I open messaging + And I open the "Group" conversations list + Then "Group 1" "group_message" should exist + And "muted" "icon_container" in the "Group 1" "group_message" should be visible + And I select "Group 1" conversation in messaging + And "muted" "icon_container" in the "Group 1" "group_message_header" should be visible + And I open contact menu + And I click on "Unmute" "link" in the "[data-region='header-container']" "css_element" + And "muted" "icon_container" in the "Group 1" "group_message_header" should not be visible + And I go back in "view-conversation" message drawer + And "muted" "icon_container" in the "Group 1" "group_message" should not be visible + + Scenario: Unmute a private conversation + Given the following "muted private conversations" exist: + | user | contact | + | student1 | student2 | + When I log in as "student1" + And I open messaging + Then I should see "Private" + And I open the "Private" conversations list + And I should see "Student 2" + And "muted" "icon_container" in the "Student 2" "group_message" should be visible + And I select "Student 2" conversation in messaging + And "muted" "icon_container" in the "[data-action='view-contact']" "css_element" should be visible + And I open contact menu + And I click on "Unmute" "link" in the "[data-region='header-container']" "css_element" + And "muted" "icon_container" in the "[data-action='view-contact']" "css_element" should not be visible + And I go back in "view-conversation" message drawer + And "muted" "icon_container" in the "Student 2" "group_message" should not be visible From f0e8f0a5b8f2d21728a3e120c85ceca88b47313b Mon Sep 17 00:00:00 2001 From: Amaia Anabitarte Date: Tue, 21 May 2019 17:15:26 +0200 Subject: [PATCH 2/2] MDL-65336 core_message: New muted conversation generator and selectors --- lib/behat/classes/partial_named_selector.php | 7 ++- lib/tests/behat/behat_data_generators.php | 48 ++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/lib/behat/classes/partial_named_selector.php b/lib/behat/classes/partial_named_selector.php index b632895b649..3f8c0531cec 100644 --- a/lib/behat/classes/partial_named_selector.php +++ b/lib/behat/classes/partial_named_selector.php @@ -73,6 +73,7 @@ class behat_partial_named_selector extends \Behat\Mink\Selector\PartialNamedSele 'xpath_element' => 'xpath_element', 'form_row' => 'form_row', 'group_message_header' => 'group_message_header', + 'group_message' => 'group_message', ); /** @@ -96,6 +97,7 @@ class behat_partial_named_selector extends \Behat\Mink\Selector\PartialNamedSele 'group_message_tab' => 'group_message_tab', 'group_message_list_area' => 'group_message_list_area', 'group_message_message_content' => 'group_message_message_content', + 'icon_container' => 'icon_container', 'icon' => 'icon', 'link' => 'link', 'link_or_button' => 'link_or_button', @@ -162,7 +164,7 @@ XPATH .//*[@data-region='message-drawer' and contains(., %locator%)]//div[@data-region='content-message-container'] XPATH , 'group_message_header' => << << << << << array('user', 'group', 'message'), 'switchids' => array('user' => 'userid', 'group' => 'groupid') ), + 'muted group conversations' => array( + 'datagenerator' => 'mute_group_conversations', + 'required' => array('user', 'group', 'course'), + 'switchids' => array('user' => 'userid', 'group' => 'groupid', 'course' => 'courseid') + ), + 'muted private conversations' => array( + 'datagenerator' => 'mute_private_conversations', + 'required' => array('user', 'contact'), + 'switchids' => array('user' => 'userid', 'contact' => 'contactid') + ), 'language customisations' => array( 'datagenerator' => 'customlang', 'required' => array('component', 'stringid', 'value'), @@ -1032,4 +1042,42 @@ class behat_data_generators extends behat_base { } \core_message\api::set_favourite_conversation($conversationid, $data['userid']); } + + /** + * Mute an existing group conversation for user + * + * @param array $data + * @return void + */ + protected function process_mute_group_conversations(array $data) { + if (groups_is_member($data['groupid'], $data['userid'])) { + $context = context_course::instance($data['courseid']); + $conversation = \core_message\api::get_conversation_by_area( + 'core_group', + 'groups', + $data['groupid'], + $context->id + ); + if ($conversation) { + \core_message\api::mute_conversation($data['userid'], $conversation->id); + } + } + } + + /** + * Mute a private conversation for user + * + * @param array $data + * @return void + */ + protected function process_mute_private_conversations(array $data) { + if (!$conversationid = \core_message\api::get_conversation_between_users([$data['userid'], $data['contactid']])) { + $conversation = \core_message\api::create_conversation( + \core_message\api::MESSAGE_CONVERSATION_TYPE_INDIVIDUAL, + [$data['userid'], $data['contactid']] + ); + $conversationid = $conversation->id; + } + \core_message\api::mute_conversation($data['userid'], $conversationid); + } }