mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
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:
@@ -201,6 +201,7 @@ public class MailActionExecuter extends ActionExecuterAbstractBase
|
|||||||
*/
|
*/
|
||||||
private boolean testMode = false;
|
private boolean testMode = false;
|
||||||
private MimeMessage lastTestMessage;
|
private MimeMessage lastTestMessage;
|
||||||
|
private int testSentCount;
|
||||||
|
|
||||||
private TemplateImageResolver imageResolver;
|
private TemplateImageResolver imageResolver;
|
||||||
|
|
||||||
@@ -519,6 +520,16 @@ public class MailActionExecuter extends ActionExecuterAbstractBase
|
|||||||
|
|
||||||
private MimeMessageHelper[] prepareEmails(final Action ruleAction, final NodeRef actionedUponNodeRef)
|
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);
|
List<Pair<String, Locale>> recipients = getRecipients(ruleAction);
|
||||||
|
|
||||||
Pair<InternetAddress, Locale> from = getFrom(ruleAction);
|
Pair<InternetAddress, Locale> from = getFrom(ruleAction);
|
||||||
@@ -941,6 +952,7 @@ public class MailActionExecuter extends ActionExecuterAbstractBase
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
lastTestMessage = preparedMessage.getMimeMessage();
|
lastTestMessage = preparedMessage.getMimeMessage();
|
||||||
|
testSentCount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (MailException e)
|
catch (MailException e)
|
||||||
@@ -1479,6 +1491,16 @@ public class MailActionExecuter extends ActionExecuterAbstractBase
|
|||||||
return lastTestMessage;
|
return lastTestMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getTestSentCount()
|
||||||
|
{
|
||||||
|
return testSentCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int resetTestSentCount()
|
||||||
|
{
|
||||||
|
return testSentCount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used when test mode is enabled.
|
* Used when test mode is enabled.
|
||||||
* Clears the record of the last message that was sent.
|
* Clears the record of the last message that was sent.
|
||||||
|
@@ -20,20 +20,22 @@ package org.alfresco.repo.action.executer;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.mail.Address;
|
import javax.mail.Address;
|
||||||
import javax.mail.Message;
|
import javax.mail.Message;
|
||||||
import javax.mail.MessagingException;
|
import javax.mail.MessagingException;
|
||||||
|
import javax.mail.internet.InternetAddress;
|
||||||
import javax.mail.internet.MimeMessage;
|
import javax.mail.internet.MimeMessage;
|
||||||
|
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.repo.management.subsystems.ApplicationContextFactory;
|
import org.alfresco.repo.management.subsystems.ApplicationContextFactory;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
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.TenantService;
|
||||||
import org.alfresco.repo.tenant.TenantUtil;
|
import org.alfresco.repo.tenant.TenantUtil;
|
||||||
import org.alfresco.repo.tenant.TenantUtil.TenantRunAsWork;
|
import org.alfresco.repo.tenant.TenantUtil.TenantRunAsWork;
|
||||||
@@ -429,4 +431,51 @@ public abstract class AbstractMailActionExecuterTest
|
|||||||
|
|
||||||
AuthenticationUtil.clearCurrentSecurityContext();
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user