public static MultipartBuilder create(String subType) { return new MultipartBuilder().setSubType(subType); }
@Test public void extractReportShouldRejectMultipartWithSinglePart() throws Exception { ExtractMDNOriginalJMAPMessageId testee = new ExtractMDNOriginalJMAPMessageId(mock(MailboxManager.class)); Message message = Message.Builder.of() .setBody( MultipartBuilder.create() .setSubType("report") .addTextPart("content", StandardCharsets.UTF_8) .build()) .build(); assertThat(testee.extractReport(message)).isEmpty(); }
@Test public void extractReportShouldRejectSecondPartWithBadContentType() throws IOException { ExtractMDNOriginalJMAPMessageId testee = new ExtractMDNOriginalJMAPMessageId(mock(MailboxManager.class)); Message message = Message.Builder.of() .setBody(MultipartBuilder.create() .setSubType("report") .addTextPart("first", StandardCharsets.UTF_8) .addTextPart("second", StandardCharsets.UTF_8) .build()) .build(); assertThat(testee.extractReport(message)).isEmpty(); }
@Test @SuppressWarnings("unchecked") public void processShouldNotOverrideTextBodyWhenItIsThere() throws Exception { MessageManager inbox = mailboxManager.getMailbox(inboxPath, session); ComposedMessageId message = inbox.appendMessage( AppendCommand.from(org.apache.james.mime4j.dom.Message.Builder.of() .setSubject("message subject") .setBody(MultipartBuilder.create() .setSubType("alternative") .addBodyPart(BodyPartBuilder.create() .setBody("My plain message", "plain", StandardCharsets.UTF_8)) .addBodyPart(BodyPartBuilder.create() .setBody("<a>The </a> <strong>HTML</strong> message", "html", StandardCharsets.UTF_8)) .build())), session); GetMessagesRequest request = GetMessagesRequest.builder() .ids(ImmutableList.of(message.getMessageId())) .build(); List<JmapResponse> result = testee.process(request, clientId, session).collect(Collectors.toList()); assertThat(result).hasSize(1) .extracting(JmapResponse::getResponse) .hasOnlyElementsOfType(GetMessagesResponse.class) .extracting(GetMessagesResponse.class::cast) .flatExtracting(GetMessagesResponse::list) .extracting(Message::getId, Message::getTextBody, Message::getHtmlBody) .containsOnly(Tuple.tuple(message.getMessageId(), Optional.of("My plain message"), Optional.of("<a>The </a> <strong>HTML</strong> message"))); }