Modified: james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailetTestCase.java URL: http://svn.apache.org/viewvc/james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailetTestCase.java?rev=1720561&r1=1720560&r2=1720561&view=diff ============================================================================== --- james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailetTestCase.java (original) +++ james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailetTestCase.java Thu Dec 17 14:51:18 2015 @@ -20,26 +20,15 @@ package org.apache.james.transport.mailets.managesieve; -import org.apache.commons.io.IOUtils; -import org.apache.james.managesieve.mock.MockSieveParser; -import org.apache.james.managesieve.mock.MockSieveRepository; -import org.apache.james.sieverepository.api.exception.DuplicateUserException; -import org.apache.james.sieverepository.api.exception.QuotaExceededException; -import org.apache.james.sieverepository.api.exception.ScriptNotFoundException; -import org.apache.james.sieverepository.api.SieveRepository; -import org.apache.james.sieverepository.api.exception.StorageException; -import org.apache.james.sieverepository.api.exception.UserNotFoundException; -import org.apache.mailet.Mail; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import com.google.common.collect.Lists; import javax.activation.DataHandler; import javax.mail.Address; -import javax.mail.BodyPart; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.internet.InternetAddress; @@ -48,1148 +37,593 @@ import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMessage.RecipientType; import javax.mail.internet.MimeMultipart; import javax.mail.util.ByteArrayDataSource; +import java.io.ByteArrayInputStream; import java.io.IOException; -import java.io.InputStream; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; +import java.util.List; import java.util.Properties; -import java.util.Scanner; +import org.apache.commons.io.IOUtils; +import org.apache.james.managesieve.api.SieveParser; +import org.apache.james.managesieve.api.SyntaxException; +import org.apache.james.sieverepository.api.ScriptSummary; +import org.apache.james.sieverepository.api.SieveRepository; +import org.apache.james.sieverepository.api.exception.ScriptNotFoundException; +import org.apache.james.user.api.UsersRepository; +import org.apache.mailet.Mail; +import org.apache.mailet.base.test.FakeMail; +import org.apache.mailet.base.test.FakeMailContext; +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; public class ManageSieveMailetTestCase { - ManageSieveMailet _mailet = null; - SieveRepository _repository = null; - MockSieveParser _parser = null; + public static final String USER = "test@localhost"; + public static final String SCRIPT_NAME = "scriptName"; + public static final String SCRIPT_CONTENT = "scriptContent"; + public static final String SYNTAX_EXCEPTION = "SyntaxException"; + public static final String OLD_SCRIPT_NAME = "oldScriptName"; + public static final String NEW_SCRIPT_NAME = "newScriptName"; + public static final String SIEVE_LOCALHOST = "sieve@localhost"; + + private ManageSieveMailet mailet; + private SieveRepository sieveRepository; + private SieveParser sieveParser; @Before public void setUp() throws Exception { - _mailet = new ManageSieveMailet(); - _repository = new MockSieveRepository(); - _parser = new MockSieveParser(); - _mailet.setSieveParser(_parser); - _mailet.setSieveRepository(_repository); - MockMailetConfig config = new MockMailetConfig(new MockMailetContext()); - config.setInitParameter("helpURL", "file:./src/test/resources/help.txt"); - _mailet.init(config); + mailet = new ManageSieveMailet(); + sieveRepository = mock(SieveRepository.class); + sieveParser = mock(SieveParser.class); + UsersRepository usersRepository = mock(UsersRepository.class); + mailet.setSieveParser(sieveParser); + mailet.setSieveRepository(sieveRepository); + mailet.setUsersRepository(usersRepository); + FakeMailetConfig config = new FakeMailetConfig("ManageSieve mailet", new FakeMailContext()); + config.setProperty("helpURL", "file:./src/test/resources/help.txt"); + mailet.init(config); + when(usersRepository.contains(USER)).thenAnswer(new Answer<Boolean>() { + public Boolean answer(InvocationOnMock invocationOnMock) throws Throwable { + return true; + } + }); } @Test - public final void testCapability() throws MessagingException, IOException { - MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties())); - message.setSubject("CAPABILITY"); - message.setSender(new InternetAddress("test@localhost")); - message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost")); - message.saveChanges(); - Mail mail = new MockMail(); + public final void testCapabilityUnauthorised() throws MessagingException, IOException { + MimeMessage message = prepareMimeMessage("CAPABILITY", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); mail.setMessage(message); - - _parser.setExtensions(Arrays.asList("a", "b", "c")); - - // Unauthorised - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - assertNotNull(result); - // Check the subject header - assertEquals("Re: CAPABILITY", result.getSubject()); - // Check the recipient - Address[] recipients = result.getRecipients(RecipientType.TO); - assertEquals(1, recipients.length); - assertEquals(message.getSender(), recipients[0]); - // Check the response - MimeMultipart multipart = (MimeMultipart) result.getContent(); - assertEquals(1, multipart.getCount()); - BodyPart part = multipart.getBodyPart(0); - String response = (String) part.getContent(); - Scanner scanner = new Scanner(response); - Map<String, String> capabilities = new HashMap<String, String>(); - while (scanner.hasNextLine()) { - String key = scanner.next(); - String value = null; - if (scanner.hasNextLine()) { - value = scanner.nextLine().trim(); + when(sieveParser.getExtensions()).thenAnswer(new Answer<List<String>>() { + public List<String> answer(InvocationOnMock invocationOnMock) throws Throwable { + return Lists.newArrayList("a", "b", "c"); } - capabilities.put(key, value); - } - assertEquals("1.0", capabilities.get("VERSION")); - assertEquals("a b c", capabilities.get("SIEVE")); - assertEquals("Apache ManageSieve v1.0", capabilities.get("IMPLEMENTATION")); - assertEquals(null, capabilities.get("OK")); + }); + mailet.service(mail); + ensureResponseContains("Re: CAPABILITY", message.getSender(), "SIEVE a b c", + "GETACTIVE ", + "IMPLEMENTATION Apache ManageSieve v1.0", + "VERSION 1.0", + "OK"); + } - // Authorised - mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, "test"); - _mailet.service(mail); - // Check the response - result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - multipart = (MimeMultipart) result.getContent(); - assertEquals(1, multipart.getCount()); - part = multipart.getBodyPart(0); - response = (String) part.getContent(); - scanner = new Scanner(response); - capabilities = new HashMap<String, String>(); - while (scanner.hasNextLine()) { - String key = scanner.next(); - String value = null; - if (scanner.hasNextLine()) { - value = scanner.nextLine().trim(); + @Test + public final void testCapability() throws MessagingException, IOException { + MimeMessage message = prepareMimeMessage("CAPABILITY", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + when(sieveParser.getExtensions()).thenAnswer(new Answer<List<String>>() { + public List<String> answer(InvocationOnMock invocationOnMock) throws Throwable { + return Lists.newArrayList("a", "b", "c"); } - capabilities.put(key, value); - } - assertEquals("1.0", capabilities.get("VERSION")); - assertEquals(message.getSender().toString(), capabilities.get("OWNER")); - assertEquals("a b c", capabilities.get("SIEVE")); - assertEquals("Apache ManageSieve v1.0", capabilities.get("IMPLEMENTATION")); - assertEquals(null, capabilities.get("OK")); + }); + mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, "test"); + mailet.service(mail); + ensureResponseContains("Re: CAPABILITY", message.getSender(), "SIEVE a b c", + "GETACTIVE ", + "IMPLEMENTATION Apache ManageSieve v1.0", + "OWNER test@localhost", + "VERSION 1.0", + "OK"); + } - // Extra arguments should be rejected + @Test + public final void testCapabilityExtraArguments() throws MessagingException, IOException { + MimeMessage message = prepareMimeMessage("CAPABILITY", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); message.setSubject("CAPABILITY extra"); message.saveChanges(); - _mailet.service(mail); - result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - multipart = (MimeMultipart) result.getContent(); - assertEquals(1, multipart.getCount()); - part = multipart.getBodyPart(0); - response = (String) part.getContent(); - assertEquals("NO \"Too many arguments: extra\"", response); - - + mailet.service(mail); + ensureResponse("Re: CAPABILITY extra", message.getSender(), "NO \"Too many arguments: extra\""); } @Test - public final void testPutScript() throws MessagingException, IOException, UserNotFoundException, ScriptNotFoundException, StorageException { - MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties())); - String scriptName = "scriptName"; - String scriptContent = "scriptContent"; - message.setSubject("PUTSCRIPT \"" + scriptName + "\""); - message.setSender(new InternetAddress("test@localhost")); - message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost")); - MimeMultipart multipart = new MimeMultipart(); - MimeBodyPart scriptPart = new MimeBodyPart(); - scriptPart.setDataHandler( - new DataHandler( - new ByteArrayDataSource( - scriptContent, - "application/sieve; charset=UTF-8") - )); - scriptPart.setDisposition(MimeBodyPart.ATTACHMENT); - // setting a DataHandler with no mailcap definition is not - // supported by the specs. Javamail activation still work, - // but Geronimo activation translate it to text/plain. - // Let's manually force the header. - scriptPart.setHeader("Content-Type", "application/sieve; charset=UTF-8"); - scriptPart.setFileName(scriptName); - multipart.addBodyPart(scriptPart); - message.setContent(multipart); - message.saveChanges(); - Mail mail = new MockMail(); + public final void testPutScriptUnauthorised() throws Exception { + MimeMessage message = prepareMessageWithAttachment(SCRIPT_CONTENT, "PUTSCRIPT \"" + SCRIPT_NAME + "\"", SIEVE_LOCALHOST, USER); + Mail mail = new FakeMail(); mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: PUTSCRIPT \"" + SCRIPT_NAME + "\"", message.getSender(), "NO"); + } - // Unauthorised - { - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - assertNotNull(result); - // Check the subject header - assertEquals("Re: PUTSCRIPT \"" + scriptName + "\"", result.getSubject()); - // Check the recipient - Address[] recipients = result.getRecipients(RecipientType.TO); - assertEquals(1, recipients.length); - assertEquals(message.getSender(), recipients[0]); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO", response.trim()); - } - - // Authorised - { - mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString()); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals(response, "OK (WARNINGS) \"warning1\" \"warning2\""); - assertEquals(scriptContent, IOUtils.toString(_repository.getScript(message.getSender().toString(), scriptName))); - } - - // Extra arguments - { - message.setSubject("PUTSCRIPT \"" + scriptName + "\" extra"); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO \"Too many arguments: extra\"", response); - } + @Test + public final void testPutScript() throws Exception { + when(sieveParser.parse(SCRIPT_CONTENT)).thenAnswer(new Answer<List<String>>() { + public List<String> answer(InvocationOnMock invocationOnMock) throws Throwable { + return Lists.newArrayList("warning1", "warning2"); + } + }); + MimeMessage message = prepareMessageWithAttachment(SCRIPT_CONTENT, "PUTSCRIPT \"" + SCRIPT_NAME + "\"", SIEVE_LOCALHOST, USER); + Mail mail = new FakeMail(); + mail.setMessage(message); + mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString()); + mailet.service(mail); + ensureResponse("Re: PUTSCRIPT \"" + SCRIPT_NAME + "\"", message.getSender(), "OK (WARNINGS) \"warning1\" \"warning2\""); + } - // Syntax Error - { - message = new MimeMessage(Session.getDefaultInstance(new Properties())); - message.setSubject("PUTSCRIPT \"" + scriptName + "\""); - message.setSender(new InternetAddress("test@localhost")); - message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost")); - multipart = new MimeMultipart(); - scriptPart = new MimeBodyPart(); - scriptPart.setDataHandler( - new DataHandler( - new ByteArrayDataSource( - "SyntaxException", - "application/sieve; charset=UTF-8") - )); - scriptPart.setHeader("Content-Type", "application/sieve; charset=UTF-8"); - scriptPart.setDisposition(MimeBodyPart.ATTACHMENT); - scriptPart.setFileName(scriptName); - multipart.addBodyPart(scriptPart); - message.setContent(multipart); - message.saveChanges(); - mail.setMessage(message); - mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString()); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertTrue(response.startsWith("NO \"Syntax Error: ")); - assertEquals(scriptContent, IOUtils.toString(_repository.getScript(message.getSender().toString(), scriptName))); - } + @Test + public final void testPutScriptExtraArgs() throws Exception { + MimeMessage message = prepareMessageWithAttachment(SCRIPT_CONTENT, "PUTSCRIPT \"" + SCRIPT_NAME + "\" extra", SIEVE_LOCALHOST, USER); + Mail mail = new FakeMail(); + mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: PUTSCRIPT \"" + SCRIPT_NAME + "\" extra", message.getSender(), "NO \"Too many arguments: extra\""); + } - // No script - { - message = new MimeMessage(Session.getDefaultInstance(new Properties())); - message.setSubject("PUTSCRIPT \"" + scriptName + "\""); - message.setSender(new InternetAddress("test@localhost")); - message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost")); - message.saveChanges(); - mail.setMessage(message); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO \"Missing argument: script content\"", response); - } + @Test + public final void testPutScriptSyntaxError() throws Exception { + doThrow(new SyntaxException("error message")).when(sieveParser).parse(SYNTAX_EXCEPTION); + MimeMessage message = prepareMessageWithAttachment(SYNTAX_EXCEPTION, "PUTSCRIPT \"" + SCRIPT_NAME + "\"", SIEVE_LOCALHOST, USER); + Mail mail = new FakeMail(); + mail.setMessage(message); + mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString()); + mailet.service(mail); + ensureResponse("Re: PUTSCRIPT \"" + SCRIPT_NAME + "\"", message.getSender(), "NO \"Syntax Error: error message\""); + } - // No script name - { - message = new MimeMessage(Session.getDefaultInstance(new Properties())); - message.setSubject("PUTSCRIPT"); - message.setSender(new InternetAddress("test@localhost")); - message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost")); - message.saveChanges(); - mail.setMessage(message); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO \"Missing argument: script name\"", response); - } + @Test + public final void testPutScriptNoScript() throws Exception { + MimeMessage message = prepareMimeMessage("PUTSCRIPT \"" + SCRIPT_NAME + "\"", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: PUTSCRIPT \"" + SCRIPT_NAME + "\"", message.getSender(), "NO \"Missing argument: script content\""); } @Test - public final void testGetScript() throws MessagingException, IOException, UserNotFoundException, StorageException, QuotaExceededException, DuplicateUserException { - String scriptName = "scriptName"; - String scriptContent = "line1\r\nline2"; - String user = "test@localhost"; - _repository.addUser(user); - _repository.putScript(user, scriptName, scriptContent); - MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties())); - message.setSubject("GETSCRIPT \"" + scriptName + "\""); - message.setSender(new InternetAddress(user)); - message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost")); - message.saveChanges(); - Mail mail = new MockMail(); + public final void testPutScriptNoScriptName() throws Exception { + MimeMessage message = prepareMimeMessage("PUTSCRIPT", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: PUTSCRIPT", message.getSender(), "NO \"Missing argument: script name\""); + } - // Unauthorised - { - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - assertNotNull(result); - // Check the subject header - assertEquals("Re: GETSCRIPT \"" + scriptName + "\"", result.getSubject()); - // Check the recipient - Address[] recipients = result.getRecipients(RecipientType.TO); - assertEquals(1, recipients.length); - assertEquals(message.getSender(), recipients[0]); - // Check the response - MimeMultipart multipart = (MimeMultipart) result.getContent(); - assertEquals(1, multipart.getCount()); - BodyPart part = multipart.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO", response); - } + @Test + public final void testGetScriptNonAuthorized() throws Exception { + MimeMessage message = prepareMimeMessage("GETSCRIPT \"" + SCRIPT_NAME + "\"", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: GETSCRIPT \"" + SCRIPT_NAME + "\"", message.getSender(), "NO"); + } - // Authorised - { - mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, user); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart multipart = (MimeMultipart) result.getContent(); - assertEquals(2, multipart.getCount()); - BodyPart part = multipart.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("OK", response); - BodyPart part2 = multipart.getBodyPart(1); - String script = null; - Scanner scanner = null; - try { - scanner = new Scanner((InputStream) part2.getContent(), "UTF-8").useDelimiter("\\A"); - script = scanner.next(); - } finally { - if (null != scanner) { - scanner.close(); - } + @Test + public final void testGetScript() throws Exception { + when(sieveRepository.getScript(USER, SCRIPT_NAME)).thenAnswer(new Answer<String>() { + public String answer(InvocationOnMock invocationOnMock) throws Throwable { + return SCRIPT_CONTENT; } - assertEquals(scriptContent, script); - } - - // Extra arguments - { - message.setSubject("GETSCRIPT \"" + scriptName + "\" extra"); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO \"Too many arguments: extra\"", response); - } - - // No such script - { - message = new MimeMessage(Session.getDefaultInstance(new Properties())); - message.setSubject("GETSCRIPT \"" + scriptName + "X\""); - message.setSender(new InternetAddress(user)); - message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost")); - message.saveChanges(); - mail.setMessage(message); - mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, user); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart multipart = (MimeMultipart) result.getContent(); - assertEquals(1, multipart.getCount()); - BodyPart part = multipart.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO (NONEXISTENT) \"There is no script by that name\"", response); - } - - // No such user - { - message = new MimeMessage(Session.getDefaultInstance(new Properties())); - message.setSubject("GETSCRIPT \"" + scriptName + "\""); - message.setSender(new InternetAddress(user + "X")); - message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost")); - message.saveChanges(); - mail.setMessage(message); - mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, user); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart multipart = (MimeMultipart) result.getContent(); - assertEquals(1, multipart.getCount()); - BodyPart part = multipart.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO (NONEXISTENT) \"There is no script by that name\"", response); - } - - // No script name - { - message = new MimeMessage(Session.getDefaultInstance(new Properties())); - message.setSubject("GETSCRIPT"); - message.setSender(new InternetAddress(user)); - message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost")); - message.saveChanges(); - mail.setMessage(message); - mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, user); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart multipart = (MimeMultipart) result.getContent(); - assertEquals(1, multipart.getCount()); - BodyPart part = multipart.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO \"Missing argument: script name\"", response); - } - + }); + MimeMessage message = prepareMimeMessage("GETSCRIPT \"" + SCRIPT_NAME + "\"", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, USER); + mailet.service(mail); + ensureResponse("Re: GETSCRIPT \"" + SCRIPT_NAME + "\"", message.getSender(), "OK", SCRIPT_CONTENT); } - @Test - public final void testCheckScript() throws MessagingException, IOException, UserNotFoundException, ScriptNotFoundException { - MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties())); - String scriptName = "scriptName"; - String scriptContent = "scriptContent"; - message.setSubject("CHECKSCRIPT"); - message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost")); - message.setSender(new InternetAddress("test@localhost")); - message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost")); - MimeMultipart multipart = new MimeMultipart(); - MimeBodyPart scriptPart = new MimeBodyPart(); - scriptPart.setDataHandler( - new DataHandler( - new ByteArrayDataSource( - scriptContent, - "application/sieve; charset=UTF-8") - )); - scriptPart.setHeader("Content-Type", "application/sieve; charset=UTF-8"); - scriptPart.setDisposition(MimeBodyPart.ATTACHMENT); - scriptPart.setFileName(scriptName); - multipart.addBodyPart(scriptPart); - message.setContent(multipart); - message.saveChanges(); - Mail mail = new MockMail(); + public final void testGetScriptExtraArgs() throws Exception { + MimeMessage message = prepareMimeMessage("GETSCRIPT \"" + SCRIPT_NAME + "\" extra", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: GETSCRIPT \"" + SCRIPT_NAME + "\" extra", message.getSender(), "NO \"Too many arguments: extra\""); + } - // Unauthorised - { - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - assertNotNull(result); - // Check the subject header - assertEquals("Re: CHECKSCRIPT", result.getSubject()); - // Check the recipient - Address[] recipients = result.getRecipients(RecipientType.TO); - assertEquals(1, recipients.length); - assertEquals(message.getSender(), recipients[0]); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO", response.trim()); - } - - // Authorised - { - mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString()); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("OK (WARNINGS) \"warning1\" \"warning2\"", response); - } - - // Extra arguments should be rejected - { - message.setSubject("CHECKSCRIPT extra"); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO \"Too many arguments: extra\"", response); - } - - // Syntax Error - { - message = new MimeMessage(Session.getDefaultInstance(new Properties())); - message.setSubject("CHECKSCRIPT"); - message.setSender(new InternetAddress("test@localhost")); - message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost")); - multipart = new MimeMultipart(); - scriptPart = new MimeBodyPart(); - scriptPart.setDataHandler( - new DataHandler( - new ByteArrayDataSource( - "SyntaxException", - "application/sieve; charset=UTF-8") - )); - scriptPart.setHeader("Content-Type", "application/sieve; charset=UTF-8"); - scriptPart.setDisposition(MimeBodyPart.ATTACHMENT); - scriptPart.setFileName(scriptName); - multipart.addBodyPart(scriptPart); - message.setContent(multipart); - message.saveChanges(); - mail.setMessage(message); - mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString()); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertTrue(response.startsWith("NO \"Syntax Error: ")); - } - - // No script - { - message = new MimeMessage(Session.getDefaultInstance(new Properties())); - message.setSubject("CHECKSCRIPT"); - message.setSender(new InternetAddress("test@localhost")); - message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost")); - message.saveChanges(); - mail.setMessage(message); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO \"Script part not found in this message\"", response); - } - + @Test + public final void testGetScriptNoScript() throws Exception { + doThrow(new ScriptNotFoundException()).when(sieveRepository).getScript(USER, SCRIPT_NAME); + MimeMessage message = prepareMimeMessage("GETSCRIPT \"" + SCRIPT_NAME + "\"", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, USER); + mailet.service(mail); + ensureResponse("Re: GETSCRIPT \"" + SCRIPT_NAME + "\"", message.getSender(), "NO (NONEXISTENT) \"There is no script by that name\""); } @Test - public final void testDeleteScript() throws DuplicateUserException, StorageException, UserNotFoundException, QuotaExceededException, MessagingException, IOException { - String scriptName = "scriptName"; + public final void testGetScriptNoScriptName() throws Exception { String scriptContent = "line1\r\nline2"; - String user = "test@localhost"; - _repository.addUser(user); - _repository.putScript(user, scriptName, scriptContent); - MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties())); - message.setSubject("DELETESCRIPT \"" + scriptName + "\""); - message.setSender(new InternetAddress(user)); - message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost")); - message.saveChanges(); - Mail mail = new MockMail(); + sieveRepository.putScript(USER, SCRIPT_NAME, scriptContent); + MimeMessage message = prepareMimeMessage("GETSCRIPT", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); mail.setMessage(message); - // Unauthorised - { - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - assertNotNull(result); - // Check the subject header - assertEquals("Re: DELETESCRIPT \"" + scriptName + "\"", result.getSubject()); - // Check the recipient - Address[] recipients = result.getRecipients(RecipientType.TO); - assertEquals(1, recipients.length); - assertEquals(message.getSender(), recipients[0]); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO", response.trim()); - } - - // Authorised - { - mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString()); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("OK", response.trim()); - } - - // Extra arguments - { - message.setSubject("DELETESCRIPT \"" + scriptName + "\" extra"); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO \"Too many arguments: extra\"", response); - } - - // No script name - { - message.setSubject("DELETESCRIPT"); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO \"Missing argument: script name\"", response.trim()); - } - + mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, USER); + mailet.service(mail); + ensureResponse("Re: GETSCRIPT", message.getSender(), "NO \"Missing argument: script name\""); } @Test - public final void testHaveSpace() throws DuplicateUserException, StorageException, UserNotFoundException, QuotaExceededException, MessagingException, IOException { - String scriptName = "scriptName"; - String scriptContent = "line1\r\nline2"; - String user = "test@localhost"; - _repository.addUser(user); - _repository.putScript(user, scriptName, scriptContent); - MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties())); - message.setSubject("HAVESPACE \"" + scriptName + "\" 1"); - message.setSender(new InternetAddress(user)); - message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost")); - message.saveChanges(); - Mail mail = new MockMail(); + public final void testCheckScriptUnauthorised() throws Exception { + MimeMessage message = prepareMessageWithAttachment(SCRIPT_CONTENT, "CHECKSCRIPT", SIEVE_LOCALHOST, USER); + Mail mail = new FakeMail(); mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: CHECKSCRIPT", message.getSender(), "NO"); + } - // Unauthorised - { - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - assertNotNull(result); - // Check the subject header - assertEquals("Re: HAVESPACE \"" + scriptName + "\" 1", result.getSubject()); - // Check the recipient - Address[] recipients = result.getRecipients(RecipientType.TO); - assertEquals(1, recipients.length); - assertEquals(message.getSender(), recipients[0]); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO", response.trim()); - } - - // Authorised - { - mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString()); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("OK", response.trim()); - } + @Test + public final void testCheckScript() throws Exception { + when(sieveParser.parse(SCRIPT_CONTENT)).thenAnswer(new Answer<List<String>>() { + public List<String> answer(InvocationOnMock invocationOnMock) throws Throwable { + return Lists.newArrayList("warning1", "warning2"); + } + }); + MimeMessage message = prepareMessageWithAttachment(SCRIPT_CONTENT, "CHECKSCRIPT", SIEVE_LOCALHOST, USER); + Mail mail = new FakeMail(); + mail.setMessage(message); + mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString()); + mailet.service(mail); + ensureResponse("Re: CHECKSCRIPT", message.getSender(), "OK (WARNINGS) \"warning1\" \"warning2\""); + } - // Extra arguments - { - message.setSubject("HAVESPACE \"" + scriptName + "\" 1 extra"); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO \"Too many arguments: extra\"", response); - } + @Test + public final void testCheckScriptExtraArgs() throws Exception { + MimeMessage message = prepareMessageWithAttachment(SCRIPT_CONTENT, "CHECKSCRIPT extra", SIEVE_LOCALHOST, USER); + Mail mail = new FakeMail(); + mail.setMessage(message); + mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString()); + mailet.service(mail); + ensureResponse("Re: CHECKSCRIPT extra", message.getSender(), "NO \"Too many arguments: extra\""); + } - // No script name - { - message.setSubject("HAVESPACE"); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO \"Missing argument: script name\"", response.trim()); - } + @Test + public final void testCheckScriptSyntaxError() throws Exception { + doThrow(new SyntaxException("error message")).when(sieveParser).parse(SYNTAX_EXCEPTION); + MimeMessage message = prepareMessageWithAttachment(SYNTAX_EXCEPTION, "CHECKSCRIPT", SIEVE_LOCALHOST, USER); + Mail mail = new FakeMail(); + mail.setMessage(message); + mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString()); + mailet.service(mail); + ensureResponse("Re: CHECKSCRIPT", message.getSender(), "NO \"Syntax Error: error message\""); + } - // No script size - { - message.setSubject("HAVESPACE \"" + scriptName + "\""); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO \"Missing argument: script size\"", response.trim()); - } + @Test + public final void testCheckScriptNoScript() throws Exception { + MimeMessage message = prepareMimeMessage("CHECKSCRIPT", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString()); + mailet.service(mail); + ensureResponse("Re: CHECKSCRIPT", message.getSender(), "NO \"Script part not found in this message\""); + } - // Invalid script size - { - message.setSubject("HAVESPACE \"" + scriptName + "\" X"); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO \"Invalid argument: script size\"", response.trim()); - } + @Test + public final void testDeleteScriptUnauthenticated() throws Exception { + MimeMessage message = prepareMimeMessage("DELETESCRIPT \"" + SCRIPT_NAME + "\"", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: DELETESCRIPT \"" + SCRIPT_NAME + "\"", message.getSender(), "NO"); + } + @Test + public final void testDeleteScript() throws Exception { + MimeMessage message = prepareMimeMessage("DELETESCRIPT \"" + SCRIPT_NAME + "\"", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString()); + mailet.service(mail); + ensureResponse("Re: DELETESCRIPT \"" + SCRIPT_NAME + "\"", message.getSender(), "OK"); } @Test - public final void testListScripts() throws MessagingException, DuplicateUserException, StorageException, UserNotFoundException, QuotaExceededException, ScriptNotFoundException, IOException { - String scriptName1 = "scriptName1"; - String scriptName2 = "scriptName2"; - String scriptContent = "line1\r\nline2"; - String user = "test@localhost"; - _repository.addUser(user); - _repository.putScript(user, scriptName1, scriptContent); - _repository.putScript(user, scriptName2, scriptContent); - _repository.setActive(user, scriptName2); - MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties())); - message.setSubject("LISTSCRIPTS"); - message.setSender(new InternetAddress(user)); - message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost")); - message.saveChanges(); - Mail mail = new MockMail(); + public final void testDeleteScriptExtraArgs() throws Exception { + MimeMessage message = prepareMimeMessage("DELETESCRIPT \"" + SCRIPT_NAME + "\" extra", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: DELETESCRIPT \"" + SCRIPT_NAME + "\" extra", message.getSender(), "NO \"Too many arguments: extra\""); + } - // Unauthorised - { - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - assertNotNull(result); - // Check the subject header - assertEquals("Re: LISTSCRIPTS", result.getSubject()); - // Check the recipient - Address[] recipients = result.getRecipients(RecipientType.TO); - assertEquals(1, recipients.length); - assertEquals(message.getSender(), recipients[0]); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO", response.trim()); - } + @Test + public final void testDeleteScriptNoScriptName() throws Exception { + MimeMessage message = prepareMimeMessage("DELETESCRIPT", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: DELETESCRIPT", message.getSender(), "NO \"Missing argument: script name\""); + } - // Authorised - { - mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString()); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("\"scriptName2\" ACTIVE\r\n\"scriptName1\"\r\nOK", response.trim()); - } + @Test + public final void testHaveSpaceUnauthenticated() throws Exception { + MimeMessage message = prepareMimeMessage("HAVESPACE \"" + SCRIPT_NAME + "\" 1", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: HAVESPACE \"" + SCRIPT_NAME + "\" 1", message.getSender(), "NO"); + } - // Extra arguments - { - message.setSubject("LISTSCRIPTS extra"); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO \"Too many arguments: extra\"", response); - } + @Test + public final void testHaveSpace() throws Exception { + MimeMessage message = prepareMimeMessage("HAVESPACE \"" + SCRIPT_NAME + "\" 1", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString()); + mailet.service(mail); + ensureResponse("Re: HAVESPACE \"" + SCRIPT_NAME + "\" 1", message.getSender(), "OK"); + } + @Test + public final void testHaveSpaceExtraArgs() throws Exception { + MimeMessage message = prepareMimeMessage("HAVESPACE \"" + SCRIPT_NAME + "\" 1 extra", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: HAVESPACE \"" + SCRIPT_NAME + "\" 1 extra", message.getSender(), "NO \"Too many arguments: extra\""); } @Test - public final void testRenameScripts() throws MessagingException, DuplicateUserException, StorageException, UserNotFoundException, QuotaExceededException, IOException { - String oldScriptName = "oldScriptName"; - String newScriptName = "newScriptName"; - String scriptContent = "line1\r\nline2"; - String user = "test@localhost"; - _repository.addUser(user); - _repository.putScript(user, oldScriptName, scriptContent); - MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties())); - message.setSubject("RENAMESCRIPT \"" + oldScriptName + "\" \"" + newScriptName + "\""); - message.setSender(new InternetAddress(user)); - message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost")); - message.saveChanges(); - Mail mail = new MockMail(); + public final void testHaveSpaceNoScriptName() throws Exception { + MimeMessage message = prepareMimeMessage("HAVESPACE", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: HAVESPACE", message.getSender(), "NO \"Missing argument: script name\""); + } - // Unauthorised - { - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - assertNotNull(result); - // Check the subject header - assertEquals("Re: RENAMESCRIPT \"" + oldScriptName + "\" \"" + newScriptName + "\"", result.getSubject()); - // Check the recipient - Address[] recipients = result.getRecipients(RecipientType.TO); - assertEquals(1, recipients.length); - assertEquals(message.getSender(), recipients[0]); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO", response.trim()); - } + @Test + public final void testHaveSpaceNoScriptSize() throws Exception { + MimeMessage message = prepareMimeMessage("HAVESPACE \"" + SCRIPT_NAME + "\"", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: HAVESPACE \"" + SCRIPT_NAME + "\"", message.getSender(), "NO \"Missing argument: script size\""); + } - // Authorised - { - mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString()); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("OK", response.trim()); - } + @Test + public final void testHaveSpaceInvalidScriptSize() throws Exception { + MimeMessage message = prepareMimeMessage("HAVESPACE \"" + SCRIPT_NAME + "\" X", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: HAVESPACE \"" + SCRIPT_NAME + "\" X", message.getSender(), "NO \"Invalid argument: script size\""); + } - // Extra arguments - { - message.setSubject("RENAMESCRIPT \"" + oldScriptName + "\" \"" + newScriptName + "\" extra"); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO \"Too many arguments: extra\"", response); - } + @Test + public final void testListScriptsUnauthorised() throws Exception { + MimeMessage message = prepareMimeMessage("LISTSCRIPTS", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: LISTSCRIPTS", message.getSender(), "NO"); + } - // No script names - { - message.setSubject("RENAMESCRIPT"); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO \"Missing argument: old script name\"", response.trim()); - } + @Test + public final void testListScripts() throws Exception { + when(sieveRepository.listScripts(USER)).thenAnswer(new Answer<List<ScriptSummary>>() { + @Override + public List<ScriptSummary> answer(InvocationOnMock invocationOnMock) throws Throwable { + return Lists.newArrayList(new ScriptSummary("scriptName2", true), new ScriptSummary("scriptName1", false)); + } + }); + MimeMessage message = prepareMimeMessage("LISTSCRIPTS", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString()); + mailet.service(mail); + ensureResponse("Re: LISTSCRIPTS", message.getSender(), "\"scriptName2\" ACTIVE\r\n\"scriptName1\"\r\nOK"); + } - // No new script name - { - message.setSubject("RENAMESCRIPT \"" + oldScriptName + "\""); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO \"Missing argument: new script name\"", response.trim()); - } + @Test + public final void testListScriptsExtraArgs() throws Exception { + MimeMessage message = prepareMimeMessage("LISTSCRIPTS extra", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString()); + mailet.service(mail); + ensureResponse("Re: LISTSCRIPTS extra", message.getSender(), "NO \"Too many arguments: extra\""); + } + @Test + public final void testRenameScriptsUnauthorised() throws Exception { + sieveRepository.putScript(USER, OLD_SCRIPT_NAME, NEW_SCRIPT_NAME); + MimeMessage message = prepareMimeMessage("RENAMESCRIPT \"" + OLD_SCRIPT_NAME + "\" \"" + NEW_SCRIPT_NAME + "\"", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: RENAMESCRIPT \"" + OLD_SCRIPT_NAME + "\" \"" + NEW_SCRIPT_NAME + "\"", message.getSender(), "NO"); } @Test - public final void testSetActive() throws DuplicateUserException, StorageException, UserNotFoundException, QuotaExceededException, MessagingException, IOException { - String scriptName = "scriptName"; - String scriptContent = "line1\r\nline2"; - String user = "test@localhost"; - _repository.addUser(user); - _repository.putScript(user, scriptName, scriptContent); - MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties())); - message.setSubject("SETACTIVE \"" + scriptName + "\""); - message.setSender(new InternetAddress(user)); - message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost")); - message.saveChanges(); - Mail mail = new MockMail(); + public final void testRenameScripts() throws Exception { + sieveRepository.putScript(USER, OLD_SCRIPT_NAME, NEW_SCRIPT_NAME); + MimeMessage message = prepareMimeMessage("RENAMESCRIPT \"" + OLD_SCRIPT_NAME + "\" \"" + NEW_SCRIPT_NAME + "\"", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); mail.setMessage(message); + mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString()); + mailet.service(mail); + ensureResponse("Re: RENAMESCRIPT \"" + OLD_SCRIPT_NAME + "\" \"" + NEW_SCRIPT_NAME + "\"", message.getSender(), "OK"); + } - // Unauthorised - { - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - assertNotNull(result); - // Check the subject header - assertEquals("Re: SETACTIVE \"" + scriptName + "\"", result.getSubject()); - // Check the recipient - Address[] recipients = result.getRecipients(RecipientType.TO); - assertEquals(1, recipients.length); - assertEquals(message.getSender(), recipients[0]); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO", response.trim()); - } + @Test + public final void testRenameScriptsExtraArgs() throws Exception { + sieveRepository.putScript(USER, OLD_SCRIPT_NAME, NEW_SCRIPT_NAME); + MimeMessage message = prepareMimeMessage("RENAMESCRIPT \"" + OLD_SCRIPT_NAME + "\" \"" + NEW_SCRIPT_NAME + "\" extra", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: RENAMESCRIPT \"" + OLD_SCRIPT_NAME + "\" \"" + NEW_SCRIPT_NAME + "\" extra", message.getSender(), "NO \"Too many arguments: extra\""); + } - // Authorised - { - mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString()); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("OK", response.trim()); - } + @Test + public final void testRenameScriptsNoScriptName() throws Exception { + sieveRepository.putScript(USER, OLD_SCRIPT_NAME, NEW_SCRIPT_NAME); + MimeMessage message = prepareMimeMessage("RENAMESCRIPT", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: RENAMESCRIPT", message.getSender(), "NO \"Missing argument: old script name\""); + } - // Extra arguments - { - message.setSubject("SETACTIVE \"" + scriptName + "\" extra"); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO \"Too many arguments: extra\"", response); - } + @Test + public final void testRenameScriptsNoNewScriptName() throws Exception { + sieveRepository.putScript(USER, OLD_SCRIPT_NAME, NEW_SCRIPT_NAME); + MimeMessage message = prepareMimeMessage("RENAMESCRIPT \"" + OLD_SCRIPT_NAME + "\"", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: RENAMESCRIPT \"" + OLD_SCRIPT_NAME + "\"", message.getSender(), "NO \"Missing argument: new script name\""); + } - // No script name - { - message.setSubject("SETACTIVE"); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO \"Missing argument: script name\"", response.trim()); - } + @Test + public final void testSetActiveUnauthorised() throws Exception { + MimeMessage message = prepareMimeMessage("SETACTIVE \"" + SCRIPT_NAME + "\"", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: SETACTIVE \"" + SCRIPT_NAME + "\"", message.getSender(), "NO"); + } - // Deactivated - { - message.setSubject("SETACTIVE \"\""); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("OK", response.trim()); - boolean thrown = false; - try { - _repository.getActive(user); - } catch (ScriptNotFoundException ex) { - thrown = true; - } - assertTrue("Expected ScriptNotFoundException", thrown); - } + @Test + public final void testSetActive() throws Exception { + MimeMessage message = prepareMimeMessage("SETACTIVE \"" + SCRIPT_NAME + "\"", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString()); + mailet.service(mail); + ensureResponse("Re: SETACTIVE \"" + SCRIPT_NAME + "\"", message.getSender(), "OK"); + } + @Test + public final void testSetActiveExtraArgs() throws Exception { + MimeMessage message = prepareMimeMessage("SETACTIVE \"" + SCRIPT_NAME + "\" extra", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: SETACTIVE \"" + SCRIPT_NAME + "\" extra", message.getSender(), "NO \"Too many arguments: extra\""); } @Test - public final void testGetActive() throws MessagingException, UserNotFoundException, ScriptNotFoundException, StorageException, QuotaExceededException, DuplicateUserException, IOException { - String scriptName = "scriptName"; - String scriptContent = "line1\r\nline2"; - String user = "test@localhost"; - _repository.addUser(user); - _repository.putScript(user, scriptName, scriptContent); - _repository.setActive(user, scriptName); - MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties())); - message.setSubject("GETACTIVE"); - message.setSender(new InternetAddress(user)); - message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost")); - message.saveChanges(); - Mail mail = new MockMail(); + public final void testSetActiveNoScriptName() throws Exception { + MimeMessage message = prepareMimeMessage("SETACTIVE", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: SETACTIVE", message.getSender(), "NO \"Missing argument: script name\""); + } - // Unauthorised - { - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - assertNotNull(result); - // Check the subject header - assertEquals("Re: GETACTIVE", result.getSubject()); - // Check the recipient - Address[] recipients = result.getRecipients(RecipientType.TO); - assertEquals(1, recipients.length); - assertEquals(message.getSender(), recipients[0]); - // Check the response - MimeMultipart multipart = (MimeMultipart) result.getContent(); - assertEquals(1, multipart.getCount()); - BodyPart part = multipart.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO", response); - } + @Test + public final void testGetActiveUnauthorized() throws Exception { + MimeMessage message = prepareMimeMessage("GETACTIVE", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: GETACTIVE", message.getSender(), "NO"); + } - // Authorised - { - mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, user); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart multipart = (MimeMultipart) result.getContent(); - assertEquals(2, multipart.getCount()); - BodyPart part = multipart.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("OK", response); - BodyPart part2 = multipart.getBodyPart(1); - String script = null; - Scanner scanner = null; - try { - scanner = new Scanner((InputStream) part2.getContent(), "UTF-8").useDelimiter("\\A"); - script = scanner.next(); - } finally { - if (null != scanner) { - scanner.close(); - } + @Test + public final void testGetActive() throws Exception { + when(sieveRepository.getActive(USER)).thenAnswer(new Answer<String>() { + public String answer(InvocationOnMock invocationOnMock) throws Throwable { + return SCRIPT_CONTENT; } - assertEquals(scriptContent, script); - } - - // Extra arguments - { - message.setSubject("GETACTIVE extra"); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("NO \"Too many arguments: extra\"", response); - } - - // Deactivated - { - _repository.setActive(user, ""); - message.setSubject("GETACTIVE"); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - // Check the response - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertTrue(response.trim().startsWith("NO (NONEXISTENT)")); - } - + }); + MimeMessage message = prepareMimeMessage("GETACTIVE", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, USER); + mailet.service(mail); + ensureResponse("Re: GETACTIVE", message.getSender(), "OK", SCRIPT_CONTENT); } - @Ignore("Ignore this test as it depends of your environment (file path changes with your position in the project)") @Test - public final void testHelp() throws MessagingException, IOException { - String user = "test@localhost"; - MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties())); - message.setSubject("HELP"); - message.setSender(new InternetAddress(user)); - message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost")); - message.saveChanges(); - Mail mail = new MockMail(); + public final void testGetActiveExtraArgs() throws Exception { + MimeMessage message = prepareMimeMessage("GETACTIVE extra", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); mail.setMessage(message); + message.setSubject("GETACTIVE extra"); + message.saveChanges(); + mailet.service(mail); + ensureResponse("Re: GETACTIVE extra", message.getSender(), "NO \"Too many arguments: extra\""); + } - // Explicit invocation - { - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - assertNotNull(result); - // Check the subject header - assertEquals("Re: HELP", result.getSubject()); - // Check the recipient - Address[] recipients = result.getRecipients(RecipientType.TO); - assertEquals(1, recipients.length); - assertEquals(message.getSender(), recipients[0]); - // Check the response - MimeMultipart multipart = (MimeMultipart) result.getContent(); - assertEquals(1, multipart.getCount()); - BodyPart part = multipart.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("Help text", response); - } - - // Extra arguments - { - message.setSubject("HELP extra"); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - MimeMultipart content = (MimeMultipart) result.getContent(); - assertEquals(1, content.getCount()); - BodyPart part = content.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("Help text", response); - } + @Test + public final void testGetActiveDesactivated() throws Exception { + MimeMessage message = prepareMimeMessage("GETACTIVE", USER, SIEVE_LOCALHOST); + Mail mail = new FakeMail(); + mail.setMessage(message); + mailet.service(mail); + ensureResponse("Re: GETACTIVE", message.getSender(), "NO"); + } - // Implicit invocation - no subject header - { - message.removeHeader("subject"); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - assertNotNull(result); - // Check the subject header - assertEquals(null, result.getSubject()); - // Check the response - MimeMultipart multipart = (MimeMultipart) result.getContent(); - assertEquals(1, multipart.getCount()); - BodyPart part = multipart.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("Help text", response); - } + private MimeMessage prepareMimeMessage(String subject, String sender, String recipient) throws MessagingException { + MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties())); + message.setSubject(subject); + message.setSender(new InternetAddress(sender)); + message.setRecipient(RecipientType.TO, new InternetAddress(recipient)); + message.saveChanges(); + return message; + } - // Implicit invocation - empty subject - { - message.setSubject(""); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - assertNotNull(result); - // Check the subject header - // Javamail returns "Re: " instead Geronimo returns "Re:" (no trailing space) - assertEquals("Re:", result.getSubject().trim()); - // Check the response - MimeMultipart multipart = (MimeMultipart) result.getContent(); - assertEquals(1, multipart.getCount()); - BodyPart part = multipart.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("Help text", response); - } + private MimeMessage prepareMessageWithAttachment(String scriptContent, String subject, String recipient, String sender) throws MessagingException, IOException { + MimeMessage message = prepareMimeMessage(subject, recipient, sender); + MimeMultipart multipart = new MimeMultipart(); + MimeBodyPart scriptPart = new MimeBodyPart(); + scriptPart.setDataHandler( + new DataHandler( + new ByteArrayDataSource( + scriptContent, + "application/sieve; charset=UTF-8") + )); + scriptPart.setDisposition(MimeBodyPart.ATTACHMENT); + // setting a DataHandler with no mailcap definition is not + // supported by the specs. Javamail activation still work, + // but Geronimo activation translate it to text/plain. + // Let's manually force the header. + scriptPart.setHeader("Content-Type", "application/sieve; charset=UTF-8"); + scriptPart.setFileName(SCRIPT_NAME); + multipart.addBodyPart(scriptPart); + message.setContent(multipart); + message.saveChanges(); + return message; + } - // Implicit invocation - invalid command - { - message.setSubject("INVALID"); - message.saveChanges(); - _mailet.service(mail); - MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage(); - assertNotNull(result); - // Check the subject header - assertEquals("Re: INVALID", result.getSubject()); - // Check the response - MimeMultipart multipart = (MimeMultipart) result.getContent(); - assertEquals(1, multipart.getCount()); - BodyPart part = multipart.getBodyPart(0); - String response = (String) part.getContent(); - assertEquals("Help text", response); + private void ensureResponse(String subject, Address recipient, String... contents) throws MessagingException, IOException { + MimeMessage result = ((FakeMailContext) mailet.getMailetContext()).getSentMessage(); + assertThat(result.getSubject()).isEqualTo(subject); + assertThat(result.getRecipients(RecipientType.TO)).containsOnly(recipient); + MimeMultipart multipart = (MimeMultipart) result.getContent(); + assertThat(multipart.getCount()).isEqualTo(contents.length); + for(int i = 0; i < contents.length; i++) { + if (multipart.getBodyPart(i).getContent() instanceof String) { + assertThat(((String) multipart.getBodyPart(i).getContent()).trim()).isEqualTo(contents[i]); + } else { + assertThat(IOUtils.toString((ByteArrayInputStream) multipart.getBodyPart(i).getContent()).trim()).isEqualTo(contents[i]); + } } } - /* - @Test - public final void testMessageWrap() throws MessagingException, IOException { - MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties())); - message.setSubject("CAPABILITY"); - message.setSender(new InternetAddress("test@localhost")); - message.saveChanges(); - Mail mail = new MockMail(); - mail.setMessage(message); - - _parser.setExtensions(Arrays.asList(new String[]{"a","b","c"})); - - _mailet.service(mail); - MimeMessage result = ((MockMailetContext)_mailet.getMailetContext()).getMessage(); - MimeMessageWrapper wrapped = new MimeMessageWrapper(result); + private void ensureResponseContains(String subject, Address recipient, String... contents) throws MessagingException, IOException { + MimeMessage result = ((FakeMailContext) mailet.getMailetContext()).getSentMessage(); + assertThat(result.getSubject()).isEqualTo(subject); + assertThat(result.getRecipients(RecipientType.TO)).containsOnly(recipient); + MimeMultipart multipart = (MimeMultipart) result.getContent(); + assertThat(((String) multipart.getBodyPart(0).getContent()).split("\r\n")).containsOnly(contents); } - */ -} +} \ No newline at end of file
Added: james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/RoleTest.java URL: http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/RoleTest.java?rev=1720561&view=auto ============================================================================== --- james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/RoleTest.java (added) +++ james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/RoleTest.java Thu Dec 17 14:51:18 2015 @@ -0,0 +1,56 @@ +package org.apache.james.jmap.model; +/**************************************************************** + * 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. * + ****************************************************************/ + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Test; + +import java.util.Locale; +import java.util.Optional; + +public class RoleTest { + + @Test + public void fromShouldReturnInbox() { + assertThat(Role.from("inbox")).isEqualTo(Optional.of(Role.INBOX)); + } + + @Test + public void fromShouldReturnEmptyWhenUnknownValue() { + assertThat(Role.from("jjjj")).isEqualTo(Optional.empty()); + } + + @Test + public void fromShouldReturnInboxWhenContainsUppercaseValue() { + assertThat(Role.from("InBox")).isEqualTo(Optional.of(Role.INBOX)); + } + + @Test + public void fromShouldReturnInboxWhenContainsUppercaseValueInTurkish() { + Locale previousLocale = Locale.getDefault(); + Locale.setDefault(Locale.forLanguageTag("tr")); + try { + assertThat(Role.from("InBox")).isEqualTo(Optional.of(Role.INBOX)); + } finally { + Locale.setDefault(previousLocale); + } + } + +} \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
