behat currently logged in user

behat currently logged in user

by Joey Andres -
Number of replies: 1

Consider the following step in a scenario:

Given I log in as "student1"


Supposed I create a custom behat test that depends on the user role.

**
* @Given /^I register iclicker id "(?P<iclickerid>(?:[^"]|\\")*)" at course "(?P<course>(?:[^"]|\\")*)" and activity "(?P<activity>(?:[^"]|\\")*)"$/
*/
public function register_iclicker_to_current_user($iclicker, $course, $activity) {
global $USER;
// Have something like, as a student.
if ($USER->username === "admin") {
return array(
new Given("I am on homepage"),
new Given("I follow \"$course\""),
new Given("I follow \"$activity\""),
new Given('I press "iclickerregistration/registrationbuttontext" lang string'),
new Given("I set the field \"clicker-id\" to \"$iclicker\""),
new Given('I press "iclickerregistration/registrationbuttontext" lang string'),
new Given('I should see "iclickerregistration/registrationsuccess" lang string'),
new Given('I wait to be redirected'),
new Given("I am on homepage")
);
} else {
return array(
new Given("I am on homepage"),
new Given("I follow \"$course\""),
new Given("I follow \"$activity\""),
new Given("I set the field \"clicker-id\" to \"$iclicker\""),
new Given('I press "iclickerregistration/registrationbuttontext" lang string'),
new Given('I should see "iclickerregistration/registrationsuccess." lang string'),
new Given('I wait to be redirected'),
new Given("I am on homepage")
);
}
}
The problem is $USER always points to admin. (This is more evident if you do print_object($USER)). Anyway, is there a reliable way of getting the user role of the current logged in user.
Average of ratings: -
In reply to Joey Andres

Re: behat currently logged in user

by Tim Hunt -
Picture of Core developers Picture of Documentation writers Picture of Particularly helpful Moodlers Picture of Peer reviewers Picture of Plugin developers

That seems like a poor example. But the if and the else have identical code inside, so there is no need for the if statement.

More generally, you should not do things like this. Instead

  1. There should be one scenario which tests registering a clicker through the UI.
  2. (Or possibly two scenarios if the UI really is different for students and admins.)
  3. Then, for use in other scenarios, you should define a step
    Given clicker "abc123" is assigned to "Student 1" which sets that up directly in the database.

There are two reasons for that: it is much faster, and you only want to test each bit of functionality once.