/**
  * The Drupal 6 contact categories to Drupal 8 migration.
  */
 public function testContactCategory()
 {
     /** @var \Drupal\contact\Entity\ContactForm $contact_form */
     $contact_form = ContactForm::load('website_feedback');
     $this->assertIdentical('Website feedback', $contact_form->label());
     $this->assertIdentical(array('*****@*****.**'), $contact_form->getRecipients());
     $this->assertIdentical('', $contact_form->getReply());
     $this->assertIdentical(0, $contact_form->getWeight());
     $contact_form = ContactForm::load('some_other_category');
     $this->assertIdentical('Some other category', $contact_form->label());
     $this->assertIdentical(array('*****@*****.**'), $contact_form->getRecipients());
     $this->assertIdentical('Thanks for contacting us, we will reply ASAP!', $contact_form->getReply());
     $this->assertIdentical(1, $contact_form->getWeight());
     $contact_form = ContactForm::load('a_category_much_longer_than_thir');
     $this->assertIdentical('A category much longer than thirty two characters', $contact_form->label());
     $this->assertIdentical(array('*****@*****.**'), $contact_form->getRecipients());
     $this->assertIdentical('', $contact_form->getReply());
     $this->assertIdentical(2, $contact_form->getWeight());
     // Test there are no duplicated roles.
     $contact_forms = ['website_feedback1', 'some_other_category1', 'a_category_much_longer_than_thir1'];
     $this->assertEmpty(ContactForm::loadMultiple($contact_forms));
     /*
      * Remove the map row for the Website feedback contact form so that it
      * can be migrated again.
      */
     $id_map = $this->getMigration('contact_category')->getIdMap();
     $id_map->delete(['cid' => '1']);
     $this->executeMigration('contact_category');
     // Test there is a duplicate Website feedback form.
     $contact_form = ContactForm::load('website_feedback1');
     $this->assertSame('Website feedback', $contact_form->label());
     $this->assertSame(array('*****@*****.**'), $contact_form->getRecipients());
     $this->assertSame('', $contact_form->getReply());
     $this->assertSame(0, $contact_form->getWeight());
 }
/**
 * Initialize 'message' and 'redirect' field values to 'contact_form' entities.
 */
function contact_post_update_add_message_redirect_field_to_contact_form()
{
    /** @var \Drupal\contact\ContactFormInterface $contact */
    foreach (ContactForm::loadMultiple() as $contact) {
        $contact->setMessage('Your message has been sent.')->setRedirectPath('')->save();
    }
}
Example #3
0
 protected function setUp()
 {
     parent::setUp();
     $this->fieldStorage = FieldStorageConfig::create(array('field_name' => strtolower($this->randomMachineName()), 'entity_type' => 'contact_message', 'type' => 'text'));
     $this->fieldStorage->save();
     ContactForm::create(['id' => 'contact_message', 'label' => 'Test contact form'])->save();
     FieldConfig::create(['field_storage' => $this->fieldStorage, 'bundle' => 'contact_message'])->save();
     $this->container->get('views.views_data')->clear();
 }
