diff --git a/mod/h5pactivity/tests/behat/grading_attempts.feature b/mod/h5pactivity/tests/behat/grading_attempts.feature index 14f9e7a8f7d..15d532b469b 100644 --- a/mod/h5pactivity/tests/behat/grading_attempts.feature +++ b/mod/h5pactivity/tests/behat/grading_attempts.feature @@ -24,26 +24,18 @@ Feature: Change grading options in an H5P activity | course | C1 | | name | Awesome H5P package | | packagefilepath | h5p/tests/fixtures/multiple-choice-2-6.h5p | - And I am on the "Awesome H5P package" "h5pactivity activity" page logged in as student1 - And I switch to "h5p-player" class iframe - And I switch to "h5p-iframe" class iframe - And I click on "Wrong one" "text" in the ".h5p-question-content" "css_element" - And I click on "Check" "button" in the ".h5p-question-buttons" "css_element" - And I click on "Retry" "button" in the ".h5p-question-buttons" "css_element" - And I click on "Correct one" "text" in the ".h5p-question-content" "css_element" - And I click on "Check" "button" in the ".h5p-question-buttons" "css_element" - And I switch to the main frame - # H5P does not allow to Retry if the user checks the correct answer, we need to refresh the page. - And I reload the page - And I switch to "h5p-player" class iframe - And I switch to "h5p-iframe" class iframe - And I click on "Wrong one" "text" in the ".h5p-question-content" "css_element" - And I click on "Check" "button" in the ".h5p-question-buttons" "css_element" - And I switch to the main frame + And the following "mod_h5pactivity > attempts" exist: + | user | h5pactivity | attempt | interactiontype | rawscore | maxscore | duration | completion | success | + | student1 | Awesome H5P package | 1 | choice | 0 | 1 | 4 | 1 | 0 | + | student1 | Awesome H5P package | 2 | choice | 1 | 1 | 4 | 1 | 1 | + | student1 | Awesome H5P package | 3 | choice | 0 | 1 | 4 | 1 | 0 | @javascript Scenario: Default grading is max attempt grade - Given I am on the "Course 1" course page logged in as teacher1 + Given I am on the "Awesome H5P package" "h5pactivity activity editing" page logged in as teacher1 + And I expand all fieldsets + And the field "Grading method" matches value "Highest grade" + And I click on "Save and return to course" "button" When I navigate to "View > User report" in the course gradebook And I set the field "Select all or one user" to "Student 1" Then the following should exist in the "user-grade" table: @@ -63,7 +55,7 @@ Feature: Change grading options in an H5P activity | Awesome H5P package | 0.00 | 0.00 % | @javascript - Scenario: Change setting to first attempt + Scenario: Change setting to last attempt Given I am on the "Awesome H5P package" "h5pactivity activity editing" page logged in as teacher1 When I set the following fields to these values: | Grading method | Last attempt | diff --git a/mod/h5pactivity/tests/behat/sending_attempt.feature b/mod/h5pactivity/tests/behat/sending_attempt.feature index 29400702477..c810e4fda22 100644 --- a/mod/h5pactivity/tests/behat/sending_attempt.feature +++ b/mod/h5pactivity/tests/behat/sending_attempt.feature @@ -2,7 +2,7 @@ Feature: Do a H5P attempt In order to let students do a H5P attempt As a teacher - I need to list students attempts on the log report + I need to list students attempts on various reports Background: Given the following "users" exist: @@ -24,6 +24,7 @@ Feature: Do a H5P attempt | course | C1 | | name | Awesome H5P package | | packagefilepath | h5p/tests/fixtures/multiple-choice-2-6.h5p | + | grademethod | 2 | Scenario: View an H5P as a teacher When I am on the "Awesome H5P package" "h5pactivity activity" page logged in as teacher1 @@ -31,7 +32,7 @@ Feature: Do a H5P attempt Then I should see "This content is displayed in preview mode" @javascript - Scenario: To an attempts and check on course log report + Scenario: Do an attempt and check on course log report When I am on the "Awesome H5P package" "h5pactivity activity" page logged in as student1 And I wait until the page is ready And I should not see "This content is displayed in preview mode" @@ -46,3 +47,45 @@ Feature: Do a H5P attempt And I follow "Student 1" Then I follow "Today's logs" And I should see "xAPI statement received" + + @javascript + Scenario: Do various attempts and check them with the attempts and user grades reports + Given I am on the "Awesome H5P package" "h5pactivity activity" page logged in as student1 + And I wait until the page is ready + And I should not see "This content is displayed in preview mode" + And I switch to "h5p-player" class iframe + And I switch to "h5p-iframe" class iframe + And I click on "Wrong one" "text" in the ".h5p-question-content" "css_element" + And I click on "Check" "button" in the ".h5p-question-buttons" "css_element" + And I click on "Retry" "button" in the ".h5p-question-buttons" "css_element" + # We need to wait 1 second here because, in very quick environments, the 2nd + # attempts happen too close to the 1st one and it's not sent properly. See MDL-76010. + And I wait "1" seconds + And I click on "Correct one" "text" in the ".h5p-question-content" "css_element" + And I click on "Check" "button" in the ".h5p-question-buttons" "css_element" + # H5P does not allow to Retry if the user checks the correct answer, we need to refresh the page. + And I switch to the main frame + And I reload the page + And I switch to "h5p-player" class iframe + And I switch to "h5p-iframe" class iframe + # Because of the steps above, the 2nd and 3rd attempts are enough "separated" and we don't + # need to add any wait here. + And I click on "Wrong one" "text" in the ".h5p-question-content" "css_element" + And I click on "Check" "button" in the ".h5p-question-buttons" "css_element" + And I click on "Retry" "button" in the ".h5p-question-buttons" "css_element" + # Again, the wait between 3rd and 4th attempt, to separate them a little bit. + And I wait "1" seconds + And I click on "Correct one" "text" in the ".h5p-question-content" "css_element" + And I click on "Check" "button" in the ".h5p-question-buttons" "css_element" + And I switch to the main frame + When I navigate to "Attempts report" in current page administration + And "1" row "Score" column of "table" table should contain "0" + And "2" row "Score" column of "table" table should contain "1" + And "3" row "Score" column of "table" table should contain "0" + And "4" row "Score" column of "table" table should contain "1" + And I am on the "Course 1" course page logged in as teacher1 + And I navigate to "View > User report" in the course gradebook + And I set the field "Select all or one user" to "Student 1" + Then the following should exist in the "user-grade" table: + | Grade item | Grade | Percentage | + | Awesome H5P package | 50.00 | 50.00 % | diff --git a/mod/h5pactivity/tests/generator/lib.php b/mod/h5pactivity/tests/generator/lib.php index 161d59caba8..212da1599b3 100644 --- a/mod/h5pactivity/tests/generator/lib.php +++ b/mod/h5pactivity/tests/generator/lib.php @@ -191,6 +191,7 @@ class mod_h5pactivity_generator extends testing_module_generator { * @param array $data the attempts data array */ public function create_attempt(array $data): void { + global $DB; if (!isset($data['h5pactivityid'])) { throw new coding_exception('Must specify h5pactivityid when creating a H5P attempt.'); @@ -218,6 +219,12 @@ class mod_h5pactivity_generator extends testing_module_generator { } $this->insert_statement($data, $this->$method($data)); + + // If the activity has tracking enabled, try to recalculate grades. + $activity = $DB->get_record('h5pactivity', ['id' => $data['h5pactivityid']]); + if ($activity->enabletracking) { + h5pactivity_update_grades($activity, $data['userid']); + } } /**