private Optional<MDNReport> parseReport(Entity report) { LOGGER.debug("Parsing report"); try { return new MDNReportParser().parse(((SingleBody)report.getBody()).getInputStream(), report.getCharset()); } catch (IOException e) { LOGGER.error("unable to parse MESSAGE_DISPOSITION_NOTIFICATION part", e); return Optional.empty(); } }
public Optional<MDNReport> parse(InputStream is, String charset) throws IOException { return parse(IOUtils.toString(is, charset)); }
@Test public void parseShouldReturnEmptyWhenDuplicatedFields() { String duplicated = "Final-Recipient: rfc822; final_recipient\r\n" + "Final-Recipient: rfc822; final_recipient\r\n" + "Disposition: automatic-action/MDN-sent-automatically;processed\r\n"; MDNReportParser testee = new MDNReportParser(); assertThat(testee.parse(duplicated)).isEmpty(); }
@Test public void parseShouldReturnEmptyWhenMissingFinalRecipient() { String missing = "Disposition: automatic-action/MDN-sent-automatically;processed\r\n"; MDNReportParser testee = new MDNReportParser(); assertThat(testee.parse(missing)).isEmpty(); }
@Test public void parseShouldReturnMdnReportWhenMinimalSubset() { String minimal = "Final-Recipient: rfc822; final_recipient\r\n" + "Disposition: automatic-action/MDN-sent-automatically;processed\r\n"; Optional<MDNReport> expected = Optional.of(MDNReport.builder() .finalRecipientField("final_recipient") .dispositionField(Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Processed) .build()) .build()); MDNReportParser testee = new MDNReportParser(); Optional<MDNReport> actual = testee.parse(minimal); assertThat(actual).isEqualTo(expected); }
.build()) .build()); MDNReportParser testee = new MDNReportParser(); Optional<MDNReport> actual = testee.parse(maximal); assertThat(actual).isEqualTo(expected);