@Test public void dispositionFieldShouldParseWhenDisplayedType() { String disposition = "Disposition: automatic-action/MDN-sent-manually;displayed"; Disposition expected = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Manual) .type(DispositionType.Displayed) .build(); Parser parser = Parboiled.createParser(MDNReportParser.Parser.class); ParsingResult<Object> result = new ReportingParseRunner<>(parser.dispositionField()).run(disposition); assertThat(result.matched).isTrue(); assertThat(result.resultValue).isInstanceOf(Disposition.class); assertThat((Disposition)result.resultValue).isEqualTo(expected); }
@Test public void dispositionFieldShouldParseWhenAutomaticManualWithDisplayedType() { String disposition = "Disposition: automatic-action/MDN-sent-manually;processed"; Disposition expected = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Manual) .type(DispositionType.Processed) .build(); Parser parser = Parboiled.createParser(MDNReportParser.Parser.class); ParsingResult<Object> result = new ReportingParseRunner<>(parser.dispositionField()).run(disposition); assertThat(result.matched).isTrue(); assertThat(result.resultValue).isInstanceOf(Disposition.class); assertThat((Disposition)result.resultValue).isEqualTo(expected); }
@Test public void dispositionFieldShouldParseWhenManualAutomaticWithDisplayedType() { String disposition = "Disposition: manual-action/MDN-sent-automatically;processed"; Disposition expected = Disposition.builder() .actionMode(DispositionActionMode.Manual) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Processed) .build(); Parser parser = Parboiled.createParser(MDNReportParser.Parser.class); ParsingResult<Object> result = new ReportingParseRunner<>(parser.dispositionField()).run(disposition); assertThat(result.matched).isTrue(); assertThat(result.resultValue).isInstanceOf(Disposition.class); assertThat((Disposition)result.resultValue).isEqualTo(expected); }
@Test public void dispositionFieldShouldParseWhenMaximal() { String maximal = "Disposition: automatic-action/MDN-sent-automatically;processed/error,failed"; Disposition expected = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Processed) .addModifier(DispositionModifier.Error) .addModifier(DispositionModifier.Failed) .build(); Parser parser = Parboiled.createParser(MDNReportParser.Parser.class); ParsingResult<Object> result = new ReportingParseRunner<>(parser.dispositionField()).run(maximal); assertThat(result.matched).isTrue(); assertThat(result.resultValue).isInstanceOf(Disposition.class); assertThat((Disposition)result.resultValue).isEqualTo(expected); }
@Test public void dispositionFieldShouldParseWhenDispatchedType() { String disposition = "Disposition: automatic-action/MDN-sent-manually;dispatched"; Disposition expected = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Manual) .type(DispositionType.Dispatched) .build(); Parser parser = Parboiled.createParser(MDNReportParser.Parser.class); ParsingResult<Object> result = new ReportingParseRunner<>(parser.dispositionField()).run(disposition); assertThat(result.matched).isTrue(); assertThat(result.resultValue).isInstanceOf(Disposition.class); assertThat((Disposition)result.resultValue).isEqualTo(expected); }
@Test public void dispositionFieldShouldParseWhenDeletedType() { String disposition = "Disposition: automatic-action/MDN-sent-manually;deleted"; Disposition expected = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Manual) .type(DispositionType.Deleted) .build(); Parser parser = Parboiled.createParser(MDNReportParser.Parser.class); ParsingResult<Object> result = new ReportingParseRunner<>(parser.dispositionField()).run(disposition); assertThat(result.matched).isTrue(); assertThat(result.resultValue).isInstanceOf(Disposition.class); assertThat((Disposition)result.resultValue).isEqualTo(expected); }
@Test public void dispositionFieldShouldParseWhenMinimal() { String minimal = "Disposition: automatic-action/MDN-sent-automatically;processed"; Disposition expected = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Processed) .build(); Parser parser = Parboiled.createParser(MDNReportParser.Parser.class); ParsingResult<Object> result = new ReportingParseRunner<>(parser.dispositionField()).run(minimal); assertThat(result.matched).isTrue(); assertThat(result.resultValue).isInstanceOf(Disposition.class); assertThat((Disposition)result.resultValue).isEqualTo(expected); }
Rule dispositionNotificationContent() { return Sequence( push(MDNReport.builder()), Optional(Sequence(reportingUaField(), ACTION(setReportingUaField()), crlf())), Optional(Sequence(mdnGatewayField(), ACTION(setMdnGatewayField()), crlf())), Optional(Sequence(originalRecipientField(), ACTION(setOriginalRecipientField()), crlf())), Sequence(finalRecipientField(), ACTION(setFinalRecipientField()), crlf()), Optional(Sequence(originalMessageIdField(), ACTION(setOriginalMessageIdField()), crlf())), Sequence(dispositionField(), ACTION(setDispositionField()), crlf()), ZeroOrMore(Sequence(errorField(), ACTION(addErrorField()), crlf())), ZeroOrMore(Sequence(extentionField(), ACTION(addExtensionField()), crlf())), ACTION(buildMDNReport())); }