Skip to content

Commit

Permalink
JAMES-2132 MDN Original Message ID field is optional. Value is Compul…
Browse files Browse the repository at this point in the history
…sory

As stated in https://tools.ietf.org/html/rfc8098#section-3.2.5:

   The Original-Message-ID field indicates the message-ID of the message
   for which the MDN is being issued.  It is obtained from the
   Message-ID header field of the message for which the MDN is issued.
   This field MUST be present if and only if the original message
   contained a Message-ID header field.  The syntax of the field is as
   follows:

   original-message-id-field =
             "Original-Message-ID" ":" msg-id

   The msg-id token is as specified in RFC-MSGFMT [RFC5322].
  • Loading branch information
chibenwa committed Aug 31, 2017
1 parent eb16708 commit d4303c5
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 36 deletions.
11 changes: 5 additions & 6 deletions mdn/src/main/java/org/apache/james/mdn/MDNReport.java
Expand Up @@ -82,13 +82,12 @@ public Builder dispositionField(Disposition dispositionField) {

public MDNReport build() {
Preconditions.checkState(finalRecipientField.isPresent());
Preconditions.checkState(originalMessageIdField.isPresent());
Preconditions.checkState(dispositionField.isPresent());

return new MDNReport(reportingUserAgentField,
gatewayField, originalRecipientField,
finalRecipientField.get(),
originalMessageIdField.get(),
originalMessageIdField,
dispositionField.get());
}

Expand All @@ -104,11 +103,11 @@ public static Builder builder() {
private final Optional<Gateway> gatewayField;
private final Optional<OriginalRecipient> originalRecipientField;
private final FinalRecipient finalRecipientField;
private final OriginalMessageId originalMessageIdField;
private final Optional<OriginalMessageId> originalMessageIdField;
private final Disposition dispositionField;

private MDNReport(Optional<ReportingUserAgent> reportingUserAgentField, Optional<Gateway> gatewayField, Optional<OriginalRecipient> originalRecipientField,
FinalRecipient finalRecipientField, OriginalMessageId originalMessageIdField, Disposition dispositionField) {
FinalRecipient finalRecipientField, Optional<OriginalMessageId> originalMessageIdField, Disposition dispositionField) {
this.reportingUserAgentField = reportingUserAgentField;
this.gatewayField = gatewayField;
this.originalRecipientField = originalRecipientField;
Expand All @@ -129,7 +128,7 @@ public FinalRecipient getFinalRecipientField() {
return finalRecipientField;
}

public OriginalMessageId getOriginalMessageIdField() {
public Optional<OriginalMessageId> getOriginalMessageIdField() {
return originalMessageIdField;
}

Expand All @@ -142,7 +141,7 @@ public String formattedValue() {
+ gatewayField.map(value -> value.formattedValue() + LINE_END).orElse("")
+ originalRecipientField.map(value -> value.formattedValue() + LINE_END).orElse("")
+ finalRecipientField.formattedValue() + LINE_END
+ originalMessageIdField.formattedValue() + LINE_END
+ originalMessageIdField.map(value -> value.formattedValue() + LINE_END).orElse("")
+ dispositionField.formattedValue() + LINE_END;

}
Expand Down
Expand Up @@ -19,21 +19,19 @@

package org.apache.james.mdn.fields;

import java.util.Optional;

public class OriginalMessageId implements Field {
private final Optional<String> originalMessageId;
private final String originalMessageId;

public OriginalMessageId(Optional<String> originalMessageId) {
public OriginalMessageId(String originalMessageId) {
this.originalMessageId = originalMessageId;
}

public Optional<String> getOriginalMessageId() {
public String getOriginalMessageId() {
return originalMessageId;
}

@Override
public String formattedValue() {
return "Original-Message-ID: " + originalMessageId.orElse("");
return "Original-Message-ID: " + originalMessageId;
}
}
46 changes: 22 additions & 24 deletions mdn/src/test/java/org/apache/james/mdn/MDNFactoryTest.java
Expand Up @@ -58,7 +58,7 @@ public void generateMDNReportShouldFormatAutomaticActions() {
Optional.of("UA_product")))
.finalRecipientField(new FinalRecipient("final_recipient"))
.originalRecipientField(new OriginalRecipient("originalRecipient"))
.originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
.originalMessageIdField(new OriginalMessageId("original_message_id"))
.dispositionField(disposition)
.build()
.formattedValue();
Expand Down Expand Up @@ -87,7 +87,7 @@ public void generateMDNReportShouldFormatManualActions() {
Optional.of("UA_product")))
.finalRecipientField(new FinalRecipient("final_recipient"))
.originalRecipientField(new OriginalRecipient("originalRecipient"))
.originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
.originalMessageIdField(new OriginalMessageId("original_message_id"))
.dispositionField(disposition)
.build()
.formattedValue();
Expand Down Expand Up @@ -116,7 +116,7 @@ public void generateMDNReportShouldFormatTypeDenied() {
Optional.of("UA_product")))
.finalRecipientField(new FinalRecipient("final_recipient"))
.originalRecipientField(new OriginalRecipient("originalRecipient"))
.originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
.originalMessageIdField(new OriginalMessageId("original_message_id"))
.dispositionField(disposition)
.build()
.formattedValue();
Expand Down Expand Up @@ -145,7 +145,7 @@ public void generateMDNReportShouldFormatTypeDispatcher() {
Optional.of("UA_product")))
.finalRecipientField(new FinalRecipient("final_recipient"))
.originalRecipientField(new OriginalRecipient("originalRecipient"))
.originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
.originalMessageIdField(new OriginalMessageId("original_message_id"))
.dispositionField(disposition)
.build()
.formattedValue();
Expand Down Expand Up @@ -174,7 +174,7 @@ public void generateMDNReportShouldFormatTypeDisplayed() {
Optional.of("UA_product")))
.finalRecipientField(new FinalRecipient("final_recipient"))
.originalRecipientField(new OriginalRecipient("originalRecipient"))
.originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
.originalMessageIdField(new OriginalMessageId("original_message_id"))
.dispositionField(disposition)
.build()
.formattedValue();
Expand Down Expand Up @@ -203,7 +203,7 @@ public void generateMDNReportShouldFormatTypeFailed() {
Optional.of("UA_product")))
.finalRecipientField(new FinalRecipient("final_recipient"))
.originalRecipientField(new OriginalRecipient("originalRecipient"))
.originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
.originalMessageIdField(new OriginalMessageId("original_message_id"))
.dispositionField(disposition)
.build()
.formattedValue();
Expand Down Expand Up @@ -232,7 +232,7 @@ public void generateMDNReportShouldFormatTypeDeleted() {
Optional.of("UA_product")))
.finalRecipientField(new FinalRecipient("final_recipient"))
.originalRecipientField(new OriginalRecipient("originalRecipient"))
.originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
.originalMessageIdField(new OriginalMessageId("original_message_id"))
.dispositionField(disposition)
.build()
.formattedValue();
Expand Down Expand Up @@ -261,7 +261,7 @@ public void generateMDNReportShouldFormatAllModifier() {
Optional.of("UA_product")))
.finalRecipientField(new FinalRecipient("final_recipient"))
.originalRecipientField(new OriginalRecipient("originalRecipient"))
.originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
.originalMessageIdField(new OriginalMessageId("original_message_id"))
.dispositionField(disposition)
.build()
.formattedValue();
Expand Down Expand Up @@ -289,7 +289,7 @@ public void generateMDNReportShouldFormatOneModifier() {
Optional.of("UA_product")))
.finalRecipientField(new FinalRecipient("final_recipient"))
.originalRecipientField(new OriginalRecipient("originalRecipient"))
.originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
.originalMessageIdField(new OriginalMessageId("original_message_id"))
.dispositionField(disposition)
.build()
.formattedValue();
Expand All @@ -316,7 +316,7 @@ public void generateMDNReportShouldFormatNoModifier() {
Optional.of("UA_product")))
.finalRecipientField(new FinalRecipient("final_recipient"))
.originalRecipientField(new OriginalRecipient("originalRecipient"))
.originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
.originalMessageIdField(new OriginalMessageId("original_message_id"))
.dispositionField(disposition)
.build()
.formattedValue();
Expand All @@ -342,7 +342,7 @@ public void generateMDNReportShouldFormatNoModifierNullType() {
Optional.of("UA_product")))
.finalRecipientField(new FinalRecipient("final_recipient"))
.originalRecipientField(new OriginalRecipient("originalRecipient"))
.originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
.originalMessageIdField(new OriginalMessageId("original_message_id"))
.dispositionField(disposition)
.build()
.formattedValue();
Expand Down Expand Up @@ -370,7 +370,7 @@ public void generateMDNReportShouldFormatNullActionMode() {
Optional.of("UA_product")))
.finalRecipientField(new FinalRecipient("final_recipient"))
.originalRecipientField(new OriginalRecipient("originalRecipient"))
.originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
.originalMessageIdField(new OriginalMessageId("original_message_id"))
.dispositionField(disposition)
.build()
.formattedValue();
Expand Down Expand Up @@ -398,7 +398,7 @@ public void generateMDNReportShouldFormatNullSendingMode() {
Optional.of("UA_product")))
.finalRecipientField(new FinalRecipient("final_recipient"))
.originalRecipientField(new OriginalRecipient("originalRecipient"))
.originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
.originalMessageIdField(new OriginalMessageId("original_message_id"))
.dispositionField(disposition)
.build()
.formattedValue();
Expand Down Expand Up @@ -427,7 +427,7 @@ public void generateMDNReportShouldFormatNullUserAgentProduct() {
Optional.empty()))
.finalRecipientField(new FinalRecipient("final_recipient"))
.originalRecipientField(new OriginalRecipient("originalRecipient"))
.originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
.originalMessageIdField(new OriginalMessageId("original_message_id"))
.dispositionField(disposition)
.build()
.formattedValue();
Expand Down Expand Up @@ -455,7 +455,7 @@ public void generateMDNReportShouldFormatNullOriginalRecipient() {
"UA_name",
Optional.of("UA_product")))
.finalRecipientField(new FinalRecipient("final_recipient"))
.originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
.originalMessageIdField(new OriginalMessageId("original_message_id"))
.dispositionField(disposition)
.build()
.formattedValue();
Expand All @@ -468,7 +468,7 @@ public void generateMDNReportShouldFormatNullOriginalRecipient() {
}