Example #4
0
 public function createForm(&$bundle_info)
 {
     if (!\Drupal::entityQuery('contact_form')->condition('id', $bundle_info['id'])->execute()) {
         $form_type = ContactForm::create(array('id' => $bundle_info['id'], 'label' => ucwords(str_replace('_', ' ', $bundle_info['id'])), 'type' => "contact_form"))->save();
         \Drupal::logger('clutch:workflow')->notice('Create bundle @bundle', array('@bundle' => $bundle_info, 'form' => $form_type));
         $this->createFields($bundle_info);
         $this->removeDefaultFormFields($bundle_info);
     }
 }
 /**
  * Performs various assertions on a single contact form entity.
  *
  * @param string $id
  *   The contact form ID.
  * @param string $expected_label
  *   The expected label.
  * @param string[] $expected_recipients
  *   The recipient e-mail addresses the form should have.
  * @param string $expected_reply
  *   The expected reply message.
  * @param int $expected_weight
  *   The contact form's expected weight.
  */
 protected function assertEntity($id, $expected_label, array $expected_recipients, $expected_reply, $expected_weight)
 {
     /** @var \Drupal\contact\ContactFormInterface $entity */
     $entity = ContactForm::load($id);
     $this->assertTrue($entity instanceof ContactFormInterface);
     $this->assertIdentical($expected_label, $entity->label());
     $this->assertIdentical($expected_recipients, $entity->getRecipients());
     $this->assertIdentical($expected_reply, $entity->getReply());
     $this->assertIdentical($expected_weight, $entity->getWeight());
 }
 /**
  * Tests deleting a contact form entity via a configuration import.
  *
  * @see \Drupal\Core\Entity\Event\BundleConfigImportValidate
  */
 public function testDeleteThroughImport()
 {
     $contact_form = ContactForm::create(['id' => 'test']);
     $contact_form->save();
     $this->copyConfig($this->container->get('config.storage'), $this->container->get('config.storage.sync'));
     // Set up the ConfigImporter object for testing.
     $storage_comparer = new StorageComparer($this->container->get('config.storage.sync'), $this->container->get('config.storage'), $this->container->get('config.manager'));
     $config_importer = new ConfigImporter($storage_comparer->createChangelist(), $this->container->get('event_dispatcher'), $this->container->get('config.manager'), $this->container->get('lock'), $this->container->get('config.typed'), $this->container->get('module_handler'), $this->container->get('module_installer'), $this->container->get('theme_handler'), $this->container->get('string_translation'));
     // Delete the contact message in sync.
     $sync = $this->container->get('config.storage.sync');
     $sync->delete($contact_form->getConfigDependencyName());
     // Import.
     $config_importer->reset()->import();
     $this->assertNull(ContactForm::load($contact_form->id()), 'The contact form has been deleted.');
 }
 /**
  * Tests adding paragraphs in contact forms.
  */
 public function testContactForm()
 {
     $this->loginAsAdmin(['administer contact forms', 'access site-wide contact form']);
     // Add a paragraph type.
     $this->addParagraphsType('paragraphs_contact');
     // Create a contact form.
     $contact_form = ContactForm::create(['id' => 'test_contact_form']);
     $contact_form->save();
     // Add a paragraphs field to the contact form.
     $this->addParagraphsField($contact_form->id(), 'paragraphs', 'contact_message');
     // Add a paragraph to the contact form.
     $this->drupalGet('contact/test_contact_form');
     $this->drupalPostAjaxForm(NULL, [], 'paragraphs_paragraphs_contact_add_more');
     // Check that the paragraph is displayed.
     $this->assertText('Type: paragraphs_contact');
     $this->drupalPostAjaxForm(NULL, [], 'paragraphs_0_remove');
     $this->assertText('Deleted Paragraph: paragraphs_contact');
 }
 /**
  * The Drupal 6 contact categories to Drupal 8 migration.
  */
 public function testContactCategory()
 {
     /** @var \Drupal\contact\Entity\ContactForm $contact_form */
     $contact_form = ContactForm::load('website_feedback');
     $this->assertIdentical('Website feedback', $contact_form->label());
     $this->assertIdentical(array('*****@*****.**'), $contact_form->getRecipients());
     $this->assertIdentical('', $contact_form->getReply());
     $this->assertIdentical(0, $contact_form->getWeight());
     $contact_form = ContactForm::load('some_other_category');
     $this->assertIdentical('Some other category', $contact_form->label());
     $this->assertIdentical(array('*****@*****.**'), $contact_form->getRecipients());
     $this->assertIdentical('Thanks for contacting us, we will reply ASAP!', $contact_form->getReply());
     $this->assertIdentical(1, $contact_form->getWeight());
     $contact_form = ContactForm::load('a_category_much_longer_than_thir');
     $this->assertIdentical('A category much longer than thirty two characters', $contact_form->label());
     $this->assertIdentical(array('*****@*****.**'), $contact_form->getRecipients());
     $this->assertIdentical('', $contact_form->getReply());
     $this->assertIdentical(2, $contact_form->getWeight());
 }
 /**
  * Test enabling and disabling of page cache based on time limit settings.
  */
 public function testCacheContactForm()
 {
     // Create a Website feedback contact form.
     $feedback_form = ContactForm::create(['id' => 'feedback', 'label' => 'Website feedback', 'recipients' => [], 'reply' => '', 'weight' => 0]);
     $feedback_form->save();
     $contact_settings = \Drupal::configFactory()->getEditable('contact.settings');
     $contact_settings->set('default_form', 'feedback')->save();
     // Give anonymous users permission to view contact form.
     Role::load(RoleInterface::ANONYMOUS_ID)->grantPermission('access site-wide contact form')->save();
     // Prime the cache.
     $this->drupalGet('contact/feedback');
     // Test on cache header with time limit enabled, cache should miss.
     $this->drupalGet('contact/feedback');
     $this->assertEqual($this->drupalGetHeader('X-Drupal-Cache'), '', 'Page was not cached.');
     // Disable time limit.
     $honeypot_config = \Drupal::configFactory()->getEditable('honeypot.settings')->set('time_limit', 0)->save();
     // Prime the cache.
     $this->drupalGet('contact/feedback');
     // Test on cache header with time limit disabled, cache should hit.
     $this->drupalGet('contact/feedback');
     $this->assertEqual($this->drupalGetHeader('X-Drupal-Cache'), 'HIT', 'Page was cached.');
 }
 /**
  * Tests the contact forms listing for the translate operation.
  */
 public function doContactFormsListTest()
 {
     // Create a test contact form to decouple looking for translate operations
     // link so this does not test more than necessary.
     $contact_form = ContactForm::create(['id' => Unicode::strtolower($this->randomMachineName(16)), 'label' => $this->randomMachineName()]);
     $contact_form->save();
     // Get the contact form listing.
     $this->drupalGet('admin/structure/contact');
     $translate_link = 'admin/structure/contact/manage/' . $contact_form->id() . '/translate';
     // Test if the link to translate the contact form is on the page.
     $this->assertLinkByHref($translate_link);
     // Test if the link to translate actually goes to the translate page.
     $this->drupalGet($translate_link);
     $this->assertRaw('<th>' . t('Language') . '</th>');
 }
 public function testProtectContactForm()
 {
     $this->drupalLogin($this->adminUser);
     // Disable 'protect_all_forms'.
     $honeypot_config = \Drupal::configFactory()->getEditable('honeypot.settings')->set('protect_all_forms', FALSE)->save();
     // Create a Website feedback contact form.
     $feedback_form = ContactForm::create(['id' => 'feedback', 'label' => 'Website feedback', 'recipients' => [], 'reply' => '', 'weight' => 0]);
     $feedback_form->save();
     $contact_settings = \Drupal::configFactory()->getEditable('contact.settings');
     $contact_settings->set('default_form', 'feedback')->save();
     // Submit the admin form so we can verify the right forms are displayed.
     $this->drupalPostForm('admin/config/content/honeypot', ['form_settings[contact_message_feedback_form]' => TRUE], t('Save configuration'));
     $this->drupalLogin($this->webUser);
     $this->drupalGet('contact/feedback');
     $this->assertField('url', 'Honeypot field is added to Contact form.');
 }
