--- /dev/null
+/**
+ * Logs into Drupal as the given user.
+ *
+ * @param {object} settings
+ * Settings object
+ * @param {string} settings.name
+ * The user name.
+ * @param {string} settings.password
+ * The user password.
+ * @param {array} [settings.permissions=[]]
+ * The list of permissions granted for the user.
+ * @param {function} callback
+ * A callback which will be called, when the creating the use is finished.
+ * @return {object}
+ * The drupalCreateUser command.
+ */
+exports.command = function drupalCreateUser(
+ { name, password, permissions = [] },
+ callback,
+) {
+ const self = this;
+
+ let role;
+ this.perform((client, done) => {
+ if (permissions) {
+ client.drupalCreateRole({ permissions, name: null }, newRole => {
+ role = newRole;
+ done();
+ });
+ } else {
+ done();
+ }
+ }).drupalLoginAsAdmin(() => {
+ this.drupalRelativeURL('/admin/people/create')
+ .setValue('input[name="name"]', name)
+ .setValue('input[name="pass[pass1]"]', password)
+ .setValue('input[name="pass[pass2]"]', password)
+ .perform((client, done) => {
+ if (role) {
+ client.click(`input[name="roles[${role}]`, () => {
+ done();
+ });
+ } else {
+ done();
+ }
+ })
+ .submitForm('#user-register-form')
+ .assert.containsText(
+ '.messages',
+ 'Created a new user account',
+ `User "${name}" was created succesfully.`,
+ );
+ });
+
+ if (typeof callback === 'function') {
+ callback.call(self);
+ }
+
+ return this;
+};