Author: btellier
Date: Thu Dec 17 15:12:09 2015
New Revision: 1720600

URL: http://svn.apache.org/viewvc?rev=1720600&view=rev
Log:
JAMES-1620 Add base for SieveMailet tests

Added:
    
james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveMailetTest.java

Added: 
james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveMailetTest.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveMailetTest.java?rev=1720600&view=auto
==============================================================================
--- 
james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveMailetTest.java
 (added)
+++ 
james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveMailetTest.java
 Thu Dec 17 15:12:09 2015
@@ -0,0 +1,183 @@
+/****************************************************************
+ * 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 com.google.common.collect.Lists;
+import org.apache.james.domainlist.api.DomainList;
+import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageManager;
+import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.rrt.api.RecipientRewriteTable;
+import org.apache.james.sieverepository.api.SieveRepository;
+import org.apache.james.sieverepository.api.exception.ScriptNotFoundException;
+import org.apache.james.transport.mailets.LocalDelivery;
+import org.apache.james.transport.mailets.SieveMailet;
+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.FakeMailetConfig;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+import org.slf4j.Logger;
+
+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 java.io.IOException;
+import java.io.InputStream;
+import java.util.Date;
+import java.util.Properties;
+
+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.when;
+
+public class SieveMailetTest {
+
+    private UsersRepository usersRepository;
+    private RecipientRewriteTable recipientRewriteTable;
+    private MailboxManager mailboxManager;
+    private DomainList domainList;
+    private SieveRepository sieveRepository;
+    private SieveMailet sieveMailet;
+
+    @Before
+    public void setUp() throws Exception {
+        sieveRepository = mock(SieveRepository.class);
+        usersRepository = mock(UsersRepository.class);
+        recipientRewriteTable = mock(RecipientRewriteTable.class);
+        mailboxManager = mock(MailboxManager.class);
+        domainList = mock(DomainList.class);
+
+        sieveMailet = new SieveMailet(usersRepository, mailboxManager, 
sieveRepository, "INBOX");
+    }
+
+    @Test
+    public void 
mailShouldBeWellDeliveredByDefaultToUserWhenvirtualHostingIsTurnedOn() throws 
Exception {
+        when(usersRepository.supportVirtualHosting()).thenAnswer(new 
Answer<Boolean>() {
+            public Boolean answer(InvocationOnMock invocationOnMock) throws 
Throwable {
+                return true;
+            }
+        });
+        when(sieveRepository.getActive("[email protected]")).thenThrow(new 
ScriptNotFoundException());
+        MailboxPath inbox = new MailboxPath("#private", "[email protected]", 
"INBOX");
+        final MessageManager messageManager = mock(MessageManager.class);
+        when(mailboxManager.getMailbox(eq(inbox), 
any(MailboxSession.class))).thenAnswer(new Answer<MessageManager>() {
+            public MessageManager answer(InvocationOnMock invocationOnMock) 
throws Throwable {
+                return messageManager;
+            }
+        });
+        final MailboxSession session = mock(MailboxSession.class);
+        when(session.getPathDelimiter()).thenAnswer(new Answer<Character>() {
+            @Override
+            public Character answer(InvocationOnMock invocationOnMock) throws 
Throwable {
+                return '.';
+            }
+        });
+        when(mailboxManager.createSystemSession(any(String.class), 
any(Logger.class))).thenAnswer(new Answer<MailboxSession>() {
+            @Override
+            public MailboxSession answer(InvocationOnMock invocationOnMock) 
throws Throwable {
+                return session;
+            }
+        });
+
+        Mail mail = createMail();
+
+        sieveMailet.init(new FakeMailetConfig());
+        sieveMailet.service(mail);
+
+        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()).thenAnswer(new 
Answer<Boolean>() {
+            public Boolean answer(InvocationOnMock invocationOnMock) throws 
Throwable {
+                return false;
+            }
+        });
+        when(sieveRepository.getActive("receiver")).thenThrow(new 
ScriptNotFoundException());
+        MailboxPath inbox = new MailboxPath("#private", "receiver", "INBOX");
+        final MessageManager messageManager = mock(MessageManager.class);
+        when(mailboxManager.getMailbox(eq(inbox), 
any(MailboxSession.class))).thenAnswer(new Answer<MessageManager>() {
+            public MessageManager answer(InvocationOnMock invocationOnMock) 
throws Throwable {
+                return messageManager;
+            }
+        });
+        final MailboxSession session = mock(MailboxSession.class);
+        when(session.getPathDelimiter()).thenAnswer(new Answer<Character>() {
+            @Override
+            public Character answer(InvocationOnMock invocationOnMock) throws 
Throwable {
+                return '.';
+            }
+        });
+        when(mailboxManager.createSystemSession(any(String.class), 
any(Logger.class))).thenAnswer(new Answer<MailboxSession>() {
+            @Override
+            public MailboxSession answer(InvocationOnMock invocationOnMock) 
throws Throwable {
+                return session;
+            }
+        });
+
+        Mail mail = createMail();
+
+        sieveMailet.init(new FakeMailetConfig());
+        sieveMailet.service(mail);
+
+        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+    }
+
+    private Mail createMail() throws MessagingException, IOException {
+        MimeMessage message = new MimeMessage(Session.getDefaultInstance(new 
Properties()));
+        message.setSubject("Subject");
+        message.setSender(new InternetAddress("[email protected]"));
+        message.setRecipient(MimeMessage.RecipientType.TO, new 
InternetAddress("[email protected]"));
+        MimeMultipart multipart = new MimeMultipart();
+        MimeBodyPart scriptPart = new MimeBodyPart();
+        scriptPart.setDataHandler(
+            new DataHandler(
+                new ByteArrayDataSource(
+                    "toto",
+                    "application/sieve; charset=UTF-8")
+            ));
+        scriptPart.setDisposition(MimeBodyPart.ATTACHMENT);
+        scriptPart.setHeader("Content-Type", "application/sieve; 
charset=UTF-8");
+        scriptPart.setFileName("file.txt");
+        multipart.addBodyPart(scriptPart);
+        message.setContent(multipart);
+        message.saveChanges();
+        Mail mail = new FakeMail(message);
+        mail.setState(Mail.DEFAULT);
+        mail.setRecipients(Lists.newArrayList(new 
MailAddress("[email protected]")));
+        return mail;
+    }
+
+}
\ No newline at end of file



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to