Example #12
0
 /**
  * Tests Standard installation profile.
  */
 function testStandard()
 {
     $this->drupalGet('');
     $this->assertLink(t('Contact'));
     $this->clickLink(t('Contact'));
     $this->assertResponse(200);
     // Test anonymous user can access 'Main navigation' block.
     $this->adminUser = $this->drupalCreateUser(array('administer blocks', 'post comments', 'skip comment approval', 'create article content', 'create page content'));
     $this->drupalLogin($this->adminUser);
     // Configure the block.
     $this->drupalGet('admin/structure/block/add/system_menu_block:main/bartik');
     $this->drupalPostForm(NULL, array('region' => 'sidebar_first', 'id' => 'main_navigation'), t('Save block'));
     // Verify admin user can see the block.
     $this->drupalGet('');
     $this->assertText('Main navigation');
     // Verify we have role = aria on system_powered_by and help_block
     // blocks.
     $this->drupalGet('admin/structure/block');
     $elements = $this->xpath('//div[@role=:role and @id=:id]', array(':role' => 'complementary', ':id' => 'block-bartik-help'));
     $this->assertEqual(count($elements), 1, 'Found complementary role on help block.');
     $this->drupalGet('');
     $elements = $this->xpath('//div[@role=:role and @id=:id]', array(':role' => 'complementary', ':id' => 'block-bartik-powered'));
     $this->assertEqual(count($elements), 1, 'Found complementary role on powered by block.');
     // Verify anonymous user can see the block.
     $this->drupalLogout();
     $this->assertText('Main navigation');
     // Ensure comments don't show in the front page RSS feed.
     // Create an article.
     $this->drupalCreateNode(array('type' => 'article', 'title' => 'Foobar', 'promote' => 1, 'status' => 1, 'body' => array(array('value' => 'Then she picked out two somebodies,<br />Sally and me', 'format' => 'basic_html'))));
     // Add a comment.
     $this->drupalLogin($this->adminUser);
     $this->drupalGet('node/1');
     $this->assertRaw('Then she picked out two somebodies,<br />Sally and me', 'Found a line break.');
     $this->drupalPostForm(NULL, array('subject[0][value]' => 'Barfoo', 'comment_body[0][value]' => 'Then she picked out two somebodies, Sally and me'), t('Save'));
     // Fetch the feed.
     $this->drupalGet('rss.xml');
     $this->assertText('Foobar');
     $this->assertNoText('Then she picked out two somebodies, Sally and me');
     // Ensure block body exists.
     $this->drupalGet('block/add');
     $this->assertFieldByName('body[0][value]');
     // Now we have all configuration imported, test all of them for schema
     // conformance. Ensures all imported default configuration is valid when
     // standard profile modules are enabled.
     $names = $this->container->get('config.storage')->listAll();
     /** @var \Drupal\Core\Config\TypedConfigManagerInterface $typed_config */
     $typed_config = $this->container->get('config.typed');
     foreach ($names as $name) {
         $config = $this->config($name);
         $this->assertConfigSchema($typed_config, $name, $config->get());
     }
     // Ensure that configuration from the Standard profile is not reused when
     // enabling a module again since it contains configuration that can not be
     // installed. For example, editor.editor.basic_html is editor configuration
     // that depends on the ckeditor module. The ckeditor module can not be
     // installed before the editor module since it depends on the editor module.
     // The installer does not have this limitation since it ensures that all of
     // the install profiles dependencies are installed before creating the
     // editor configuration.
     foreach (FilterFormat::loadMultiple() as $filter) {
         // Ensure that editor can be uninstalled by removing use in filter
         // formats. It is necessary to prime the filter collection before removing
         // the filter.
         $filter->filters();
         $filter->removeFilter('editor_file_reference');
         $filter->save();
     }
     \Drupal::service('module_installer')->uninstall(array('editor', 'ckeditor'));
     $this->rebuildContainer();
     \Drupal::service('module_installer')->install(array('editor'));
     /** @var \Drupal\contact\ContactFormInterface $contact_form */
     $contact_form = ContactForm::load('feedback');
     $recipients = $contact_form->getRecipients();
     $this->assertEqual(['*****@*****.**'], $recipients);
     $role = Role::create(['id' => 'admin_theme', 'label' => 'Admin theme']);
     $role->grantPermission('view the administration theme');
     $role->save();
     $this->adminUser->addRole($role->id());
     $this->adminUser->save();
     $this->drupalGet('node/add');
     $this->assertResponse(200);
     // Ensure that there are no pending updates after installation.
     $this->drupalLogin($this->rootUser);
     $this->drupalGet('update.php/selection');
     $this->assertText('No pending updates.');
     // Ensure that there are no pending entity updates after installation.
     $this->assertFalse($this->container->get('entity.definition_update_manager')->needsUpdates(), 'After installation, entity schema is up to date.');
     // Make sure the optional image styles are not installed.
     $this->drupalGet('admin/config/media/image-styles');
     $this->assertNoText('Max 325x325');
     $this->assertNoText('Max 650x650');
     $this->assertNoText('Max 1300x1300');
     $this->assertNoText('Max 2600x2600');
     // Make sure the optional image styles are installed after enabling
     // the responsive_image module.
     \Drupal::service('module_installer')->install(array('responsive_image'));
     $this->rebuildContainer();
     $this->drupalGet('admin/config/media/image-styles');
     $this->assertText('Max 325x325');
     $this->assertText('Max 650x650');
     $this->assertText('Max 1300x1300');
     $this->assertText('Max 2600x2600');
     // Verify certain routes' responses are cacheable by Dynamic Page Cache, to
     // ensure these responses are very fast for authenticated users.
     $this->dumpHeaders = TRUE;
     $this->drupalLogin($this->adminUser);
     $url = Url::fromRoute('contact.site_page');
     $this->drupalGet($url);
     $this->assertEqual('UNCACHEABLE', $this->drupalGetHeader(DynamicPageCacheSubscriber::HEADER), 'Site-wide contact page cannot be cached by Dynamic Page Cache.');
     $url = Url::fromRoute('<front>');
     $this->drupalGet($url);
     $this->drupalGet($url);
     $this->assertEqual('HIT', $this->drupalGetHeader(DynamicPageCacheSubscriber::HEADER), 'Frontpage is cached by Dynamic Page Cache.');
     // @todo uncomment after https://www.drupal.org/node/2543334 has landed.
     //url = Url::fromRoute('entity.node.canonical', ['node' => 1]);
     //$this->drupalGet($url);
     //$this->drupalGet($url);
     //$this->assertEqual('HIT', $this->drupalGetHeader(DynamicPageCacheSubscriber::HEADER), 'Full node page is cached by Dynamic Page Cache.');
     $url = Url::fromRoute('entity.user.canonical', ['user' => 1]);
     $this->drupalGet($url);
     $this->drupalGet($url);
     $this->assertEqual('HIT', $this->drupalGetHeader(DynamicPageCacheSubscriber::HEADER), 'User profile page is cached by Dynamic Page Cache.');
 }
 /**
  * Implements \Drupal\block\BlockBase::blockAccess().
  */
 public function blockAccess(AccountInterface $account)
 {
     return $this->contactForm->access('view', $account) && $account->hasPermission('access site-wide contact form');
 }
