From 7c64a411d76a168c038839aa0d21241ae9a19cb9 Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Wed, 21 Dec 2022 09:41:48 +0800 Subject: [PATCH] MDL-76733 mod_assign: Tidy up availability behat tests This feature had lots of small issues and it made sense to fix it whilst investigating a query: * most of the steps do not require JavaScript * it uses the UI to set an admin setting, for every scenario: ** only 3-4 of the scenarios actually test that setting ** it is very slow to do it his way when we have a generator step we can use * we create two assignments in the Background, but each test only uses one of them * we create the assignments in the Background with a generator, but update them to modify various settings in each Scenario using the UI when we should just create one assignment for each test and set it up correctly for that Scenario --- .../tests/behat/set_availability.feature | 271 ++++++++---------- 1 file changed, 123 insertions(+), 148 deletions(-) diff --git a/mod/assign/tests/behat/set_availability.feature b/mod/assign/tests/behat/set_availability.feature index f16b409a1ca..1bffb6c6a11 100644 --- a/mod/assign/tests/behat/set_availability.feature +++ b/mod/assign/tests/behat/set_availability.feature @@ -1,14 +1,11 @@ -@mod @mod_assign @javascript +@mod @mod_assign Feature: Set availability dates for an assignment - In order to control when a student can upload an assignment - As a teacher - I need be able to set availability dates for an assignment + In order to control when a student can upload an assignment + As a teacher + I need be able to set availability dates for an assignment Background: - Given I log in as "admin" - And I set the following administration settings values: - | Enable timed assignments | 1 | - And the following "courses" exist: + Given the following "courses" exist: | fullname | shortname | | Course 1 | C1 | And the following "users" exist: @@ -21,72 +18,53 @@ Feature: Set availability dates for an assignment | teacher1 | C1 | editingteacher | | student1 | C1 | student | | student2 | C1 | student | - And the following "activity" exists: - | activity | assign | - | course | C1 | - | name | Assignment name | - | description | Assignment description | - | assignsubmission_file_enabled | 1 | - | assignsubmission_file_maxfiles | 1 | - | assignsubmission_file_maxsizebytes | 0 | - | submissiondrafts | 0 | - Given the following "activity" exists: - | activity | assign | - | course | C1 | - | name | Test late assignment with time limit | - | assignsubmission_onlinetext_enabled | 1 | - | assignsubmission_file_enabled | 1 | - | assignsubmission_file_maxfiles | 1 | - | assignsubmission_file_maxsizebytes | 1000000 | - | submissiondrafts | 0 | - | allowsubmissionsfromdate_enabled | 0 | - | duedate_enabled | 0 | - | cutoffdate_enabled | 0 | - | gradingduedate_enabled | 0 | Scenario: Student cannot submit an assignment prior to the 'allow submissions from' date - Given I am on the "Assignment name" Activity page logged in as teacher1 - And I navigate to "Settings" in current page administration - And I follow "Expand all" - # Set 'Allow submissions from' to tomorrow at noon. - And I set the field "Allow submissions from" to "##tomorrow noon##" - And I press "Save and return to course" - And I log out - + Given the following "activity" exists: + | activity | assign | + | course | C1 | + | name | Assignment name | + | assignsubmission_file_enabled | 1 | + | assignsubmission_file_maxfiles | 1 | + | assignsubmission_file_maxsizebytes | 0 | + | submissiondrafts | 0 | + | allowsubmissionsfromdate | ##tomorrow noon## | When I am on the "Assignment name" Activity page logged in as student1 Then "Add submission" "button" should not exist And the activity date in "Assignment name" should contain "Opens:" And the activity date in "Assignment name" should contain "##tomorrow noon##%A, %d %B %Y, %I:%M##" + @javascript Scenario: Student can see the assignment's due date in the course calendar - Given I am on the "Assignment name" Activity page logged in as teacher1 - And I navigate to "Settings" in current page administration - And I follow "Expand all" - # Set 'Allow submissions from' to the first day of this month at noon. - And I set the field "Allow submissions from" to "##first day of this month noon##" - # Set 'Due date' to the second day of this month at noon. - And I set the field "Due date" to "##first day of this month noon +24 hours##" - And I press "Save and return to course" - And I turn editing mode on - And I add the "Calendar" block - And I log out - - And I am on the "C1" Course page logged in as student1 - When I hover over day "2" of this month in the mini-calendar block + Given the following "activity" exists: + | activity | assign | + | course | C1 | + | name | Assignment name | + | assignsubmission_file_enabled | 1 | + | assignsubmission_file_maxfiles | 1 | + | assignsubmission_file_maxsizebytes | 0 | + | submissiondrafts | 0 | + | allowsubmissionsfromdate | ##first day of this month noon## | + | duedate | ##first day of this month noon +24 hours## | + And the following "blocks" exist: + | blockname | contextlevel | reference | pagetypepattern | defaultregion | + | calendar_month | Course | C1 | course-view-* | site-post | + When I am on the "C1" Course page logged in as student1 + And I hover over day "2" of this month in the mini-calendar block Then I should see "Assignment name is due" - @_file_upload + @javascript @_file_upload Scenario: Student can submit an assignment before the due date - Given I am on the "Assignment name" Activity page logged in as teacher1 - And I navigate to "Settings" in current page administration - And I follow "Expand all" - # Set 'Allow submissions from' to now. - And I set the field "Allow submissions from" to "##now##" - # Set 'Due date' to 2 days 5 hours 30 minutes in the future. - And I set the field "Due date" to "##+2 days 5 hours 30 minutes##" - And I press "Save and return to course" - And I log out - + Given the following "activity" exists: + | activity | assign | + | course | C1 | + | name | Assignment name | + | assignsubmission_file_enabled | 1 | + | assignsubmission_file_maxfiles | 1 | + | assignsubmission_file_maxsizebytes | 0 | + | submissiondrafts | 0 | + | allowsubmissionsfromdate | ##now## | + | duedate | ##+2 days 5 hours 30 minutes## | When I am on the "Assignment name" Activity page logged in as student1 And the activity date in "Assignment name" should contain "Due:" And the activity date in "Assignment name" should contain "##+2 days 5 hours 30 minutes##%A, %d %B %Y##" @@ -94,40 +72,37 @@ Feature: Set availability dates for an assignment And "Add submission" "button" should exist And I press "Add submission" And I upload "lib/tests/fixtures/empty.txt" file to "File submissions" filemanager - When I press "Save changes" - Then I should see "Submitted for grading" in the "Submission status" "table_row" - And I log out + And I press "Save changes" + And I should see "Submitted for grading" in the "Submission status" "table_row" And I am on the "Assignment name" Activity page logged in as teacher1 And I should see "1" in the "Submitted" "table_row" And I follow "View all submissions" And I should see "Submitted for grading" in the "Student 1" "table_row" - @_file_upload + @javascript @_file_upload Scenario: Student can submit an assignment after the due date and the submission is marked as late - Given I am on the "Assignment name" Activity page logged in as teacher1 - And I navigate to "Settings" in current page administration - And I follow "Expand all" - # Set 'Allow submissions from' to 3 days ago. - And I set the field "Allow submissions from" to "##3 days ago##" - # Set 'Due date' to 2 days 5 hours 30 minutes ago. - And I set the field "Due date" to "##2 days 5 hours 30 minutes ago##" - # Set 'Cut-off date' to tomorrow at noon. - And I set the field "Cut-off date" to "##tomorrow noon##" - And I press "Save and return to course" - And I log out - - And I am on the "Assignment name" Activity page logged in as student1 + Given the following "activity" exists: + | activity | assign | + | course | C1 | + | name | Assignment name | + | assignsubmission_file_enabled | 1 | + | assignsubmission_file_maxfiles | 1 | + | assignsubmission_file_maxsizebytes | 0 | + | submissiondrafts | 0 | + | allowsubmissionsfromdate | ##3 days ago## | + | duedate | ##2 days 5 hours 30 minutes ago## | + | cutoffdate | ##tomorrow noon## | + When I am on the "Assignment name" Activity page logged in as student1 And the activity date in "Assignment name" should contain "Due:" And the activity date in "Assignment name" should contain "##2 days 5 hours 30 minutes ago##%A, %d %B %Y##" And I should see "Assignment is overdue by: 2 days 5 hours" in the "Time remaining" "table_row" And "Add submission" "button" should exist And I press "Add submission" And I upload "lib/tests/fixtures/empty.txt" file to "File submissions" filemanager - When I press "Save changes" - Then I should see "Submitted for grading" in the "Submission status" "table_row" + And I press "Save changes" + And I should see "Submitted for grading" in the "Submission status" "table_row" And I should see "Assignment was submitted 2 days 5 hours late" in the "Time remaining" "table_row" - And I log out And I am on the "Assignment name" Activity page logged in as teacher1 And I should see "1" in the "Submitted" "table_row" @@ -135,23 +110,20 @@ Feature: Set availability dates for an assignment And I should see "Submitted for grading" in the "Student 1" "table_row" And I should see "2 days 5 hours late" in the "Student 1" "table_row" - @_file_upload + @javascript @_file_upload Scenario: Student can submit an assignment before the time limit runs out - Given I log in as "admin" - And I change the window size to "large" - And I set the following administration settings values: - | Enable timed assignments | 1 | - And I log out - And I am on the "Assignment name" Activity page logged in as teacher1 - And I navigate to "Settings" in current page administration - And I follow "Expand all" - # Set 'Time limit' to 20 seconds. - And I set the field "timelimit[enabled]" to "1" - And I set the field "timelimit[number]" to "20" - And I set the field "timelimit[timeunit]" to "seconds" - And I press "Save and return to course" - And I log out - + Given the following config values are set as admin: + | config | value | plugin | + | enabletimelimit | 1 | assign | + And the following "activity" exists: + | activity | assign | + | course | C1 | + | name | Assignment name | + | assignsubmission_file_enabled | 1 | + | assignsubmission_file_maxfiles | 1 | + | assignsubmission_file_maxsizebytes | 0 | + | submissiondrafts | 0 | + | timelimit | 20 | When I am on the "Assignment name" Activity page logged in as student1 And I should see "20 secs" in the "Time limit" "table_row" And "Begin assignment" "link" should exist @@ -160,57 +132,51 @@ Feature: Set availability dates for an assignment And "Begin assignment" "button" should exist And I press "Begin assignment" And I upload "lib/tests/fixtures/empty.txt" file to "File submissions" filemanager - When I press "Save changes" - Then I should see "Submitted for grading" in the "Submission status" "table_row" + And I press "Save changes" + And I should see "Submitted for grading" in the "Submission status" "table_row" And I should see "secs under the time limit" in the "Time remaining" "table_row" - @_file_upload + @javascript @_file_upload Scenario: Assignment with time limit and due date shows how late assignment is submitted relative to due date - Given I log in as "admin" - And I change the window size to "large" - And I set the following administration settings values: - | Enable timed assignments | 1 | - And I log out - And I am on the "Assignment name" Activity page logged in as teacher1 - And I navigate to "Settings" in current page administration - And I follow "Expand all" - # Set 'Time limit' to 5 seconds. - And I set the field "timelimit[enabled]" to "1" - And I set the field "timelimit[number]" to "5" - And I set the field "timelimit[timeunit]" to "seconds" - # Set 'Due date' to 2 days 5 hours 30 minutes ago. - And I set the field "Due date" to "##2 days 5 hours 30 minutes ago##" - And I press "Save and display" - And I should see "5 secs" in the "Time limit" "table_row" - And I log out - + Given the following config values are set as admin: + | config | value | plugin | + | enabletimelimit | 1 | assign | + And the following "activity" exists: + | activity | assign | + | course | C1 | + | name | Assignment name | + | assignsubmission_file_enabled | 1 | + | assignsubmission_file_maxfiles | 1 | + | assignsubmission_file_maxsizebytes | 0 | + | submissiondrafts | 0 | + | timelimit | 2 | + | duedate | ##2 days 5 hours 30 minutes ago## | When I am on the "Assignment name" Activity page logged in as student1 + And I should see "2 secs" in the "Time limit" "table_row" And "Begin assignment" "link" should exist And I follow "Begin assignment" And I wait "1" seconds And "Begin assignment" "button" should exist And I press "Begin assignment" - And I wait "5" seconds + And I wait "2" seconds And I upload "lib/tests/fixtures/empty.txt" file to "File submissions" filemanager - When I press "Save changes" - Then I should see "Assignment was submitted 2 days 5 hours late" in the "Time remaining" "table_row" + And I press "Save changes" + And I should see "Assignment was submitted 2 days 5 hours late" in the "Time remaining" "table_row" Scenario: Student cannot submit an assignment after the cut-off date - Given I am on the "Assignment name" Activity page logged in as teacher1 - And I navigate to "Settings" in current page administration - And I follow "Expand all" - # Set 'Allow submissions from' to 3 days ago. - And I set the field "Allow submissions from" to "##3 days ago##" - # Set 'Due date' to 2 days 5 hours 30 minutes ago. - And I set the field "Due date" to "##2 days 5 hours 30 minutes ago##" - # Set 'Cut-off date' to yesterday at noon. - And I set the field "Cut-off date" to "##yesterday noon##" - And I press "Save and return to course" - And I log out - + Given the following "activity" exists: + | activity | assign | + | course | C1 | + | name | Assignment name | + | assignsubmission_file_enabled | 1 | + | assignsubmission_file_maxfiles | 1 | + | assignsubmission_file_maxsizebytes | 0 | + | submissiondrafts | 0 | + | allowsubmissionsfromdate | ##3 days ago## | + | duedate | ##2 days 5 hours 30 minutes ago## | + | cutoffdate | ##yesterday noon## | When I am on the "Assignment name" Activity page logged in as student1 Then "Add submission" "button" should not exist - And I log out And I am on the "Assignment name" Activity page logged in as teacher1 And I should see "0" in the "Submitted" "table_row" @@ -218,18 +184,27 @@ Feature: Set availability dates for an assignment And I should see "No submission" in the "Student 1" "table_row" And I should see "Assignment is overdue by: 2 days 5 hours" in the "Student 1" "table_row" - @_file_upload - Scenario: Late submission will be calculated only when the student starts the assignment - Given I am on the "Test late assignment with time limit" Activity page logged in as admin - And I navigate to "Settings" in current page administration - And I follow "Expand all" - # Set 'Time limit' to 5 seconds. - And I set the field "timelimit[enabled]" to "1" - And I set the field "timelimit[number]" to "5" - And I set the field "timelimit[timeunit]" to "seconds" - And I press "Save and return to course" - When I am on the "Test late assignment with time limit" Activity page logged in as student1 - And I wait "6" seconds + @javascript @_file_upload + Scenario: Late submission will be calculated only when the student starts the assignm + Given the following config values are set as admin: + | config | value | plugin | + | enabletimelimit | 1 | assign | + And the following "activity" exists: + | activity | assign | + | course | C1 | + | name | Assignment name | + | assignsubmission_file_enabled | 1 | + | assignsubmission_file_maxfiles | 1 | + | assignsubmission_file_maxsizebytes | 0 | + | submissiondrafts | 0 | + | timelimit | 2 | + | allowsubmissionsfromdate_enabled | 0 | + | duedate_enabled | 0 | + | cutoffdate_enabled | 0 | + | gradingduedate_enabled | 0 | + + When I am on the "Assignment name" Activity page logged in as student1 + And I wait "3" seconds And I click on "Begin assignment" "link" And I click on "Begin assignment" "button" And I upload "lib/tests/fixtures/empty.txt" file to "File submissions" filemanager