'Interface functionality', 'description' => 'Verify mailhandler administrative functionality for adding, editing, cloning and deleting mailboxes.', 'group' => 'Mailhandler', ); } function setUp() { // Enable the exmaple module. parent::setUp('mailhandler'); // Use the current testcase temp directory to store the testing maildir. $this->tempdir = variable_get('file_directory_temp', 'sites/default/files'); } /** * Verify the functionality of the administrative interface. */ function testMailhandlerListAddEditDelete() { // Create and login user. $account = $this->drupalCreateUser( array( 'administer mailhandler', 'administer filters', )); $this->drupalLogin($account); // Verify Mailhandler list page shows 'No mailboxes' message. $this->drupalGet('admin/content/mailhandler'); $this->assertText(t('No mailboxes have been defined.')); // Create a mailbox using the Mailbox Add form. Put a value for every form // field and try to avoid using defaults, to make sure they are all saved // and populated again in the form. $mailbox = array( 'mail' => $this->randomName() . '@simpletest.tld', 'mailto' => $this->randomName() . '@simpletest.tld', 'folder' => $this->tempdir, 'imap' => 1, 'domain' => $this->randomName() . '.simpletest.tld', 'port' => rand(1, 1000), 'name' => $this->randomName(), 'pass' => $this->randomName(), 'extraimap' => $this->randomName(), 'mime' => 'TEXT/PLAIN,TEXT/HTML', 'security' => 1, 'replies' => 0, 'fromheader' => $this->randomName(), 'commands' => $this->randomName(), 'sigseparator' => $this->randomName(), 'delete_after_read' => 0, 'enabled' => 0, 'format' => '2', 'authentication' => 'mailhandler_default', ); $this->drupalPost('admin/content/mailhandler/add', $mailbox, t('Save mailbox')); $this->assertRaw(t('Mailbox %mailbox added.', array('%mailbox' => $mailbox['mail']))); $mailbox['mid'] = db_result(db_query( "SELECT mh.mid FROM {mailhandler} mh WHERE mail = '%s'", $mailbox['mail'] )); // Edit the mailbox and verify the fields. $this->drupalGet('admin/content/mailhandler/edit/' . $mailbox['mid']); $this->assertMailboxFields($mailbox); // Change the email and save the form. $mailbox['mail'] = $this->randomName() . '@simpletest.tld'; // 'mid' is not a valid form field, submit a valid $edit array for Post. $edit = $mailbox; unset($edit['mid']); $this->drupalPost(NULL, $edit, t('Save mailbox')); $this->assertRaw(t('Mailbox %mailbox updated.', array('%mailbox' => $mailbox['mail']))); // Clone this mailbox, fields must be copied from original mailbox. $this->drupalGet('admin/content/mailhandler/clone/' . $mailbox['mid']); $this->assertMailboxFields($mailbox); // Change new mailbox mail and save. $clonebox = $mailbox; $clonebox['mail'] = $this->randomName() . '@simpletest.tld'; // 'mid' is not a valid form field, submit a valid $edit array for Post. $edit = $clonebox; unset($edit['mid']); $this->drupalPost(NULL, $edit, t('Save mailbox')); $this->assertRaw(t('Mailbox %mailbox added.', array('%mailbox' => $clonebox['mail']))); $clonebox['mid'] = db_result(db_query( "SELECT mh.mid FROM {mailhandler} mh WHERE mail = '%s'", $clonebox['mail'] )); // Edit the cloned mailbox and verify the fields. $this->drupalGet('admin/content/mailhandler/edit/' . $clonebox['mid']); $this->assertMailboxFields($clonebox); // Verify Mailhandler list page shows two defined mailboxes. $this->drupalGet('admin/content/mailhandler'); $this->assertLinkByHref('mailto:' . $mailbox['mail']); $this->assertLinkByHref('mailto:' . $clonebox['mail']); // Remove this mailbox. Verify CSRF protection with confirm form. $this->drupalGet('admin/content/mailhandler/delete/' . $mailbox['mid']); $this->assertRaw(t('Do you wish to delete mailbox %mailbox?', array('%mailbox' => $mailbox['mail']))); $this->drupalPost(NULL, array(), t('Delete')); $this->assertRaw(t('Mailbox %mailbox deleted', array('%mailbox' => $mailbox['mail']))); // Remove the cloned mailbox. Verify CSRF protection with confirm form. $this->drupalGet('admin/content/mailhandler/delete/' . $clonebox['mid']); $this->assertRaw(t('Do you wish to delete mailbox %mailbox?', array('%mailbox' => $clonebox['mail']))); $this->drupalPost(NULL, array(), t('Delete')); $this->assertRaw(t('Mailbox %mailbox deleted', array('%mailbox' => $clonebox['mail']))); // Verify Mailhandler list page shows 'No mailboxes' message. $this->drupalGet('admin/content/mailhandler'); $this->assertText(t('No mailboxes have been defined.')); // Try to edit a missing mailbox. // @todo: assert it is not working $this->drupalGet('admin/content/mailhandler/edit/' . $mailbox['mid']); $this->assertResponse(404, t('Edit missing mailbox returns Not found.')); // Try to clone a missing mailbox. // @todo: assert it is not working $this->drupalGet('admin/content/mailhandler/clone/' . $mailbox['mid']); $this->assertResponse(404, t('Clone missing mailbox returns Not found.')); // Try to delete a missing mailbox. // @todo: assert it is not working $this->drupalGet('admin/content/mailhandler/delete/' . $mailbox['mid']); $this->assertResponse(404, t('Delete missing mailbox returns Not found.')); } /** * Verify the mailbox settings are shown in the edit form. * * @param $mailbox * array with mailbox settings to verify in the edit form. */ function assertMailboxFields($mailbox) { // Do not use a foreach with $mailbox to make sure all fields have their // value. Any missing value will fail here. $this->assertFieldByName('mail', $mailbox['mail']); $this->assertFieldByName('mailto', $mailbox['mailto']); $this->assertFieldByName('folder', $mailbox['folder']); $this->assertFieldByName('imap', $mailbox['imap']); $this->assertFieldByName('imap', $mailbox['imap']); $this->assertFieldByName('domain', $mailbox['domain']); $this->assertFieldByName('port', $mailbox['port']); $this->assertFieldByName('name', $mailbox['name']); $this->assertFieldByName('pass', $mailbox['pass']); $this->assertFieldByName('extraimap', $mailbox['extraimap']); $this->assertFieldByName('mime', $mailbox['mime']); $this->assertFieldByName('security', $mailbox['security']); $this->assertFieldByName('replies', $mailbox['replies']); $this->assertFieldByName('fromheader', $mailbox['fromheader']); $this->assertFieldByName('commands', $mailbox['commands']); $this->assertFieldByName('sigseparator', $mailbox['sigseparator']); $this->assertFieldByName('delete_after_read', $mailbox['delete_after_read']); $this->assertFieldByName('enabled', $mailbox['enabled']); $this->assertFieldByName('format', $mailbox['format']); $this->assertFieldByName('authentication', $mailbox['authentication']); } /** * Verify the functionality of the administrative interface when the user has * no privileges to edit filter formats. Even if default format for all the * mailboxes is FILTER_FORMAT_DEFAULT, it should not end up using this format, * but any available format, preventing the filtering operation from working * when this Drupal setting is changed. */ function testMailhandlerDefaultFilterFormat() { // Create and login user. $account = $this->drupalCreateUser( array( 'administer mailhandler', )); $this->drupalLogin($account); // Create a mailbox using the Mailbox Add form. Put a value for every form // field and try to avoid using defaults, to make sure they are all saved // and populated again in the form. The email format will not be available // as this user has not 'administer filters' privileges. $mailbox = array( 'mail' => $this->randomName() . '@simpletest.tld', 'mailto' => $this->randomName() . '@simpletest.tld', 'folder' => variable_get('file_directory_temp', 'sites/default/files'), 'imap' => 1, 'domain' => $this->randomName() . '.simpletest.tld', 'port' => rand(1, 1000), 'name' => $this->randomName(), 'pass' => $this->randomName(), 'extraimap' => $this->randomName(), 'mime' => 'TEXT/PLAIN,TEXT/HTML', 'security' => 1, 'replies' => 0, 'fromheader' => $this->randomName(), 'commands' => $this->randomName(), 'sigseparator' => $this->randomName(), 'delete_after_read' => 0, 'enabled' => 0, 'authentication' => 'mailhandler_default', ); $this->drupalPost('admin/content/mailhandler/add', $mailbox, t('Save mailbox')); $this->assertRaw(t('Mailbox %mailbox added.', array('%mailbox' => $mailbox['mail']))); // Format for the mailbox must be set to any available for this user, so no // no longer will hang the FILTER_FORMAT_DEFAULT value. $format = db_result(db_query( "SELECT mh.format FROM {mailhandler} mh WHERE mail = '%s'", $mailbox['mail'] )); $this->assertNotEqual($format, FILTER_FORMAT_DEFAULT, t('Default filter format is not use.')); } /** * Verify the functionality of the administrative interface when the user has * no privileges to edit filter formats. */ function testMailhandlerSettings() { // Create and login user. $account = $this->drupalCreateUser( array( 'administer mailhandler', )); $this->drupalLogin($account); // Verify default settings $this->drupalGet('admin/settings/mailhandler'); $this->assertfieldByName('mailhandler_default_type', 'story'); $this->assertfieldByName('mailhandler_max_retrieval', '0'); $this->assertfieldByName('mailhandler_default_encoding', 'UTF-8'); $this->assertfieldByName('mailhandler_watchdog_level', '6'); // Change settings $settings = array( 'mailhandler_default_type' => 'page', 'mailhandler_max_retrieval' => '5', 'mailhandler_default_encoding' => 'UTF-1', 'mailhandler_watchdog_level' => '1', ); $this->drupalPost(NULL, $settings, t('Save configuration')); $this->assertText(t('The configuration options have been saved.')); $this->assertMailhandlerSettings($settings); // Cron maximun validation: empty $settings['mailhandler_max_retrieval'] = ''; $this->drupalPost(NULL, $settings, t('Save configuration')); $this->assertText(t('The configuration options have been saved.')); $this->assertMailhandlerSettings($settings); // Cron maximun validation: empty $settings['mailhandler_max_retrieval'] = '-1'; $this->drupalPost(NULL, $settings, t('Save configuration')); $this->assertNoText(t('The configuration options have been saved.')); $this->assertText(t('The value should a positive integer, or zero.')); } // Verify mailhandler settings. function assertMailhandlerSettings($settings) { $this->assertfieldByName('mailhandler_default_type', $settings['mailhandler_default_type']); $this->assertfieldByName('mailhandler_max_retrieval', $settings['mailhandler_max_retrieval']); $this->assertfieldByName('mailhandler_default_encoding', $settings['mailhandler_default_encoding']); $this->assertfieldByName('mailhandler_watchdog_level', $settings['mailhandler_watchdog_level']); } /** * Helper functions. */ /** * Create a mailbox in the database. * * @param $mailbox * associative array with mailbox settings. * @return array * updated mailbox with mid. * */ function drupalCreateMailbox($mailbox = array()) { // Populate defaults array. $mailbox += array( 'mail' => $this->randomName() . '@simpletest.tld', 'mailto' => '', 'folder' => $this->tempdir, 'imap' => 0, 'domain' => '', 'port' => '', 'name' => '', 'pass' => '', 'extraimap' => '', 'mime' => 'TEXT/HTML,TEXT/PLAIN', 'security' => 0, 'replies' => 1, 'fromheader' => '', 'commands' => '', 'sigseparator' => '', 'delete_after_read' => 1, 'enabled' => 1, 'format' => variable_get('filter_default_format', 1), 'authentication' => '', ); drupal_write_record('mailhandler', $mailbox); return $mailbox; } }