You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ro...@apache.org on 2016/11/23 13:50:31 UTC
[28/46] james-project git commit: JAMES-1854 Split responsibility of
class SieveMailet
http://git-wip-us.apache.org/repos/asf/james-project/blob/ca85c529/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
new file mode 100644
index 0000000..d7470a1
--- /dev/null
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
@@ -0,0 +1,992 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.transport.mailets.delivery;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Date;
+import java.util.Properties;
+
+import javax.activation.DataHandler;
+import javax.mail.Flags;
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
+import javax.mail.util.ByteArrayDataSource;
+
+import org.apache.commons.logging.Log;
+import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageManager;
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.sieverepository.api.exception.ScriptNotFoundException;
+import org.apache.james.transport.mailets.jsieve.ResourceLocator;
+import org.apache.james.user.api.UsersRepository;
+import org.apache.mailet.Mail;
+import org.apache.mailet.MailAddress;
+import org.apache.mailet.base.test.FakeMail;
+import org.apache.mailet.base.test.FakeMailContext;
+import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.Logger;
+
+import com.google.common.collect.Lists;
+
+public class SieveIntegrationTest {
+
+ public static final String RECEIVER_DOMAIN_COM = "receiver@domain.com";
+
+ class Header {
+ String name;
+ String value;
+
+ public Header(String name, String value) {
+ this.name = name;
+ this.value = value;
+ }
+ }
+
+ public static DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-mm-dd HH:mm:ss");
+ public static final DateTime DATE_CLOSE = formatter.parseDateTime("2016-01-16 00:00:00");
+ public static final DateTime DATE_DEFAULT = formatter.parseDateTime("2016-01-14 00:00:00");
+ public static final DateTime DATE_NEW = formatter.parseDateTime("2016-01-18 00:00:00");
+ public static final DateTime DATE_OLD = formatter.parseDateTime("2011-01-18 00:00:00");
+ public static final MailboxPath NOT_SELECTED_MAILBOX = new MailboxPath("#private", "receiver", "INBOX.not.selected");
+ public static final MailboxPath SELECTED_MAILBOX = new MailboxPath("#private", "receiver", "INBOX.select");
+ public static final MailboxPath INBOX = new MailboxPath("#private", "receiver", "INBOX");
+
+ private MailStorer testee;
+ private UsersRepository usersRepository;
+ private MailboxManager mailboxManager;
+ private ResourceLocator resourceLocator;
+ private FakeMailContext fakeMailContext;
+ private MailAddress sender;
+
+ @Before
+ public void setUp() throws Exception {
+ resourceLocator = mock(ResourceLocator.class);
+ usersRepository = mock(UsersRepository.class);
+ mailboxManager = mock(MailboxManager.class);
+ fakeMailContext = FakeMailContext.defaultContext();
+ sender = new MailAddress("sender@any");
+
+ testee = SieveMailStorer.builder()
+ .resourceLocator(resourceLocator)
+ .usersRepository(usersRepository)
+ .folder("INBOX")
+ .sievePoster(new SievePoster(mailboxManager, "INBOX", usersRepository, fakeMailContext))
+ .log(mock(Log.class))
+ .mailetContext(fakeMailContext)
+ .build();
+ }
+
+ @Test
+ public void mailShouldBeWellDeliveredByDefaultToUserWhenVirtualHostingIsTurnedOn() throws Exception {
+ when(usersRepository.supportVirtualHosting()).thenReturn(true);
+ when(resourceLocator.get(RECEIVER_DOMAIN_COM)).thenThrow(new ScriptNotFoundException());
+ final MessageManager messageManager = prepareMessageManagerOn(new MailboxPath("#private", RECEIVER_DOMAIN_COM, "INBOX"));
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void mailShouldBeWellDeliveredByDefaultToUserWhenvirtualHostingIsTurnedOff() throws Exception {
+ when(usersRepository.supportVirtualHosting()).thenReturn(false);
+ when(resourceLocator.get("receiver")).thenThrow(new ScriptNotFoundException());
+ final MessageManager messageManager = prepareMessageManagerOn(INBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void keepScriptShouldWork() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/keep.script");
+ final MessageManager messageManager = prepareMessageManagerOn(INBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void discardScriptShouldWork() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/discard.script");
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verifyNoMoreInteractions(mailboxManager);
+ }
+
+ @Test
+ public void fileintoScriptShouldWork() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/fileinto.script");
+ final MessageManager messageManager = prepareMessageManagerOn(new MailboxPath("#private", "receiver", "INBOX.any"));
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void allOfAllFalseScriptShouldWork() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/allofAllFalse.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void allOfOneFalseScriptShouldWork() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/allofOneFalse.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void allOfAllTrueScriptShouldWork() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/allofAllTrue.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void anyOfAllFalseScriptShouldWork() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/anyofAllFalse.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void falseScriptShouldWork() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/false.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void trueScriptShouldWork() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/true.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void notFalseScriptShouldWork() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/notFalse.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void notTrueScriptShouldWork() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/notTrue.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void anyOfOneFalseScriptShouldWork() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/anyofOneFalse.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void anyOfAllTrueScriptShouldWork() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/anyofAllTrue.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void stopScriptShouldWork() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/stop.script");
+ final MessageManager messageManager = prepareMessageManagerOn(INBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void headerScriptShouldWorkIfHeaderIsAbsent() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/header.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void headerScriptShouldWorkIfHeaderIsPresent() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/header.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubject("JAMES-1620 revolution");
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void sizeOverScriptShouldWorkIfUnderLimit() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/sizeOver.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMail();
+ mail.setMessageSize(100);
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void sizeUnderScriptShouldWorkIfUnderLimit() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/sizeUnder.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ FakeMail mail = createMail();
+ mail.setMessageSize(100);
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void sizeOverScriptShouldWorkIfOverLimit() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/sizeOver.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ FakeMail mail = createMail();
+ mail.setMessageSize(1000);
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void sizeUnderScriptShouldWorkIfOverLimit() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/sizeUnder.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMail();
+ mail.setMessageSize(1000);
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressLocalPartShouldWork() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressLocalPart.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Cc", "source@any.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+
+ @Test
+ public void addressLocalPartShouldOnlyMatchLocalPart() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressLocalPart.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Cc", "source1@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+
+ @Test
+ public void addressDomainShouldWork() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressDomain.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Cc", "source1@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+
+ @Test
+ public void addressDomainShouldOnlyMatchLocalPart() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressDomain.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Cc", "source@domain.org"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressBccAllShouldNotMatchOtherHeaders() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllBcc.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Cc", "source@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressBccAllShouldMatchSpecifiedAddress() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllBcc.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Bcc", "source@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressBccAllShouldNotMatchOtherAddress() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllBcc.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Bcc", "source2@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressBccAllShouldNotMatchOtherDomain() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllBcc.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Bcc", "source@domain.org"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void redirectShouldWork() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/redirect.script");
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verifyZeroInteractions(mailboxManager);
+ assertThat(fakeMailContext.getSentMails())
+ .containsExactly(new FakeMailContext.SentMail(new MailAddress("sender@any.com"), Lists.newArrayList(new MailAddress("redirect@apache.org")), null));
+ }
+
+ @Test
+ public void addressCcAllShouldNotMatchOtherHeaders() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllCc.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Resend-From", "source@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressCcAllShouldMatchSpecifiedAddress() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllCc.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Cc", "source@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressCcAllShouldNotMatchOtherAddress() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllCc.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Cc", "source2@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressCcAllShouldNotMatchOtherDomain() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllCc.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Cc", "source@domain.org"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressFromAllShouldNotMatchOtherHeaders() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllFrom.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Cc", "source@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressFromAllShouldMatchSpecifiedAddress() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllFrom.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("From", "source@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressFromAllShouldNotMatchOtherAddress() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllFrom.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("From", "source2@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressFromAllShouldNotMatchOtherDomain() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllFrom.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("From", "source@domain.org"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressToAllShouldNotMatchOtherHeaders() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllTo.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Resent-To", "source@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressToAllShouldMatchSpecifiedAddress() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllTo.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("To", "source@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressToAllShouldNotMatchOtherAddress() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllTo.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("To", "source2@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressToAllShouldNotMatchOtherDomain() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllTo.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("To", "source@domain.org"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressSenderAllShouldNotMatchOtherHeaders() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllSender.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("To", "source@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressSenderAllShouldMatchSpecifiedAddress() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllSender.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Sender", "source@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressSenderAllShouldNotMatchOtherAddress() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllSender.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Sender", "source2@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressSenderAllShouldNotMatchOtherDomain() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllSender.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Sender", "source@domain.org"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressResent_FromAllShouldNotMatchOtherHeaders() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllResend-From.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("From", "source@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressResent_FromAllShouldMatchSpecifiedAddress() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllResend-From.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Resend-From", "source@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressResent_FromAllShouldNotMatchOtherAddress() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllResend-From.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Resend-From", "source2@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressResent_FromAllShouldNotMatchOtherDomain() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllResend-From.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Resend-From", "source@domain.org"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressResent_ToAllShouldNotMatchOtherHeaders() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllResend-To.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("To", "source@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressResent_ToAllShouldMatchSpecifiedAddress() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllResend-To.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Resend-To", "source@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressResent_ToAllShouldNotMatchOtherAddress() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllResend-To.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Resend-To", "source2@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void addressResent_ToAllShouldNotMatchOtherDomain() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllResend-To.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("Resend-To", "source@domain.org"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void envelopeFromShouldWork() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/envelopeFrom.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ FakeMail mail = createMailWithSubjectAndHeaders("Default", new Header("From", "source@domain.com"));
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void envelopeFromShouldNotMatchOtherAddress() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/envelopeFromOtherSender.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void envelopeToShouldWork() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/envelopeTo.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void envelopeToShouldNotMatchOtherAddress() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/envelopeToOtherReceiver.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void bodyRawShouldNotMatchNotContainedData() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/bodyRawInvalid.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void bodyRawShouldMatchContent() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/bodyRawMatch.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void bodyContentShouldMatchContent() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/bodyContentMatch.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void bodyContentShouldNotMatchNotContainedData() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/bodyContentInvalid.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void bodyContentShouldNotMatchWhenWrongContentType() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/bodyContentWrongContentType.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void bodyTextShouldNotMatchNotContainedData() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/bodyTextInvalid.script");
+ final MessageManager messageManager = prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void bodyTextShouldMatchContent() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/bodyTextMatch.script");
+ final MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void doubleVacationShouldNotBeExecuted() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/doubleVacation.script");
+ MessageManager messageManager = prepareMessageManagerOn(INBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ assertThat(fakeMailContext.getSentMails()).isEmpty();
+ }
+
+ @Test
+ public void vacationShouldWork() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/vacationReason.script");
+ MessageManager messageManager = prepareMessageManagerOn(INBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ assertThat(fakeMailContext.getSentMails()).containsExactly(new FakeMailContext.SentMail(new MailAddress(RECEIVER_DOMAIN_COM), Lists.newArrayList(new MailAddress("sender@any.com")), null));
+ }
+
+ @Test
+ public void vacationShouldNotSendNotificationToMailingLists() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/vacationReason.script");
+ MessageManager messageManager = prepareMessageManagerOn(INBOX);
+ Mail mail = createMail();
+ mail.getMessage().addHeader("List-Id", "0123456789");
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ assertThat(fakeMailContext.getSentMails()).isEmpty();
+ }
+
+ @Test
+ public void vacationShouldNotGenerateNotificationIfTooOld() throws Exception {
+ prepareTestUsingScriptAndDates("org/apache/james/transport/mailets/delivery/vacationReason.script", DATE_OLD, DATE_NEW);
+ MessageManager messageManager = prepareMessageManagerOn(INBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ assertThat(fakeMailContext.getSentMails()).isEmpty();
+ }
+
+ @Test
+ public void vacationShouldNotCancelFileIntoActionIfNotExecuted() throws Exception {
+ prepareTestUsingScriptAndDates("org/apache/james/transport/mailets/delivery/vacationReasonAndFileInto.script", DATE_OLD, DATE_NEW);
+ MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ assertThat(fakeMailContext.getSentMails()).isEmpty();
+ }
+
+ @Test
+ public void vacationDaysParameterShouldFilterTooOldDates() throws Exception {
+ prepareTestUsingScriptAndDates("org/apache/james/transport/mailets/delivery/vacationDaysReason.script", DATE_DEFAULT, DATE_NEW);
+ MessageManager messageManager = prepareMessageManagerOn(INBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ assertThat(fakeMailContext.getSentMails()).isEmpty();
+ }
+
+ @Test
+ public void vacationDaysParameterShouldKeepDatesInRange() throws Exception {
+ prepareTestUsingScriptAndDates("org/apache/james/transport/mailets/delivery/vacationDaysReason.script", DATE_CLOSE, DATE_NEW);
+ MessageManager messageManager = prepareMessageManagerOn(INBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ assertThat(fakeMailContext.getSentMails()).containsExactly(new FakeMailContext.SentMail(new MailAddress(RECEIVER_DOMAIN_COM), Lists.newArrayList(new MailAddress("sender@any.com")), null));
+ }
+
+ @Test
+ public void vacationShouldNotCancelFileIntoActionIfExecuted() throws Exception {
+ prepareTestUsingScriptAndDates("org/apache/james/transport/mailets/delivery/vacationReasonAndFileInto.script", DATE_DEFAULT, DATE_NEW);
+ MessageManager messageManager = prepareMessageManagerOn(SELECTED_MAILBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ assertThat(fakeMailContext.getSentMails()).containsExactly(new FakeMailContext.SentMail(new MailAddress(RECEIVER_DOMAIN_COM), Lists.newArrayList(new MailAddress("sender@any.com")), null));
+ }
+
+ @Test
+ public void vacationFromSubjectShouldWork() throws Exception {
+ prepareTestUsingScriptAndDates("org/apache/james/transport/mailets/delivery/vacationSubjectFromReason.script", DATE_DEFAULT, DATE_NEW);
+ MessageManager messageManager = prepareMessageManagerOn(INBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ assertThat(fakeMailContext.getSentMails()).containsExactly(new FakeMailContext.SentMail(new MailAddress("benwa@apache.org"), Lists.newArrayList(new MailAddress("sender@any.com")), null));
+ }
+
+ @Test
+ public void vacationDaysAddressesShouldWork() throws Exception {
+ prepareTestUsingScriptAndDates("org/apache/james/transport/mailets/delivery/vacationDaysAddressesReason.script", DATE_CLOSE, DATE_NEW);
+ MessageManager messageManager = prepareMessageManagerOn(INBOX);
+
+ testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+
+ verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ assertThat(fakeMailContext.getSentMails()).containsExactly(new FakeMailContext.SentMail(new MailAddress(RECEIVER_DOMAIN_COM), Lists.newArrayList(new MailAddress("sender@any.com")), null));
+ }
+
+ private void prepareTestUsingScript(final String script) throws Exception {
+ prepareTestUsingScriptAndDates(script, DATE_DEFAULT, DATE_DEFAULT);
+ }
+
+ private void prepareTestUsingScriptAndDates(String script, DateTime scriptCreationDate, DateTime scriptExecutionDate) throws Exception {
+ when(usersRepository.supportVirtualHosting()).thenReturn(false);
+ when(resourceLocator.get("//receiver@localhost/sieve")).thenReturn(new ResourceLocator.UserSieveInformation(scriptCreationDate,
+ scriptExecutionDate,
+ ClassLoader.getSystemResourceAsStream(script)));
+ }
+
+ private MessageManager prepareMessageManagerOn(MailboxPath inbox) throws MailboxException {
+ final MessageManager messageManager = mock(MessageManager.class);
+ when(mailboxManager.getMailbox(eq(inbox), any(MailboxSession.class))).thenReturn(messageManager);
+ final MailboxSession session = mock(MailboxSession.class);
+ when(session.getPathDelimiter()).thenReturn('.');
+ when(mailboxManager.createSystemSession(any(String.class), any(Logger.class))).thenReturn(session);
+ return messageManager;
+ }
+
+ private FakeMail createMail() throws MessagingException, IOException {
+ return createMailWithSubject("Subject");
+ }
+
+ private FakeMail createMailWithSubject(String subject) throws MessagingException, IOException {
+ return createMailWithSubjectAndHeaders(subject);
+ }
+
+ private FakeMail createMailWithSubjectAndHeaders(String subject, Header... headers) throws MessagingException, IOException {
+ MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()));
+ message.setSubject(subject);
+ message.setSender(new InternetAddress("sender@any.com"));
+ message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(RECEIVER_DOMAIN_COM));
+ MimeMultipart multipart = new MimeMultipart();
+ MimeBodyPart scriptPart = new MimeBodyPart();
+ scriptPart.setDataHandler(
+ new DataHandler(
+ new ByteArrayDataSource(
+ "A text to match",
+ "text/plain; charset=UTF-8")
+ ));
+ scriptPart.setDisposition(MimeBodyPart.ATTACHMENT);
+ scriptPart.setHeader("Content-Type", "text/plain; charset=UTF-8");
+ scriptPart.setFileName("file.txt");
+ multipart.addBodyPart(scriptPart);
+ message.setContent(multipart);
+ for (Header header : headers) {
+ message.addHeader(header.name, header.value);
+ }
+ message.saveChanges();
+ return FakeMail.builder()
+ .mimeMessage(message)
+ .state(Mail.DEFAULT)
+ .recipient(new MailAddress(RECEIVER_DOMAIN_COM))
+ .sender(new MailAddress("sender@any.com"))
+ .build();
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org