From 9fe894c7796c4b6d60da3bd91d73188f800e676c Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Wed, 12 Aug 2015 13:42:35 +0800 Subject: [PATCH] MDL-50714 mod_forum: Add tests for all groupmodes --- ...roups_in_course_no_groups_in_forum.feature | 60 ++++++ .../tests/behat/no_groups_in_course.feature | 82 ++++++++ .../behat/separate_group_discussions.feature | 148 ++++++++++++-- .../behat/visible_group_discussions.feature | 180 ++++++++++++++++++ 4 files changed, 458 insertions(+), 12 deletions(-) create mode 100644 mod/forum/tests/behat/groups_in_course_no_groups_in_forum.feature create mode 100644 mod/forum/tests/behat/no_groups_in_course.feature create mode 100644 mod/forum/tests/behat/visible_group_discussions.feature diff --git a/mod/forum/tests/behat/groups_in_course_no_groups_in_forum.feature b/mod/forum/tests/behat/groups_in_course_no_groups_in_forum.feature new file mode 100644 index 00000000000..fc7b770f6e4 --- /dev/null +++ b/mod/forum/tests/behat/groups_in_course_no_groups_in_forum.feature @@ -0,0 +1,60 @@ +@mod @mod_forum +Feature: Forums in 'No groups' mode allow posting to All participants for all users + In order to post to a forum in 'No groups' mode, which is in course which has groups + As any user + I need to post + + Background: + Given the following "users" exist: + | username | firstname | lastname | email | + | teacher1 | Teacher | 1 | teacher1@example.com | + | student1 | Student | 1 | student1@example.com | + And the following "courses" exist: + | fullname | shortname | category | + | Course 1 | C1 | 0 | + And the following "course enrolments" exist: + | user | course | role | + | teacher1 | C1 | editingteacher | + | student1 | C1 | student | + And the following "groups" exist: + | name | course | idnumber | + | Group A | C1 | G1 | + | Group B | C1 | G2 | + And the following "group members" exist: + | user | group | + | teacher1 | G1 | + | teacher1 | G2 | + | student1 | G1 | + And the following "activities" exist: + | activity | name | intro | course | idnumber | groupmode | + | forum | Standard forum name | Standard forum description | C1 | nogroups | 0 | + + Scenario: Teacher can post + Given I log in as "teacher1" + And I follow "Course 1" + And I follow "Standard forum name" + And I should not see "Group A" + And I should not see "Group B" + When I click on "Add a new discussion topic" "button" + And I should not see "Group" in the "form" "css_element" + And I set the following fields to these values: + | Subject | Teacher 1 -> Forum | + | Message | Teacher 1 -> Forum | + And I press "Post to forum" + And I wait to be redirected + Then I should see "Teacher 1 -> Forum" + + Scenario: Student can post + Given I log in as "student1" + And I follow "Course 1" + And I follow "Standard forum name" + And I should not see "Group A" + And I should not see "Group B" + When I click on "Add a new discussion topic" "button" + And I should not see "Group" in the "form" "css_element" + And I set the following fields to these values: + | Subject | Student 1 -> Forum | + | Message | Student 1 -> Forum | + And I press "Post to forum" + And I wait to be redirected + Then I should see "Student 1 -> Forum" diff --git a/mod/forum/tests/behat/no_groups_in_course.feature b/mod/forum/tests/behat/no_groups_in_course.feature new file mode 100644 index 00000000000..008d5bb84a0 --- /dev/null +++ b/mod/forum/tests/behat/no_groups_in_course.feature @@ -0,0 +1,82 @@ +@mod @mod_forum +Feature: Posting to forums in a course with no groups behaves correctly + + Background: + Given the following "users" exist: + | username | firstname | lastname | email | + | teacher1 | Teacher | 1 | teacher1@example.com | + | student1 | Student | 1 | student1@example.com | + And the following "courses" exist: + | fullname | shortname | category | + | Course 1 | C1 | 0 | + And the following "course enrolments" exist: + | user | course | role | + | teacher1 | C1 | editingteacher | + | student1 | C1 | student | + And the following "activities" exist: + | activity | name | intro | course | idnumber | groupmode | + | forum | Standard forum | Standard forum description | C1 | nogroups | 0 | + | forum | Visible forum | Visible forum description | C1 | visgroups | 2 | + | forum | Separate forum | Separate forum description | C1 | sepgroups | 1 | + + Scenario: Teachers can post in standard forum + Given I log in as "teacher1" + And I follow "Course 1" + And I follow "Standard forum" + When I click on "Add a new discussion topic" "button" + And I set the following fields to these values: + | Subject | Teacher -> All participants | + | Message | Teacher -> All participants | + And I press "Post to forum" + And I wait to be redirected + Then I should see "Teacher -> All participants" + + Scenario: Teachers can post in forum with separate groups + Given I log in as "teacher1" + And I follow "Course 1" + And I follow "Separate forum" + When I click on "Add a new discussion topic" "button" + And I set the following fields to these values: + | Subject | Teacher -> All participants | + | Message | Teacher -> All participants | + And I press "Post to forum" + And I wait to be redirected + Then I should see "Teacher -> All participants" + + Scenario: Teachers can post in forum with visible groups + Given I log in as "teacher1" + And I follow "Course 1" + And I follow "Visible forum" + When I click on "Add a new discussion topic" "button" + And I set the following fields to these values: + | Subject | Teacher -> All participants | + | Message | Teacher -> All participants | + And I press "Post to forum" + And I wait to be redirected + Then I should see "Teacher -> All participants" + + Scenario: Students can post in standard forum + Given I log in as "student1" + And I follow "Course 1" + And I follow "Standard forum" + When I click on "Add a new discussion topic" "button" + And I set the following fields to these values: + | Subject | Student -> All participants | + | Message | Student -> All participants | + And I press "Post to forum" + And I wait to be redirected + Then I should see "Student -> All participants" + + Scenario: Students cannot post in forum with separate groups + Given I log in as "student1" + And I follow "Course 1" + When I follow "Separate forum" + Then I should see "You do not have permission to add a new discussion topic for all participants." + And I should not see "Add a new discussion topic" + + Scenario: Teachers can post in forum with visible groups + Given I log in as "student1" + And I follow "Course 1" + When I follow "Visible forum" + Then I should see "You do not have permission to add a new discussion topic for all participants." + And I should not see "Add a new discussion topic" diff --git a/mod/forum/tests/behat/separate_group_discussions.feature b/mod/forum/tests/behat/separate_group_discussions.feature index cc0f2982be3..bb6a03fa7c3 100644 --- a/mod/forum/tests/behat/separate_group_discussions.feature +++ b/mod/forum/tests/behat/separate_group_discussions.feature @@ -2,7 +2,7 @@ Feature: Posting to all groups in a separate group discussion is restricted to users with access to all groups In order to post to all groups in a forum with separate groups As a teacher - I need to have the accessallgroups capability or be a member of all of the groups + I need to have the accessallgroups capability Background: Given the following "users" exist: @@ -11,6 +11,7 @@ Feature: Posting to all groups in a separate group discussion is restricted to u | noneditor1 | Non-editing teacher | 1 | noneditor1@example.com | | noneditor2 | Non-editing teacher | 2 | noneditor2@example.com | | student1 | Student | 1 | student1@example.com | + | student2 | Student | 2 | student2@example.com | And the following "courses" exist: | fullname | shortname | category | | Course 1 | C1 | 0 | @@ -20,6 +21,7 @@ Feature: Posting to all groups in a separate group discussion is restricted to u | noneditor1 | C1 | teacher | | noneditor2 | C1 | teacher | | student1 | C1 | student | + | student2 | C1 | student | And the following "groups" exist: | name | course | idnumber | | Group A | C1 | G1 | @@ -35,18 +37,22 @@ Feature: Posting to all groups in a separate group discussion is restricted to u | noneditor2 | G1 | | noneditor2 | G2 | | student1 | G1 | - | student1 | G2 | - And I log in as "teacher1" - And I follow "Course 1" - And I turn editing mode on - And I add a "Forum" to section "1" and I fill the form with: - | Forum name | Standard forum name | - | Forum type | Standard forum for general use | - | Description | Standard forum description | - | Group mode | Separate groups | - And I log out + | student2 | G1 | + | student2 | G2 | + And the following "activities" exist: + | activity | name | intro | course | idnumber | groupmode | + | forum | Standard forum name | Standard forum description | C1 | sepgroups | 1 | - Scenario: Teacher with accessallgroups can post in all groups + Scenario: Teacher with accessallgroups can view all groups + Given I log in as "teacher1" + And I follow "Course 1" + When I follow "Standard forum name" + Then the "Separate groups" select box should contain "All participants" + Then the "Separate groups" select box should contain "Group A" + Then the "Separate groups" select box should contain "Group B" + Then the "Separate groups" select box should contain "Group C" + + Scenario: Teacher with accessallgroups can select any group when posting Given I log in as "teacher1" And I follow "Course 1" And I follow "Standard forum name" @@ -54,6 +60,124 @@ Feature: Posting to all groups in a separate group discussion is restricted to u Then the "Group" select box should contain "All participants" And the "Group" select box should contain "Group A" And the "Group" select box should contain "Group B" + And the "Group" select box should contain "Group C" + + Scenario: Teacher with accessallgroups can post in groups they are a member of + Given I log in as "teacher1" + And I follow "Course 1" + And I follow "Standard forum name" + And I select "Group A" from the "Separate groups" singleselect + When I click on "Add a new discussion topic" "button" + And I set the following fields to these values: + | Subject | Teacher 1 -> Group B | + | Message | Teacher 1 -> Group B | + # Change the group in the post form. + | Group | Group B | + And I press "Post to forum" + And I wait to be redirected + # We should be redirected to the group that we selected when posting. + Then the field "Separate groups" matches value "Group B" + And I should see "Group B" in the "Teacher 1 -> Group B" "table_row" + And I should not see "Group A" in the "Teacher 1 -> Group B" "table_row" + And I should not see "Group C" in the "Teacher 1 -> Group B" "table_row" + # It should also be displayed under All participants + And I select "All participants" from the "Separate groups" singleselect + And I should see "Group B" in the "Teacher 1 -> Group B" "table_row" + And I should not see "Group A" in the "Teacher 1 -> Group B" "table_row" + And I should not see "Group C" in the "Teacher 1 -> Group B" "table_row" + # It should not be displayed in Groups A, or C. + And I select "Group A" from the "Separate groups" singleselect + And I should not see "Teacher 1 -> Group B" + And I select "Group C" from the "Separate groups" singleselect + And I should not see "Teacher 1 -> Group B" + + Scenario: Teacher with accessallgroups can post in groups they are not a member of + Given I log in as "teacher1" + And I follow "Course 1" + And I follow "Standard forum name" + And I select "Group A" from the "Separate groups" singleselect + When I click on "Add a new discussion topic" "button" + And I set the following fields to these values: + | Subject | Teacher 1 -> Group C | + | Message | Teacher 1 -> Group C | + | Group | Group C | + And I press "Post to forum" + And I wait to be redirected + # We should be redirected to the group that we selected when posting. + Then the field "Separate groups" matches value "Group C" + # We redirect to the group posted in automatically. + And I should see "Group C" in the "Teacher 1 -> Group C" "table_row" + And I should not see "Group A" in the "Teacher 1 -> Group C" "table_row" + And I should not see "Group B" in the "Teacher 1 -> Group C" "table_row" + # It should also be displayed under All participants + And I select "All participants" from the "Separate groups" singleselect + And I should see "Group C" in the "Teacher 1 -> Group C" "table_row" + And I should not see "Group A" in the "Teacher 1 -> Group C" "table_row" + And I should not see "Group B" in the "Teacher 1 -> Group C" "table_row" + # It should not be displayed in Groups A, or B. + And I select "Group A" from the "Separate groups" singleselect + And I should not see "Teacher 1 -> Group C" + And I select "Group B" from the "Separate groups" singleselect + And I should not see "Teacher 1 -> Group C" + + Scenario: Students in one group can only post in their group + Given I log in as "student1" + And I follow "Course 1" + When I follow "Standard forum name" + Then I should see "Group A" + And I click on "Add a new discussion topic" "button" + And I should see "Group A" + And I should not see "Group B" + And I should not see "Group C" + And I set the following fields to these values: + | Subject | Student -> B | + | Message | Student -> B | + And I press "Post to forum" + And I wait to be redirected + And I should see "Group A" in the "Student -> B" "table_row" + And I should not see "Group B" in the "Student -> B" "table_row" + + Scenario: Students in multiple group can post in all of their group individually + Given I log in as "student2" + And I follow "Course 1" + When I follow "Standard forum name" + And I select "Group A" from the "Separate groups" singleselect + And I click on "Add a new discussion topic" "button" + And the "Group" select box should not contain "All participants" + And the "Group" select box should contain "Group A" + And the "Group" select box should contain "Group B" + And the "Group" select box should not contain "Group C" + And I set the following fields to these values: + | Subject | Student -> B | + | Message | Student -> B | + | Group | Group B | + And I press "Post to forum" + And I wait to be redirected + # We should be redirected to the group that we selected when posting. + And the field "Separate groups" matches value "Group B" + And I should see "Group B" in the "Student -> B" "table_row" + And I should not see "Group A" in the "Student -> B" "table_row" + And I select "Group A" from the "Separate groups" singleselect + And I should not see "Student -> B" + # Now try posting in Group A (starting at Group B) + And I select "Group B" from the "Separate groups" singleselect + And I click on "Add a new discussion topic" "button" + And the "Group" select box should not contain "All participants" + And the "Group" select box should contain "Group A" + And the "Group" select box should contain "Group B" + And the "Group" select box should not contain "Group C" + And I set the following fields to these values: + | Subject | Student -> A | + | Message | Student -> A | + | Group | Group A | + And I press "Post to forum" + And I wait to be redirected + # We should be redirected to the group that we selected when posting. + And the field "Separate groups" matches value "Group A" + And I should see "Group A" in the "Student -> A" "table_row" + And I should not see "Group B" in the "Student -> A" "table_row" + And I select "Group B" from the "Separate groups" singleselect + And I should not see "Student -> A" Scenario: Teacher in all groups but without accessallgroups can only post in their groups And I log in as "admin" diff --git a/mod/forum/tests/behat/visible_group_discussions.feature b/mod/forum/tests/behat/visible_group_discussions.feature new file mode 100644 index 00000000000..89dc938aa1c --- /dev/null +++ b/mod/forum/tests/behat/visible_group_discussions.feature @@ -0,0 +1,180 @@ +@mod @mod_forum +Feature: Posting to all groups in a visible group discussion is restricted to users with access to all groups + In order to post to all groups in a forum with visible groups + As a teacher + I need to have the accessallgroups capability + + Background: + Given the following "users" exist: + | username | firstname | lastname | email | + | teacher1 | Teacher | 1 | teacher1@example.com | + | student1 | Student | 1 | student1@example.com | + | student2 | Student | 2 | student2@example.com | + And the following "courses" exist: + | fullname | shortname | category | + | Course 1 | C1 | 0 | + And the following "course enrolments" exist: + | user | course | role | + | teacher1 | C1 | editingteacher | + | student1 | C1 | student | + | student2 | C1 | student | + And the following "groups" exist: + | name | course | idnumber | + | Group A | C1 | G1 | + | Group B | C1 | G2 | + | Group C | C1 | G3 | + And the following "group members" exist: + | user | group | + | teacher1 | G1 | + | teacher1 | G2 | + | student1 | G1 | + | student2 | G1 | + | student2 | G2 | + And the following "activities" exist: + | activity | name | intro | course | idnumber | groupmode | + | forum | Standard forum name | Standard forum description | C1 | groups | 2 | + + Scenario: Teacher with accessallgroups can view all groups + Given I log in as "teacher1" + And I follow "Course 1" + When I follow "Standard forum name" + Then the "Visible groups" select box should contain "All participants" + Then the "Visible groups" select box should contain "Group A" + Then the "Visible groups" select box should contain "Group B" + Then the "Visible groups" select box should contain "Group C" + + Scenario: Teacher with accessallgroups can select any group when posting + Given I log in as "teacher1" + And I follow "Course 1" + And I follow "Standard forum name" + When I click on "Add a new discussion topic" "button" + Then the "Group" select box should contain "All participants" + And the "Group" select box should contain "Group A" + And the "Group" select box should contain "Group B" + And the "Group" select box should contain "Group C" + + Scenario: Teacher with accessallgroups can post in groups they are a member of + Given I log in as "teacher1" + And I follow "Course 1" + And I follow "Standard forum name" + And I select "Group A" from the "Visible groups" singleselect + When I click on "Add a new discussion topic" "button" + And I set the following fields to these values: + | Subject | Teacher 1 -> Group B | + | Message | Teacher 1 -> Group B | + # Change the group in the post form. + | Group | Group B | + And I press "Post to forum" + And I wait to be redirected + # We should be redirected to the group that we selected when posting. + Then the field "Visible groups" matches value "Group B" + And I should see "Group B" in the "Teacher 1 -> Group B" "table_row" + And I should not see "Group A" in the "Teacher 1 -> Group B" "table_row" + And I should not see "Group C" in the "Teacher 1 -> Group B" "table_row" + # It should also be displayed under All participants + And I select "All participants" from the "Visible groups" singleselect + And I should see "Group B" in the "Teacher 1 -> Group B" "table_row" + And I should not see "Group A" in the "Teacher 1 -> Group B" "table_row" + And I should not see "Group C" in the "Teacher 1 -> Group B" "table_row" + # It should not be displayed in Groups A, or C. + And I select "Group A" from the "Visible groups" singleselect + And I should not see "Teacher 1 -> Group B" + And I select "Group C" from the "Visible groups" singleselect + And I should not see "Teacher 1 -> Group B" + + Scenario: Teacher with accessallgroups can post in groups they are not a member of + Given I log in as "teacher1" + And I follow "Course 1" + And I follow "Standard forum name" + And I select "Group A" from the "Visible groups" singleselect + When I click on "Add a new discussion topic" "button" + And I set the following fields to these values: + | Subject | Teacher 1 -> Group C | + | Message | Teacher 1 -> Group C | + | Group | Group C | + And I press "Post to forum" + And I wait to be redirected + # We should be redirected to the group that we selected when posting. + Then the field "Visible groups" matches value "Group C" + # We redirect to the group posted in automatically. + And I should see "Group C" in the "Teacher 1 -> Group C" "table_row" + And I should not see "Group A" in the "Teacher 1 -> Group C" "table_row" + And I should not see "Group B" in the "Teacher 1 -> Group C" "table_row" + # It should also be displayed under All participants + And I select "All participants" from the "Visible groups" singleselect + And I should see "Group C" in the "Teacher 1 -> Group C" "table_row" + And I should not see "Group A" in the "Teacher 1 -> Group C" "table_row" + And I should not see "Group B" in the "Teacher 1 -> Group C" "table_row" + # It should not be displayed in Groups A, or B. + And I select "Group A" from the "Visible groups" singleselect + And I should not see "Teacher 1 -> Group C" + And I select "Group B" from the "Visible groups" singleselect + And I should not see "Teacher 1 -> Group C" + + Scenario: Students can view all groups + Given I log in as "student1" + And I follow "Course 1" + When I follow "Standard forum name" + Then the "Visible groups" select box should contain "All participants" + Then the "Visible groups" select box should contain "Group A" + Then the "Visible groups" select box should contain "Group B" + Then the "Visible groups" select box should contain "Group C" + + Scenario: Students in one group can only post in their group + Given I log in as "student1" + And I follow "Course 1" + When I follow "Standard forum name" + Then I should see "Group A" + And I click on "Add a new discussion topic" "button" + And I should see "Group A" + And I should not see "Group B" + And I should not see "Group C" + And I set the following fields to these values: + | Subject | Student -> B | + | Message | Student -> B | + And I press "Post to forum" + And I wait to be redirected + And I should see "Group A" in the "Student -> B" "table_row" + And I should not see "Group B" in the "Student -> B" "table_row" + + Scenario: Students in multiple group can post in all of their group individually + Given I log in as "student2" + And I follow "Course 1" + When I follow "Standard forum name" + And I select "Group A" from the "Visible groups" singleselect + And I click on "Add a new discussion topic" "button" + And the "Group" select box should not contain "All participants" + And the "Group" select box should contain "Group A" + And the "Group" select box should contain "Group B" + And the "Group" select box should not contain "Group C" + And I set the following fields to these values: + | Subject | Student -> B | + | Message | Student -> B | + | Group | Group B | + And I press "Post to forum" + And I wait to be redirected + # We should be redirected to the group that we selected when posting. + And the field "Visible groups" matches value "Group B" + And I should see "Group B" in the "Student -> B" "table_row" + And I should not see "Group A" in the "Student -> B" "table_row" + And I select "Group A" from the "Visible groups" singleselect + And I should not see "Student -> B" + # Now try posting in Group A (starting at Group B) + And I select "Group B" from the "Visible groups" singleselect + And I click on "Add a new discussion topic" "button" + And the "Group" select box should not contain "All participants" + And the "Group" select box should contain "Group A" + And the "Group" select box should contain "Group B" + And the "Group" select box should not contain "Group C" + And I set the following fields to these values: + | Subject | Student -> A | + | Message | Student -> A | + | Group | Group A | + And I press "Post to forum" + And I wait to be redirected + # We should be redirected to the group that we selected when posting. + And the field "Visible groups" matches value "Group A" + And I should see "Group A" in the "Student -> A" "table_row" + And I should not see "Group B" in the "Student -> A" "table_row" + And I select "Group B" from the "Visible groups" singleselect + And I should not see "Student -> A"