MOBILE-3320 behat: Test activity deep links

main
Noel De Martin 2021-06-15 18:32:31 +02:00
parent 561206b785
commit dd7db580e7
2 changed files with 77 additions and 0 deletions

View File

@ -532,6 +532,24 @@ class behat_app extends behat_base {
$this->wait_for_pending_js();
}
/**
* Replace arguments from the content in the given activity field.
*
* @Given /^I replace the arguments in "([^"]+)" "([^"]+)"$/
*/
public function i_replace_arguments_in_the_activity(string $idnumber, string $field) {
global $DB;
$coursemodule = $DB->get_record('course_modules', compact('idnumber'));
$module = $DB->get_record('modules', ['id' => $coursemodule->module]);
$activity = $DB->get_record($module->name, ['id' => $coursemodule->instance]);
$DB->update_record($module->name, [
'id' => $coursemodule->instance,
$field => $this->replace_arguments($activity->{$field}),
]);
}
/**
* Opens a custom link.
*
@ -889,4 +907,31 @@ class behat_app extends behat_base {
return str_replace('$WWWROOT', $CFG->behat_wwwroot, $text);
}
/**
* Replace arguments with the format "${activity:field}" from a string, where "activity" is
* the idnumber of an activity and "field" is the activity's field to get replacement from.
*
* At the moment, the only field supported is "cmid", the id of the course module for this activity.
*
* @param string $text Original text.
* @return string Text with arguments replaced.
*/
protected function replace_arguments(string $text): string {
global $DB;
preg_match_all("/\\$\\{([^:}]+):([^}]+)\\}/", $text, $matches);
foreach ($matches[0] as $index => $match) {
switch ($matches[2][$index]) {
case 'cmid':
$coursemodule = $DB->get_record('course_modules', ['idnumber' => $matches[1][$index]]);
$text = str_replace($match, $coursemodule->id, $text);
break;
}
}
return $text;
}
}

View File

@ -0,0 +1,32 @@
@app @javascript
Feature: It navigates properly within activities.
Background:
Given the following "users" exist:
| username |
| student |
And the following "courses" exist:
| fullname | shortname |
| Course 1 | C1 |
And the following "course enrolments" exist:
| user | course | role |
| student | C1 | student |
And the following "activities" exist:
| activity | idnumber | course | name | intro | content |
| label | label | C1 | Label | Label description | - |
| page | page | C1 | Page | - | <a href="/mod/label/view.php?id=${label:cmid}">Go to label</a> |
And I replace the arguments in "page" "content"
Scenario: Navigates using deep links
When I enter the app
And I log in as "student"
And I press "Course 1" in the app
And I press "Page" in the app
And I press "Go to label" in the app
Then I should find "Label description" in the app
When I press the back button in the app
Then I should find "Go to label" in the app
When I press the back button in the app
Then I should find "Label description" in the app