This post contains information regarding the Drupal Core issue. This post will explain how the bug was reproduced and how the test patch was created.
The bug was “Wrong message displayed after contact form mail(s) cannot be sent”.
Requires
- Drupal 8.0
- Contact Module
Note that URLs mentioned in this post “http://mydrupalsite.com/" is the URL of your Drupal installation and “/mydrupalsite” is the folder location of Drupal installation.
Reproducing Bug
- First of all we need to make a contact form page. Go to the Contact Module configuration page :
http://mydrupalsite.com/admin/structure/contact
Click on “Add Contact Form” button and in the new window that you go to, fill up the form with the asked information. Example :
In the Recipients filed, type in an email address that doesn’t exist. Tick the “Make this the default form” and submit the form by “Save” button.
- Go to the Contact Page of your site :
http://mydrupalsite.com/contact
Fill up the contact form with some data and submit the form :
- Now, we will see the bug :
As you can see, the success message is shown even when the email was failed to send.
Reproducing Bug in Tests
- Create following test file :
/mydrupalsite/core/modules/contact/src/Tests/FailedContactPersonalTest.php
- I made a new test class by extending “WebTestBase” class and made the testPersonalContactFail() method to reproduce bug :
function testPersonalContactFail() {
// Create a valid form.
$this->admin_user = $this->drupalCreateUser(array('access site-wide contact form', 'administer contact forms', 'administer permissions', 'administer users'));
$this->drupalLogin($this->admin_user);
$this->addContactForm($id = Unicode::strtolower($this->randomMachineName(16)), $label = $this->randomMachineName(16), "[email protected]", '', TRUE);
$this->assertRaw(t('Contact form %label has been added.', array('%label' => $label)));
// Submit the contact form.
$this->drupalLogout();
$this->drupalGet('/contact');
user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access site-wide contact form'));
$this->submitContact("Test", "[email protected]", "Sample Message", $id, "Just a sample message");
// Check the bug messages
$this->assertText(t('Your message has been sent.'), 'Displayed "Message sent"');
/* The following code only works if emails can be sent in tests */
//$this->assertText(t('Unable to send email. Contact the site administrator if the problem persists.'), 'Displayed "Unable to send email..."');
}
The messages due to the bug that are these :
Unable to send email. Contact the site administrator if the problem persists.
Your message has been sent.
was checked in the output using $this->assertText() function. But, checking of the “Unable to send email. Contact the site administrator if the problem persists.” is not possible, because email is not actually sent in testing phase, so to output that message. Therefore that line is commented.
- Go to “http://mydrupalsite.com/admin/config/development/testing", expand “contact” and tick the checkbox aside to “DrupalcontactTestsNotExistEmailContactTest” :
-
Click on “Run Tests” button at the end of the page. Now the testing is started. It will take some time to finish.
-
Now, the success test page is shown :
Patching
- By using git, create a patch. For this, go to the root of Drupal installation, open terminal and commit the changed file :
git branch 2348119-Reproduce-bug-test-case
git checkout 2348119-Reproduce-bug-test-case
git add core/modules/contact/src/Tests/NotExistEmailContactTest.php
git commit core/modules/contact/src/Tests/NotExistEmailContactTest.php -m "Reproduced the bug https://www.drupal.org/node/2348119"
- Create the patch file :
git diff 8.0.x > Reproduce-bug-test-case-2348119-38.patch
Uploading to Issue page
Went to the issue page and added a new comment with the Patch file “Reproduce-bug-test-case-2348119-38.patch” :
Here is the comment link : https://www.drupal.org/node/2348119#comment-9409977
Conclusion
This experience gave me new information about Testing in Drupal. I realised that emails being sent in tests doesn’t actually get sent. Instead it is gone into the Drupal mail inbox. I agree with this method as if it was not like this, many emails will go into the recipient’s or admin’s inbox.
This was my first patch into the Drupal Core. Felt a little scary before doing it as I’m taking part in the CORE of DRUPAL !
With this little experience, I gained the confidence to make patches for the Drupal Core more !