JAMES-1670 ToRecipientFolder mailet should use init parameters

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/49a9cd91
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/49a9cd91
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/49a9cd91

Branch: refs/heads/master
Commit: 49a9cd9140d6bbc2c987f5c960e5aca932a8c409
Parents: 813af4a
Author: akaplan <akaplan@192.168.1.26>
Authored: Thu Jan 28 20:45:40 2016 +0200
Committer: Benoit Tellier <btell...@linagora.com>
Committed: Tue Mar 1 11:04:41 2016 +0700

----------------------------------------------------------------------
 .../transport/mailets/ToRecipientFolder.java    |  14 +-
 .../mailets/delivery/RecipientFolderTest.java   | 197 +++++++++++++++++++
 server/src/site/xdoc/dev-provided-mailets.xml   |  20 ++
 3 files changed, 228 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/49a9cd91/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToRecipientFolder.java
----------------------------------------------------------------------
diff --git 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToRecipientFolder.java
 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToRecipientFolder.java
index 4e227e0..8e51172 100644
--- 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToRecipientFolder.java
+++ 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToRecipientFolder.java
@@ -56,6 +56,9 @@ public class ToRecipientFolder extends GenericMailet {
     private MailboxManager mailboxManager;
     private SieveRepository sieveRepository;
     private UsersRepository usersRepository;
+    
+    private String folder;
+    private boolean consume;
 
     @Inject
     public void setMailboxManager(@Named("mailboxmanager")MailboxManager 
mailboxManager) {
@@ -63,8 +66,8 @@ public class ToRecipientFolder extends GenericMailet {
     }
 
     @Inject
-    public void setSetUsersRepository(SieveRepository setUsersRepository) {
-        this.sieveRepository = setUsersRepository;
+    public void setSieveRepository(SieveRepository sieveRepository) {
+        this.sieveRepository = sieveRepository;
     }
 
     @Inject
@@ -83,13 +86,18 @@ public class ToRecipientFolder extends GenericMailet {
     public void service(Mail mail) throws MessagingException {
         if (!mail.getState().equals(Mail.GHOST)) {
             sieveMailet.service(mail);
+            if (consume) {
+                mail.setState(Mail.GHOST);
+            }
         }
     }
 
     @Override
     public void init() throws MessagingException {
         super.init();
-        sieveMailet = new SieveMailet(usersRepository, mailboxManager, 
sieveRepository, "INBOX");
+        this.folder = getInitParameter("folder", "INBOX");
+        this.consume = getInitParameter("consume", false);
+        sieveMailet = new SieveMailet(usersRepository, mailboxManager, 
sieveRepository, this.folder);
         sieveMailet.init(new MailetConfig() {
             
             @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/49a9cd91/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/RecipientFolderTest.java
----------------------------------------------------------------------
diff --git 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/RecipientFolderTest.java
 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/RecipientFolderTest.java
new file mode 100644
index 0000000..6adcb7c
--- /dev/null
+++ 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/RecipientFolderTest.java
@@ -0,0 +1,197 @@
+/**
+ * **************************************************************
+ * 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.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;
+
+import com.google.common.collect.Lists;
+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.sieverepository.api.SieveRepository;
+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.Arrays;
+import java.util.Date;
+import java.util.Properties;
+import javax.mail.internet.ParseException;
+import org.apache.james.transport.mailets.ToProcessor;
+import org.apache.james.transport.mailets.ToRecipientFolder;
+import org.apache.mailet.Mailet;
+import org.apache.mailet.base.test.FakeMailContext;
+import org.junit.Assert;
+
+public class RecipientFolderTest {
+
+    private UsersRepository usersRepository;
+    private MailboxManager mailboxManager;
+    private SieveRepository sieveRepository;
+    private ToRecipientFolder recipientFolder;
+    private FakeMailetConfig mailetConfig;
+
+    private String folder = null;
+
+    private String consume = null;
+
+    private void setFolder(String folder) {
+        this.folder = folder;
+    }
+
+    private void setConsume(String consume) {
+        this.consume = consume;
+    }
+
+    @Before
+    public void setUp() throws Exception {
+        sieveRepository = mock(SieveRepository.class);
+        usersRepository = mock(UsersRepository.class);
+        mailboxManager = mock(MailboxManager.class);
+
+        mailetConfig = new FakeMailetConfig("RecipientFolderTest",
+                new FakeMailContext());
+
+        recipientFolder = new ToRecipientFolder();
+        recipientFolder.setMailboxManager(mailboxManager);
+        recipientFolder.setUsersRepository(usersRepository);
+        recipientFolder.setSieveRepository(sieveRepository);
+
+        setFolder("Junk");
+        setConsume("true");
+
+        if (folder != null) {
+            mailetConfig.setProperty("folder", folder);
+        }
+        if (consume != null) {
+            mailetConfig.setProperty("consume", consume);
+        }
+        recipientFolder.init(mailetConfig);
+
+    }
+
+    @Test
+    public void initParameterTesting() throws Exception {
+
+        Mail mail = createMail();
+        recipientFolder.service(mail);
+        Assert.assertEquals("Junk", 
recipientFolder.getInitParameter("folder"));
+    }
+
+    // test if ToRecipientFolder works
+    @Test
+    public void ToRecipientFolderConsumeTest() throws Exception {
+
+        Mail mail = createMail();
+        recipientFolder.service(mail);
+
+        Assert.assertEquals(Boolean.valueOf(consume), 
mail.getState().equals(Mail.GHOST));
+    }
+
+    @Test
+    public void 
mailShouldBeWellReceivedByDefaultToUserWhenvirtualHostingIsTurnedOn() throws 
Exception {
+
+        when(usersRepository.supportVirtualHosting()).thenAnswer(new 
Answer<Boolean>() {
+            @Override
+            public Boolean answer(InvocationOnMock invocationOnMock) throws 
Throwable {
+                return true;
+            }
+        });
+        recipientTest();
+    }
+
+    private void recipientTest() throws Exception {
+
+        MailboxPath junkbox = new MailboxPath("#private", 
"recei...@domain.com", "Junk");
+        final MessageManager messageManager = mock(MessageManager.class);
+        when(mailboxManager.getMailbox(eq(junkbox), 
any(MailboxSession.class))).thenAnswer(new Answer<MessageManager>() {
+            @Override
+            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();
+
+        recipientFolder.init(mailetConfig);
+        recipientFolder.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("sen...@any.com"));
+        message.setRecipient(MimeMessage.RecipientType.TO, new 
InternetAddress("recei...@domain.com"));
+        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("recei...@domain.com")));
+        return mail;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/49a9cd91/server/src/site/xdoc/dev-provided-mailets.xml
----------------------------------------------------------------------
diff --git a/server/src/site/xdoc/dev-provided-mailets.xml 
b/server/src/site/xdoc/dev-provided-mailets.xml
index 87a9acc..ac1ad54 100644
--- a/server/src/site/xdoc/dev-provided-mailets.xml
+++ b/server/src/site/xdoc/dev-provided-mailets.xml
@@ -578,6 +578,26 @@ Default is to not add a header.</li>
 </p>
 </subsection>
 
+<subsection name="ToRecipientFolder">
+  <p>
+    Description: Place a copy of the mail message in a folder of the 
recipient. It receives a Mail from the Queue and 
+      takes care to deliver the message to a defined folder of the 
recipient(s).
+  </p>
+  
+  <p>Parameters:
+    <ul>
+      <li><strong>folder</strong> (required) - The folder name of the 
Recipient mailbox in which the mail will be copied.</li>
+      <li><strong>consume</strong> (optional) - flag true or false: will tell 
is the mail will be further processed by the upcoming processor mailets, or 
not</li>
+    </ul>
+  </p>
+  
+<source>
+&lt;mailet match="RecipientIsLocal" class="ToRecipientFolder"&gt;
+  &lt;folder&gt;Junk&lt;/folder&gt;
+  &lt;consume&gt;false&lt;/consume&gt;
+&lt;/mailet&gt;
+</source>
+
 <subsection name="ToRepository">
 <p>Places a copy of the message in the specified repository.</p>
 


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to