Example #14
0
  /**
   * Tests contact messages submitted through contact form.
   */
  public function testContactStorage() {
    // Create first valid contact form.
    $mail = '*****@*****.**';
    $this->addContactForm('test_id', 'test_label', $mail, '', TRUE);
    $this->assertText(t('Contact form test_label has been added.'));

    // Ensure that anonymous can submit site-wide contact form.
    user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access site-wide contact form'));
    $this->drupalLogout();
    $this->drupalGet('contact');
    $this->assertText(t('Your email address'));
    $this->assertNoText(t('Form'));
    $this->submitContact('Test_name', $mail, 'Test_subject', 'test_id', 'Test_message');
    $this->assertText(t('Your message has been sent.'));

    // Verify that only 1 message has been sent (by default, the "Send a copy
    // to yourself" option is disabled.
    $captured_emails = $this->drupalGetMails();
    $this->assertTrue(count($captured_emails) === 1);

    // Login as admin.
    $this->drupalLogin($this->adminUser);

    // Verify that the global setting stating whether e-mails should be sent in
    // HTML format is false by default.
    $this->assertFalse(\Drupal::config('contact_storage.settings')->get('send_html'));

    // Verify that this first e-mail was sent in plain text format.
    $captured_emails = $this->drupalGetMails();
    $this->assertTrue(strpos($captured_emails[0]['headers']['Content-Type'], 'text/plain') !== FALSE);

    // Go to the settings form and enable sending messages in HTML format.
    $this->drupalGet('/admin/structure/contact/settings');
    $enable_html = array(
      'send_html' => TRUE,
    );
    $this->drupalPostForm(NULL, $enable_html, t('Save configuration'));

    // Check that the form POST was successful.
    $this->assertText('The configuration options have been saved.');

    // Check that the global setting is properly updated.
    $this->assertTrue(\Drupal::config('contact_storage.settings')->get('send_html'));

    $display_fields = array(
      "The sender's name",
      "The sender's email",
      "Subject",
    );

    // Check that name, subject and mail are configurable on display.
    $this->drupalGet('admin/structure/contact/manage/test_id/display');
    foreach ($display_fields as $label) {
      $this->assertText($label);
    }

    // Check that preview is configurable on form display.
    $this->drupalGet('admin/structure/contact/manage/test_id/form-display');
    $this->assertText('Preview');

    // Check the message list overview.
    $this->drupalGet('admin/structure/contact/messages');
    $rows = $this->xpath('//tbody/tr');
    // Make sure only 1 message is available.
    $this->assertEqual(count($rows), 1);
    // Some fields should be present.
    $this->assertText('Test_subject');
    $this->assertText('Test_name');
    $this->assertText('test_label');

    // Click the view link and make sure name, subject and email are displayed
    // by default.
    $this->clickLink(t('View'));
    foreach ($display_fields as $label) {
      $this->assertText($label);
    }

    // Make sure the stored message is correct.
    $this->drupalGet('admin/structure/contact/messages');
    $this->clickLink(t('Edit'));
    $this->assertFieldById('edit-name', 'Test_name');
    $this->assertFieldById('edit-mail', $mail);
    $this->assertFieldById('edit-subject-0-value', 'Test_subject');
    $this->assertFieldById('edit-message-0-value', 'Test_message');
    // Submit should redirect back to listing.
    $this->drupalPostForm(NULL, array(), t('Save'));
    $this->assertUrl('admin/structure/contact/messages');

    // Delete the message.
    $this->clickLink(t('Delete'));
    $this->drupalPostForm(NULL, NULL, t('Delete'));
    $this->assertRaw(t('The @entity-type %label has been deleted.', [
      // See \Drupal\Core\Entity\EntityDeleteFormTrait::getDeletionMessage().
      '@entity-type' => 'contact message',
      '%label'       => 'Test_subject',
    ]));
    // Make sure no messages are available.
    $this->assertText('There is no Contact message yet.');

    // Fill the redirect field and assert the page is successfully redirected.
    $edit = ['contact_storage_uri' => 'entity:user/' . $this->adminUser->id()];
    $this->drupalPostForm('admin/structure/contact/manage/test_id', $edit, t('Save'));
    $edit = [
      'subject[0][value]' => 'Test subject',
      'message[0][value]' => 'Test message',
    ];
    $this->drupalPostForm('contact', $edit, t('Send message'));
    $this->assertText('Your message has been sent.');
    $this->assertEqual($this->url, $this->adminUser->urlInfo()->setAbsolute()->toString());

    // Check that this new message is now in HTML format.
    $captured_emails = $this->drupalGetMails();
    $this->assertTrue(strpos($captured_emails[1]['headers']['Content-Type'], 'text/html') !== FALSE);

    // Fill the "Submit button text" field and assert the form can still be
    // submitted.
    $edit = [
      'contact_storage_submit_text' => 'Submit the form',
      'contact_storage_preview' => FALSE,
    ];
    $this->drupalPostForm('admin/structure/contact/manage/test_id', $edit, t('Save'));
    $edit = [
      'subject[0][value]' => 'Test subject',
      'message[0][value]' => 'Test message',
    ];
    $this->drupalGet('contact');
    $element = $this->cssSelect('#edit-preview');
    // Preview button is hidden.
    $this->assertTrue(empty($element));
    $this->drupalPostForm(NULL, $edit, t('Submit the form'));
    $this->assertText('Your message has been sent.');

    // Add an Options email item field to the form.
    $settings = array('settings[allowed_values]' => "test_key1|test_label1|simpletest1@example.com\ntest_key2|test_label2|simpletest2@example.com");
    $this->fieldUIAddNewField('admin/structure/contact/manage/test_id', 'category', 'Category', 'contact_storage_options_email', $settings);
    // Verify that the new field shows up correctly on the form.
    $this->drupalGet('contact');
    $this->assertText('Category');
    $this->assertOption('edit-field-category', '_none');
    $this->assertOption('edit-field-category', 'test_key1');
    $this->assertOption('edit-field-category', 'test_key2');

    // Send a message using the Options email item field and enable the "Send a
    // copy to yourself" option.
    $captured_emails = $this->drupalGetMails();
    $emails_count_before = count($captured_emails);
    $edit = [
      'subject[0][value]' => 'Test subject',
      'message[0][value]' => 'Test message',
      'field_category' => 'test_key2',
      'copy' => 'checked',
    ];
    $this->drupalPostForm(NULL, $edit, t('Submit the form'));
    $this->assertText('Your message has been sent.');

    // Check that 2 messages were sent and that the body of the last
    // message contains the added message.
    $captured_emails = $this->drupalGetMails();
    $emails_count_after = count($captured_emails);
    $this->assertTrue($emails_count_after === ($emails_count_before + 2));
    $this->assertMailString('body', 'test_key2', 2);

    // The last message is the one sent as a copy, the one before it is the
    // original. Check that the original contains the added recipients and that
    // the copied one is only sent to the sender.
    $logged_in_user_email = $this->loggedInUser->getEmail();
    $this->assertTrue($captured_emails[$emails_count_after - 2]['to'] == "$mail,simpletest2@example.com");
    $this->assertTrue($captured_emails[$emails_count_after - 1]['to'] == $logged_in_user_email);

    // Test clone functionality - add field to existing form.
    $this->fieldUIAddNewField('admin/structure/contact/manage/test_id', 'text_field', 'Text field', 'text');
    // Then clone it.
    $this->drupalGet('admin/structure/contact/manage/test_id/clone');
    $this->drupalPostForm(NULL, [
      'id' => 'test_id_2',
      'label' => 'Cloned',
    ], t('Clone'));

    $edit = [
      'subject[0][value]' => 'Test subject',
      'message[0][value]' => 'Test message',
    ];

    // The added field should be on the cloned form too.
    $edit['field_text_field[0][value]'] = 'Some text';
    $this->drupalGet('contact/test_id_2');
    $this->drupalPostForm(NULL, $edit, t('Submit the form'));
    $form = ContactForm::load('test_id_2');
    $this->assertTrue($form->uuid());

    // Try changing the options email label, field default value and setting it
    // to required.
    $this->drupalGet('/admin/structure/contact/manage/test_id/fields');
    $this->clickLink('Edit');
    $this->drupalPostForm(NULL, [
      'label' => 'Category-2',
      'required' => TRUE,
      'default_value_input[field_category]' => 'test_key1',
    ], t('Save settings'));

    // Verify that the changes are visible into the contact form.
    $this->drupalGet('contact');
    $this->assertText('Category-2');
    $this->assertOption('edit-field-category', 'test_key1');
    $this->assertOption('edit-field-category', 'test_key2');
    $this->assertTrue($this->xpath('//select[@id="edit-field-category" and @required="required"]//option[@value="test_key1" and @selected="selected"]'));

    // Verify that the 'View messages' link exists for the 2 forms and that it
    // links to the correct view.
    $this->drupalGet('/admin/structure/contact');
    $this->assertLinkByHref('/admin/structure/contact/messages?form=test_id');
    $this->assertLinkByHref('/admin/structure/contact/messages?form=test_id_2');

    // Create a new contact form and assert that the disable link exists for
    // each forms.
    $this->addContactForm('test_disable_id', 'test_disable_label', '*****@*****.**', '', FALSE);
    $this->drupalGet('/admin/structure/contact');
    $contact_form_count = count(ContactForm::loadMultiple());
    $this->assertEqual(count($this->cssSelect('li.disable a:contains(Disable)')), $contact_form_count);

    // Disable the form and assert that there is 1 less "Disable" button and 1
    // "Enable" button.
    $this->drupalPostForm('/admin/structure/contact/manage/test_disable_id/disable', NULL, t('Disable'));
    $this->assertText('Disabled contact form test_disable_label.');
    $this->drupalGet('/admin/structure/contact');
    $this->assertEqual(count($this->cssSelect('li.disable a:contains(Disable)')), ($contact_form_count - 1));
    $this->assertEqual(count($this->cssSelect('li.enable a:contains(Enable)')), 1);

    // Assert that the disabled form has no input or text area and the message.
    $this->drupalGet('contact/test_disable_id');
    $this->assertEqual(count($this->cssSelect('input')), 0);
    $this->assertEqual(count($this->cssSelect('textarea')), 0);
    $this->assertText('This contact form has been disabled.');

    // Try to re-enable the form and assert that it can be accessed.
    $this->drupalPostForm('/admin/structure/contact/manage/test_disable_id/enable', NULL, t('Enable'));
    $this->assertText('Enabled contact form test_disable_label.');
    $this->drupalGet('contact/test_disable_id');
    $this->assertNoText('This contact form has been disabled.');

    // Create a new contact form with a custom disabled message, disable it and
    // assert that the message displayed is correct.
    $this->addContactForm('test_disable_id_2', 'test_disable_label_2', '*****@*****.**', '', FALSE, ['contact_storage_disabled_form_message' => 'custom disabled message']);
    $this->drupalPostForm('/admin/structure/contact/manage/test_disable_id_2/disable', NULL, t('Disable'));
    $this->assertText('Disabled contact form test_disable_label_2.');
    $this->drupalGet('contact/test_disable_id_2');
    $this->assertText('custom disabled message');
  }
