+ /**
+ * Do password reset testing for given format and account.
+ *
+ * @param string $format
+ * Serialization format.
+ * @param \Drupal\user\UserInterface $account
+ * Test account.
+ */
+ protected function doTestPasswordReset($format, $account) {
+ $response = $this->passwordRequest([], $format);
+ $this->assertHttpResponseWithMessage($response, 400, 'Missing credentials.name or credentials.mail', $format);
+
+ $response = $this->passwordRequest(['name' => 'dramallama'], $format);
+ $this->assertHttpResponseWithMessage($response, 400, 'Unrecognized username or email address.', $format);
+
+ $response = $this->passwordRequest(['mail' => 'llama@drupal.org'], $format);
+ $this->assertHttpResponseWithMessage($response, 400, 'Unrecognized username or email address.', $format);
+
+ $account
+ ->block()
+ ->save();
+
+ $response = $this->passwordRequest(['name' => $account->getAccountName()], $format);
+ $this->assertHttpResponseWithMessage($response, 400, 'The user has not been activated or is blocked.', $format);
+
+ $response = $this->passwordRequest(['mail' => $account->getEmail()], $format);
+ $this->assertHttpResponseWithMessage($response, 400, 'The user has not been activated or is blocked.', $format);
+
+ $account
+ ->activate()
+ ->save();
+
+ $response = $this->passwordRequest(['name' => $account->getAccountName()], $format);
+ $this->assertEquals(200, $response->getStatusCode());
+ $this->loginFromResetEmail();
+ $this->drupalLogout();
+
+ $response = $this->passwordRequest(['mail' => $account->getEmail()], $format);
+ $this->assertEquals(200, $response->getStatusCode());
+ $this->loginFromResetEmail();
+ $this->drupalLogout();
+ }
+