@Test
public void generateMDNReportShouldFormatNullOriginalMessageId() {
public void generateMDNReportShouldFormatWhenMissingOriginalMessageId() {
Disposition disposition = Disposition.builder()
.actionMode(DispositionActionMode.Manual)
.sendingMode(DispositionSendingMode.Automatic)
Expand All @@ -483,7 +483,6 @@ public void generateMDNReportShouldFormatNullOriginalMessageId() {
Optional.of("UA_product")))
.finalRecipientField(new FinalRecipient("final_recipient"))
.originalRecipientField(new OriginalRecipient("originalRecipient"))
.originalMessageIdField(new OriginalMessageId(Optional.empty()))
.dispositionField(disposition)
.build()
.formattedValue();
Expand All @@ -492,7 +491,6 @@ public void generateMDNReportShouldFormatNullOriginalMessageId() {
.isEqualTo("Reporting-UA: UA_name; UA_product\r\n" +
"Original-Recipient: rfc822; originalRecipient\r\n" +
"Final-Recepient: rfc822; final_recipient\r\n" +
"Original-Message-ID: \r\n" +
"Disposition: manual-action/MDN-sent-automatically;deleted/error,failed\r\n");
}

Expand Down Expand Up @@ -526,7 +524,7 @@ public void generateMDNReportShouldFormatGateway() {
.gatewayField(new Gateway("host.com"))
.finalRecipientField(new FinalRecipient("final_recipient"))
.originalRecipientField(new OriginalRecipient("originalRecipient"))
.originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
.originalMessageIdField(new OriginalMessageId("original_message_id"))
.dispositionField(disposition)
.build()
.formattedValue();
Expand Down Expand Up @@ -557,7 +555,7 @@ public void generateMDNReportShouldFormatGatewayWithExoticNameType() {
.gatewayField(new Gateway("postal", "5 rue Charles mercier"))
.finalRecipientField(new FinalRecipient("final_recipient"))
.originalRecipientField(new OriginalRecipient("originalRecipient"))
.originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
.originalMessageIdField(new OriginalMessageId("original_message_id"))
.dispositionField(disposition)
.build()
.formattedValue();
Expand Down Expand Up @@ -587,7 +585,7 @@ public void generateMDNReportShouldFormatExoticAddressTypeForOriginalRecipient()
Optional.of("UA_product")))
.finalRecipientField(new FinalRecipient("final_recipient"))
.originalRecipientField(new OriginalRecipient("roomNumber", "385"))
.originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
.originalMessageIdField(new OriginalMessageId("original_message_id"))
.dispositionField(disposition)
.build()
.formattedValue();
Expand Down Expand Up @@ -616,7 +614,7 @@ public void generateMDNReportShouldFormatUnknownAddressTypeForOriginalRecipient(
Optional.of("UA_product")))
.finalRecipientField(new FinalRecipient("final_recipient"))
.originalRecipientField(OriginalRecipient.ofUnknown("#$%*"))
.originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
.originalMessageIdField(new OriginalMessageId("original_message_id"))
.dispositionField(disposition)
.build()
.formattedValue();
Expand Down Expand Up @@ -645,7 +643,7 @@ public void generateMDNReportShouldFormatExoticFinalRecipientAddressType() {
Optional.of("UA_product")))
.finalRecipientField(new FinalRecipient("roomNumber", "781"))
.originalRecipientField(new OriginalRecipient("originalRecipient"))
.originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
.originalMessageIdField(new OriginalMessageId("original_message_id"))
.dispositionField(disposition)
.build()
.formattedValue();
Expand Down Expand Up @@ -675,7 +673,7 @@ public void generateMDNReportShouldThrowWhenMissingFinalField() {
"UA_name",
Optional.of("UA_product")))
.originalRecipientField(new OriginalRecipient("originalRecipient"))
.originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
.originalMessageIdField(new OriginalMessageId("original_message_id"))
.dispositionField(disposition)
.build();
}
Expand Down

0 comments on commit d4303c5

Please sign in to comment.