Recently I received a task where I had to modify a function I’ve wrote a long time ago that send out emails to users based on some criteria. The problem is that when I wrote that function I:
1. Didn’t have that good understanding and knowledge of Alfresco
2. Alfresco’s email sending capabilities weren’t as good as today
3. It was for a 3.x version of Alfresco
I then decided to first write a test for the function. The thing is that the essential thing in the function is the actual subject, content and other properties of the mail. I also want this to work regardless of where the test is executed (dev computer, CI environment, etc). I googled some and found some rather nice frameworks for setting up a simple SMTP server in a junit test. I also found out that one of the more simple ones to use is actually included in Alfresco, GreenMail.
I promptly started to write my integration test. Define a private variable for the test first.
private GreenMail _mailServer;
In the “@Before” part (or similar) create and start the SMTP instance.
_mailServer = new GreenMail(ServerSetupTest.SMTP); _mailServer.start();
In the “@After” part (or similar) stop the SMTP instance.
You also have to modify the alfresco-global.properties file for your test suite so that Alfresco sends emails to the correct port. As default GreenMail ServerSetupTest.SMTP picks 25 + an offset number (3000) as it’s port, so set the value to:
Now, in your test just execute the code that sends the emails. Now comes the nice stuff. GreenMail has a function to get all received messages. Getting the messages and doing the proper assertions is now a walk in the park
MimeMessage messages = _mailServer.getReceivedMessages(); assertEquals(1, messages.length); assertThat(message.getSubject(), containsString("Urget message!")); assertThat(message.getContent().toString(), containsString("Kind regards,"));
No more excuses not to test your email sending capabilities…