Example #15
0
 /**
  * Tests Standard installation profile.
  */
 function testStandard()
 {
     $this->drupalGet('');
     $this->assertLink(t('Contact'));
     $this->clickLink(t('Contact'));
     $this->assertResponse(200);
     // Test anonymous user can access 'Main navigation' block.
     $admin = $this->drupalCreateUser(array('administer blocks', 'post comments', 'skip comment approval'));
     $this->drupalLogin($admin);
     // Configure the block.
     $this->drupalGet('admin/structure/block/add/system_menu_block:main/bartik');
     $this->drupalPostForm(NULL, array('region' => 'sidebar_first', 'id' => 'main_navigation'), t('Save block'));
     // Verify admin user can see the block.
     $this->drupalGet('');
     $this->assertText('Main navigation');
     // Verify we have role = aria on system_powered_by and system_help_block
     // blocks.
     $this->drupalGet('admin/structure/block');
     $elements = $this->xpath('//div[@role=:role and @id=:id]', array(':role' => 'complementary', ':id' => 'block-bartik-help'));
     $this->assertEqual(count($elements), 1, 'Found complementary role on help block.');
     $this->drupalGet('');
     $elements = $this->xpath('//div[@role=:role and @id=:id]', array(':role' => 'complementary', ':id' => 'block-bartik-powered'));
     $this->assertEqual(count($elements), 1, 'Found complementary role on powered by block.');
     // Verify anonymous user can see the block.
     $this->drupalLogout();
     $this->assertText('Main navigation');
     // Ensure comments don't show in the front page RSS feed.
     // Create an article.
     $node = $this->drupalCreateNode(array('type' => 'article', 'title' => 'Foobar', 'promote' => 1, 'status' => 1));
     // Add a comment.
     $this->drupalLogin($admin);
     $this->drupalGet('node/1');
     $this->drupalPostForm(NULL, array('subject[0][value]' => 'Barfoo', 'comment_body[0][value]' => 'Then she picked out two somebodies, Sally and me'), t('Save'));
     // Fetch the feed.
     $this->drupalGet('rss.xml');
     $this->assertText('Foobar');
     $this->assertNoText('Then she picked out two somebodies, Sally and me');
     // Now we have all configuration imported, test all of them for schema
     // conformance. Ensures all imported default configuration is valid when
     // standard profile modules are enabled.
     $names = $this->container->get('config.storage')->listAll();
     $factory = $this->container->get('config.factory');
     /** @var \Drupal\Core\Config\TypedConfigManagerInterface $typed_config */
     $typed_config = $this->container->get('config.typed');
     foreach ($names as $name) {
         $config = $factory->get($name);
         $this->assertConfigSchema($typed_config, $name, $config->get());
     }
     // Ensure that configuration from the Standard profile is not reused when
     // enabling a module again since it contains configuration that can not be
     // installed. For example, editor.editor.basic_html is editor configuration
     // that depends on the ckeditor module. The ckeditor module can not be
     // installed before the editor module since it depends on the editor module.
     // The installer does not have this limitation since it ensures that all of
     // the install profiles dependencies are installed before creating the
     // editor configuration.
     \Drupal::moduleHandler()->uninstall(array('editor', 'ckeditor'));
     $this->rebuildContainer();
     \Drupal::moduleHandler()->install(array('editor'));
     /** @var \Drupal\contact\ContactFormInterface $contact_form */
     $contact_form = ContactForm::load('feedback');
     $recipients = $contact_form->getRecipients();
     $this->assertEqual(['*****@*****.**'], $recipients);
 }
 /**
  * Deletes all forms.
  */
 function deleteContactForms()
 {
     $contact_forms = ContactForm::loadMultiple();
     foreach ($contact_forms as $id => $contact_form) {
         if ($id == 'personal') {
             // Personal form could not be deleted.
             $this->drupalGet("admin/structure/contact/manage/{$id}/delete");
             $this->assertResponse(403);
         } else {
             $this->drupalPostForm("admin/structure/contact/manage/{$id}/delete", array(), t('Delete'));
             $this->assertRaw(t('The contact form %label has been deleted.', array('%label' => $contact_form->label())));
             $this->assertFalse(ContactForm::load($id), format_string('Form %contact_form not found', array('%contact_form' => $contact_form->label())));
         }
     }
 }
