Merged HEAD-BUG-FIX (5.0/Cloud) to HEAD (4.3/Cloud)

73072: Merged V4.2-BUG-FIX (4.2.3) to HEAD-BUG-FIX (4.3/Cloud)
      72995: MNT-11488: Merged DEV to V4.2-BUG-FIX (4.2.3)
         71868: MNT-11488: Duplicate notification when notification rule set for multiple users
            - Fix MailActionExecuter to send bulk message to all recipients only one time if template was not defined for rule. Add unit test for case.


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@74755 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Will Abson
2014-06-25 15:55:04 +00:00
parent 49650460f0
commit b6d669e9c4
2 changed files with 72 additions and 1 deletions

View File

@@ -201,6 +201,7 @@ public class MailActionExecuter extends ActionExecuterAbstractBase
*/
private boolean testMode = false;
private MimeMessage lastTestMessage;
private int testSentCount;
private TemplateImageResolver imageResolver;
@@ -519,6 +520,16 @@ public class MailActionExecuter extends ActionExecuterAbstractBase
private MimeMessageHelper[] prepareEmails(final Action ruleAction, final NodeRef actionedUponNodeRef)
{
Serializable ref = ruleAction.getParameterValue(PARAM_TEMPLATE);
String templateRef = (ref instanceof NodeRef ? ((NodeRef)ref).toString() : (String)ref);
if (templateRef == null)
{
// send as bulk message if there is no template
MimeMessageHelper[] messages = new MimeMessageHelper[1];
messages[0] = prepareEmail(ruleAction, actionedUponNodeRef, null, null);
return messages;
}
List<Pair<String, Locale>> recipients = getRecipients(ruleAction);
Pair<InternetAddress, Locale> from = getFrom(ruleAction);
@@ -941,6 +952,7 @@ public class MailActionExecuter extends ActionExecuterAbstractBase
else
{
lastTestMessage = preparedMessage.getMimeMessage();
testSentCount++;
}
}
catch (MailException e)
@@ -1479,6 +1491,16 @@ public class MailActionExecuter extends ActionExecuterAbstractBase
return lastTestMessage;
}
public int getTestSentCount()
{
return testSentCount;
}
public int resetTestSentCount()
{
return testSentCount = 0;
}
/**
* Used when test mode is enabled.
* Clears the record of the last message that was sent.

View File

@@ -20,20 +20,22 @@ package org.alfresco.repo.action.executer;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.management.subsystems.ApplicationContextFactory;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.repo.tenant.TenantService;
import org.alfresco.repo.tenant.TenantUtil;
import org.alfresco.repo.tenant.TenantUtil.TenantRunAsWork;
@@ -429,4 +431,51 @@ public abstract class AbstractMailActionExecuterTest
AuthenticationUtil.clearCurrentSecurityContext();
}
/**
* Test for MNT-11488
* @throws Exception
*/
@Test
public void testSendingToMultipleUsers() throws IOException, MessagingException
{
final String USER_1 = "recipient1";
final String USER_2 = "recipient2";
final String[] recipientsArray = { USER_1 + "@email.com", USER_2 + "@email.com" };
final List<String> recipientsResult = new ArrayList<String>(Arrays.asList(recipientsArray)) ;
try
{
createUser(USER_1, null);
createUser(USER_2, null);
ArrayList<String> recipients = new ArrayList<String>(2);
recipients.add(USER_1);
recipients.add(USER_2);
Action mailAction = ACTION_SERVICE.createAction(MailActionExecuter.NAME);
mailAction.setParameterValue(MailActionExecuter.PARAM_FROM, "sender@example.com");
mailAction.setParameterValue(MailActionExecuter.PARAM_TO_MANY, recipients);
mailAction.setParameterValue(MailActionExecuter.PARAM_SUBJECT, "Testing");
mailAction.setParameterValue(MailActionExecuter.PARAM_TEMPLATE_MODEL, (Serializable) getModel());
ACTION_EXECUTER.resetTestSentCount();
ACTION_SERVICE.executeAction(mailAction, null);
MimeMessage message = ACTION_EXECUTER.retrieveLastTestMessage();
Assert.assertNotNull(message);
Assert.assertEquals("One email should be sent", 1, ACTION_EXECUTER.getTestSentCount());
Assert.assertEquals("All recipients should receive single message", 2, message.getAllRecipients().length);
Assert.assertTrue("Both users should receive message", recipientsResult.contains(((InternetAddress) message.getAllRecipients()[0]).getAddress()));
Assert.assertTrue("Both users should receive message", recipientsResult.contains(((InternetAddress) message.getAllRecipients()[1]).getAddress()));
}
finally
{
// tidy up
PERSON_SERVICE.deletePerson(USER_1);
PERSON_SERVICE.deletePerson(USER_2);
}
}
}