You are here

function ContactPersonalTest::testPersonalContactFlood in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/modules/contact/src/Tests/ContactPersonalTest.php \Drupal\contact\Tests\ContactPersonalTest::testPersonalContactFlood()

Tests the personal contact form flood protection.

File

core/modules/contact/src/Tests/ContactPersonalTest.php, line 231
Contains \Drupal\contact\Tests\ContactPersonalTest.

Class

ContactPersonalTest
Tests personal contact form functionality.

Namespace

Drupal\contact\Tests

Code

function testPersonalContactFlood() {
  $flood_limit = 3;
  $this
    ->config('contact.settings')
    ->set('flood.limit', $flood_limit)
    ->save();

  // Clear flood table in preparation for flood test and allow other checks to complete.
  db_delete('flood')
    ->execute();
  $num_records_flood = db_query("SELECT COUNT(*) FROM {flood}")
    ->fetchField();
  $this
    ->assertIdentical($num_records_flood, '0', 'Flood table emptied.');
  $this
    ->drupalLogin($this->webUser);

  // Submit contact form with correct values and check flood interval.
  for ($i = 0; $i < $flood_limit; $i++) {
    $this
      ->submitPersonalContact($this->contactUser);
    $this
      ->assertText(t('Your message has been sent.'), 'Message sent.');
  }

  // Submit contact form one over limit.
  $this
    ->submitPersonalContact($this->contactUser);
  $this
    ->assertRaw(t('You cannot send more than %number messages in @interval. Try again later.', array(
    '%number' => $flood_limit,
    '@interval' => \Drupal::service('date.formatter')
      ->formatInterval($this
      ->config('contact.settings')
      ->get('flood.interval')),
  )), 'Normal user denied access to flooded contact form.');

  // Test that the admin user can still access the contact form even though
  // the flood limit was reached.
  $this
    ->drupalLogin($this->adminUser);
  $this
    ->assertNoText('Try again later.', 'Admin user not denied access to flooded contact form.');
}