Example #17
0
 /**
  * Test that tokens are properly created for an entity's base fields.
  */
 public function testBaseFieldTokens()
 {
     // Create a new contact_message entity and verify that tokens are generated
     // for its base fields. The contact_message entity type is used because it
     // provides no tokens by default.
     $contact_form = ContactForm::create(['id' => 'form_id']);
     $contact_form->save();
     $entity = Message::create(['contact_form' => 'form_id', 'uuid' => '123', 'langcode' => 'en', 'name' => 'Test name', 'mail' => 'Test mail', 'subject' => 'Test subject', 'message' => 'Test message', 'copy' => FALSE]);
     $entity->save();
     $this->assertTokens('contact_message', ['contact_message' => $entity], ['uuid' => Markup::create('123'), 'langcode' => Markup::create('English'), 'name' => Markup::create('Test name'), 'mail' => Markup::create('Test mail'), 'subject' => Markup::create('Test subject'), 'message' => Markup::create('Test message'), 'copy' => 'Off']);
     // Test the metadata of one of the tokens.
     $tokenService = \Drupal::service('token');
     $token_info = $tokenService->getTokenInfo('contact_message', 'subject');
     $this->assertEquals($token_info['name'], 'Subject');
     $this->assertEquals($token_info['description'], 'Text (plain) field.');
     $this->assertEquals($token_info['module'], 'token');
     // Verify that node entity type doesn't have a uid token.
     $this->assertNull($tokenService->getTokenInfo('node', 'uid'));
 }