private Disposition generateDisposition() { return Disposition.builder() .actionMode(disposition.getActionMode()) .sendingMode(disposition.getSendingMode()) .type(disposition.getType()) .build(); }
@Test public void shouldBuildMinimalSubSet() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Processed) .build(); ImmutableList<DispositionModifier> modifiers = ImmutableList.of(); assertThat(disposition) .isEqualTo(new Disposition( DispositionActionMode.Automatic, DispositionSendingMode.Automatic, DispositionType.Processed, modifiers)); }
@Test public void formattedValueShouldDisplayNoModifier() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Processed) .build(); assertThat(disposition.formattedValue()) .isEqualTo("Disposition: automatic-action/MDN-sent-automatically;processed"); }
@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); }
@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 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 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 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 formattedValueShouldDisplayManualSendingMode() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Manual) .type(DispositionType.Processed) .addModifiers(DispositionModifier.Expired) .build(); assertThat(disposition.formattedValue()) .isEqualTo("Disposition: automatic-action/MDN-sent-manually;processed/expired"); } }
@Test public void formattedValueShouldDisplayAllOptions() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Processed) .addModifiers(DispositionModifier.Expired, DispositionModifier.Warning) .build(); assertThat(disposition.formattedValue()) .isEqualTo("Disposition: automatic-action/MDN-sent-automatically;processed/expired,warning"); }
@Test public void formattedValueShouldDisplayManualActionMode() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Manual) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Processed) .addModifiers(DispositionModifier.Expired) .build(); assertThat(disposition.formattedValue()) .isEqualTo("Disposition: manual-action/MDN-sent-automatically;processed/expired"); }
@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 formattedValueShouldDisplaySingleModifier() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Processed) .addModifiers(DispositionModifier.Expired) .build(); assertThat(disposition.formattedValue()) .isEqualTo("Disposition: automatic-action/MDN-sent-automatically;processed/expired"); }
@Test public void shouldBuildWithAllOptions() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Processed) .addModifiers(DispositionModifier.Expired, DispositionModifier.Warning) .build(); ImmutableList<DispositionModifier> modifiers = ImmutableList.of(DispositionModifier.Expired, DispositionModifier.Warning); assertThat(disposition) .isEqualTo(new Disposition( DispositionActionMode.Automatic, DispositionSendingMode.Automatic, DispositionType.Processed, modifiers)); }
@Test public void buildShouldThrowOnMissingActionMode() { expectedException.expect(IllegalStateException.class); Disposition.builder() .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Processed) .build(); }
@Test public void buildShouldThrowOnMissingSendingMode() { expectedException.expect(IllegalStateException.class); Disposition.builder() .actionMode(DispositionActionMode.Automatic) .type(DispositionType.Processed) .build(); }
@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 buildShouldThrowOnMissingType() { expectedException.expect(IllegalStateException.class); Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Automatic) .build(); }
@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); }
@Test public void generateMDNReportShouldThrowWhenMissingFinalField() { Disposition disposition = Disposition.builder() .actionMode(DispositionActionMode.Automatic) .sendingMode(DispositionSendingMode.Automatic) .type(DispositionType.Processed) .addModifier(DispositionModifier.Error) .addModifier(DispositionModifier.Failed) .build(); expectedException.expect(IllegalStateException.class); MDNReport.builder() .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build()) .originalRecipientField(OriginalRecipient.builder().originalRecipient(Text.fromRawText("originalRecipient")).build()) .originalMessageIdField(new OriginalMessageId("original_message_id")) .dispositionField(disposition) .build(); }