From 385280469aeba9913c978a1d0b6917c3b87092cd Mon Sep 17 00:00:00 2001 From: Davo Smith Date: Tue, 28 Nov 2017 10:16:25 +0000 Subject: [PATCH] MDL-57892 report_outline: add behat tests --- .../tests/behat/behat_report_outline.php | 68 ++++++++++++++ report/outline/tests/behat/filter.feature | 94 +++++++++++++++++++ 2 files changed, 162 insertions(+) create mode 100644 report/outline/tests/behat/behat_report_outline.php create mode 100644 report/outline/tests/behat/filter.feature diff --git a/report/outline/tests/behat/behat_report_outline.php b/report/outline/tests/behat/behat_report_outline.php new file mode 100644 index 00000000000..01bad208b1f --- /dev/null +++ b/report/outline/tests/behat/behat_report_outline.php @@ -0,0 +1,68 @@ +. + +/** + * Custom behat functions + * + * @package report_outline + * @copyright 2017 Davo Smith, Synergy Learning + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +require_once(__DIR__ . '/../../../../lib/behat/behat_base.php'); + +/** + * Class behat_report_outline custom Behat steps for report_outline. + */ +class behat_report_outline extends behat_base { + /** + * This is a horrible, horrible hack, but it is not clear how else a range of log entries can be produced to test the + * filtering of the log entries. + * + * @Given /^the log timestamp for "(?P(?:[^"]|\\")*)" and "(?P(?:[^"]|\\")*)" is set to "(?P(?:[^"]|\\")*)"$/ + * @param string $username + * @param string $activityidnumber + * @param string $date + */ + public function the_log_timestamp_for_and_is_set_to($username, $activityidnumber, $date) { + global $DB; + + // Get the name of the log table. + $lm = get_log_manager(); + $readers = $lm->get_readers('\\core\\log\\sql_internal_table_reader'); + $reader = reset($readers); + $table = $reader->get_internal_log_table_name(); + + // Find the log entry. + $cmrec = $DB->get_record('course_modules', ['idnumber' => $activityidnumber], '*', MUST_EXIST); + $modname = $DB->get_field('modules', 'name', ['id' => $cmrec->module], MUST_EXIST); + $userid = $DB->get_field('user', 'id', ['username' => $username], MUST_EXIST); + + $cond = [ + 'userid' => $userid, + 'component' => 'mod_'.$modname, + 'target' => 'course_module', + 'action' => 'viewed', + 'contextinstanceid' => $cmrec->id, + ]; + $logentries = $DB->get_records($table, $cond, 'timecreated DESC', 'id', 0, 1); + $logentry = reset($logentries); + + // Update the timecreated for the entry. + $timestamp = strtotime($date); + $DB->set_field($table, 'timecreated', $timestamp, ['id' => $logentry->id]); + } +} \ No newline at end of file diff --git a/report/outline/tests/behat/filter.feature b/report/outline/tests/behat/filter.feature new file mode 100644 index 00000000000..7c974440d2d --- /dev/null +++ b/report/outline/tests/behat/filter.feature @@ -0,0 +1,94 @@ +@report @report_outline +Feature: Filter an outline report + In order to ensure the outline report works as expected + As a teacher + I need to log in as a teacher and view the outline report with various filters in place + + Background: + Given the following "courses" exist: + | fullname | shortname | format | + | Course 1 | C1 | topics | + And 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 "course enrolments" exist: + | user | course | role | + | teacher1 | C1 | editingteacher | + | student1 | C1 | student | + | student2 | C1 | student | + When I log in as "admin" + And I am on "Course 1" course homepage with editing mode on + And I add a "Forum" to section "1" and I fill the form with: + | Forum name | Forum name | + | Description | Forum description | + | ID number| FORUM01 | + And I add a "Book" to section "1" and I fill the form with: + | Name | Book name | + | Description | Book description | + | ID number| BOOK01 | + + Scenario: Filter the outline report by start date + Given I navigate to "Manage log stores" node in "Site administration > Plugins > Logging" + And "Enable" "link" should exist in the "Legacy log" "table_row" + And "Disable" "link" should exist in the "Standard log" "table_row" + And I log out + And I log in as "student1" + And I am on "Course 1" course homepage + And I follow "Forum name" + And the log timestamp for "student1" and "FORUM01" is set to "12 June 2017 12:49:00" + And I am on "Course 1" course homepage + And I follow "Book name" + And the log timestamp for "student1" and "BOOK01" is set to "10 June 2017 14:01:00" + And I log out + And I log in as "student2" + And I am on "Course 1" course homepage + And I follow "Book name" + And the log timestamp for "student2" and "BOOK01" is set to "14 June 2017 11:02:00" + And I log out + And I log in as "admin" + And I am on "Course 1" course homepage + And I navigate to "Activity report" node in "Course administration > Reports" + And I should see "2 views by 2 users" in the "Book name" "table_row" + And I should see "1 views by 1 users" in the "Forum name" "table_row" + When I set the following fields to these values: + | filterstartdate[enabled] | 1 | + | filterstartdate[day] | 12 | + | filterstartdate[month] | June | + | filterstartdate[year] | 2017 | + And I press "Filter" + Then I should see "1 views by 1 users" in the "Book name" "table_row" + And I should see "1 views by 1 users" in the "Forum name" "table_row" + + Scenario: Filter the outline report by end date + Given I navigate to "Manage log stores" node in "Site administration > Plugins > Logging" + And "Enable" "link" should exist in the "Legacy log" "table_row" + And "Disable" "link" should exist in the "Standard log" "table_row" + And I log out + And I log in as "student1" + And I am on "Course 1" course homepage + And I follow "Forum name" + And the log timestamp for "student1" and "FORUM01" is set to "12 June 2017 12:49:00" + And I am on "Course 1" course homepage + And I follow "Book name" + And the log timestamp for "student1" and "BOOK01" is set to "10 June 2017 14:01:00" + And I log out + And I log in as "student2" + And I am on "Course 1" course homepage + And I follow "Book name" + And the log timestamp for "student2" and "BOOK01" is set to "14 June 2017 11:02:00" + And I log out + And I log in as "admin" + And I am on "Course 1" course homepage + And I navigate to "Activity report" node in "Course administration > Reports" + And I should see "2 views by 2 users" in the "Book name" "table_row" + And I should see "1 views by 1 users" in the "Forum name" "table_row" + When I set the following fields to these values: + | filterenddate[enabled] | 1 | + | filterenddate[day] | 11 | + | filterenddate[month] | June | + | filterenddate[year] | 2017 | + And I press "Filter" + Then I should see "1 views by 1 users" in the "Book name" "table_row" + And I should not see "views by" in the "Forum name" "table_row"