function ContactPersonalTestCase::testPersonalContactFlood

Tests the personal contact form flood protection.

File

modules/contact/contact.test, line 414

Class

ContactPersonalTestCase
Tests the personal contact form.

Code

function testPersonalContactFlood() {
    $flood_limit = 3;
    variable_set('contact_threshold_limit', $flood_limit);
    // 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->web_user);
    // Submit contact form with correct values and check flood interval.
    for ($i = 0; $i < $flood_limit; $i++) {
        $this->submitPersonalContact($this->contact_user);
        $this->assertText(t('Your message has been sent.'), 'Message sent.');
    }
    // Submit contact form one over limit.
    $this->drupalGet('user/' . $this->contact_user->uid . '/contact');
    $this->assertRaw(t('You cannot send more than %number messages in @interval. Try again later.', array(
        '%number' => $flood_limit,
        '@interval' => format_interval(variable_get('contact_threshold_window', 3600)),
    )), '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->admin_user);
    $this->assertNoText('Try again later.', 'Admin user not denied access to flooded contact form.');
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.