/** * 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()); }
/** * 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.'); }
/** * 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()); }
/** * 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()))); } } }
/** * 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); }
/** * 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.'); }
/** * 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'); }