Skip to content

test(inbound): parser equivalence across Postmark / Mailgun / SES#34

Open
mpge wants to merge 1 commit intofeat/ses-parserfrom
test/parser-equivalence
Open

test(inbound): parser equivalence across Postmark / Mailgun / SES#34
mpge wants to merge 1 commit intofeat/ses-parserfrom
test/parser-equivalence

Conversation

@mpge
Copy link
Copy Markdown
Member

@mpge mpge commented Apr 24, 2026

Summary

Ports escalated-go#37 + escalated-dotnet#31 to Spring Boot. Cements the three-provider parser contract: the same logical email, expressed in each provider's native webhook payload shape, should normalize to the same `InboundMessage` metadata.

Tests

Two JUnit + AssertJ cases:

  • `normalizesToSameMessage`: asserts `fromEmail` / `toEmail` / `subject` / `inReplyTo` / `references` match across all three parsers for a single logical reply email. Failure messages are annotated with the parser name.
  • `bodyExtractionMatches`: asserts `bodyText` matches when SES is configured with full-content delivery (`action.type=SNS`, `encoding=BASE64`).

Shared `LogicalEmail` record + `*Payload` builders mean adding a fourth provider validates against the existing three for free.

Stacked PR

Based on `feat/ses-parser` (#33). Merge order: #26#27#28#29#32#33 → this PR.

Ports escalated-go#37 + escalated-dotnet#31 to Spring Boot. The same
logical email, expressed in each provider's native webhook payload
shape, should normalize to the same InboundMessage metadata.
Parser equivalence at this layer guarantees a reply delivered via
any provider routes to the same ticket via the same threading
chain.

Two JUnit cases:
  - normalizesToSameMessage: asserts fromEmail / toEmail / subject
    / inReplyTo / references match across all three parsers.
  - bodyExtractionMatches: asserts bodyText matches when SES is
    configured with full-content delivery (action.type=SNS,
    encoding=BASE64).

Shared LogicalEmail record + *Payload builders mean adding a
fourth provider validates against the existing three for free.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant