use super::*;
const V2026: &str = RESULT_TYPE_SINCE;
const V2025: &str = "2025-06-18";
#[test]
fn no_signal_anywhere_is_unknown_no_signal() {
assert_eq!(
resolve_era(
&EnvelopeObservation::NotApplicable,
&RequestMetadata::Absent
),
EraResolution::Unknown(UnknownReason::NoSignal)
);
}
#[test]
fn body_metadata_alone_resolves_the_era() {
assert_eq!(
resolve_era(
&EnvelopeObservation::NotApplicable,
&RequestMetadata::Present(V2026.into())
),
EraResolution::Known(V2026.into())
);
}
#[test]
fn a_header_alone_resolves_the_era() {
assert_eq!(
resolve_era(
&EnvelopeObservation::Present(V2025.into()),
&RequestMetadata::Absent
),
EraResolution::Known(V2025.into())
);
}
#[test]
fn agreeing_signals_resolve_to_known() {
assert_eq!(
resolve_era(
&EnvelopeObservation::Present(V2026.into()),
&RequestMetadata::Present(V2026.into())
),
EraResolution::Known(V2026.into())
);
}
#[test]
fn disagreeing_signals_resolve_to_conflicting() {
assert_eq!(
resolve_era(
&EnvelopeObservation::Present(V2025.into()),
&RequestMetadata::Present(V2026.into())
),
EraResolution::Conflicting {
header: V2025.into(),
body: V2026.into()
}
);
}
#[test]
fn a_wellformed_but_unsupported_version_is_unsupported_not_missing() {
assert_eq!(
resolve_era(
&EnvelopeObservation::Present("2031-01-01".into()),
&RequestMetadata::Absent
),
EraResolution::Unknown(UnknownReason::UnsupportedVersion("2031-01-01".into()))
);
}
#[test]
fn a_malformed_signal_is_malformed_not_unsupported() {
assert_eq!(
resolve_era(
&EnvelopeObservation::NotApplicable,
&RequestMetadata::Malformed
),
EraResolution::Unknown(UnknownReason::MalformedSignal)
);
}
#[test]
fn complete_at_2026_is_terminal() {
assert_eq!(
conclude(
&EraResolution::Known(V2026.into()),
&ResultObservation::Complete,
None
),
ResultConclusion::Terminal
);
}
#[test]
fn input_required_is_valid_but_not_terminal() {
assert_eq!(
conclude(
&EraResolution::Known(V2026.into()),
&ResultObservation::InputRequired,
None
),
ResultConclusion::NonTerminal
);
}
#[test]
fn an_unrecognized_token_is_incomplete_not_invalid() {
assert_eq!(
conclude(
&EraResolution::Known(V2026.into()),
&ResultObservation::Unrecognized,
Some(&CapabilityObservation::CoreOnly)
),
ResultConclusion::Incomplete(IncompleteReason::UnrecognizedResultType)
);
}
#[test]
fn missing_result_type_at_2026_is_invalid() {
assert_eq!(
conclude(
&EraResolution::Known(V2026.into()),
&ResultObservation::Missing,
None
),
ResultConclusion::Invalid(InvalidReason::MissingResultType)
);
}
#[test]
fn missing_result_type_before_2026_is_terminal() {
assert_eq!(
conclude(
&EraResolution::Known(V2025.into()),
&ResultObservation::Missing,
None
),
ResultConclusion::Terminal
);
}
#[test]
fn an_unknown_era_blocks_as_incomplete() {
assert_eq!(
conclude(
&EraResolution::Unknown(UnknownReason::NoSignal),
&ResultObservation::Complete,
None
),
ResultConclusion::Incomplete(IncompleteReason::EraUnknown(UnknownReason::NoSignal))
);
}
#[test]
fn a_conflicting_era_blocks_as_invalid() {
assert_eq!(
conclude(
&EraResolution::Conflicting {
header: V2025.into(),
body: V2026.into()
},
&ResultObservation::Complete,
None
),
ResultConclusion::Invalid(InvalidReason::EraConflicting {
header: V2025.into(),
body: V2026.into()
})
);
}
#[test]
fn a_2026_request_without_metadata_is_invalid() {
assert_eq!(
conclude_request(
&EraResolution::Known(V2026.into()),
&RequestMetadata::Absent,
Some(&CapabilityObservation::CoreOnly),
),
RequestAssessment::Invalid(InvalidReason::MissingRequestMetadata)
);
}
#[test]
fn a_2026_request_with_malformed_metadata_is_invalid_for_a_different_reason() {
assert_eq!(
conclude_request(
&EraResolution::Known(V2026.into()),
&RequestMetadata::Malformed,
Some(&CapabilityObservation::CoreOnly),
),
RequestAssessment::Invalid(InvalidReason::MalformedRequestMetadata)
);
}
#[test]
fn a_legacy_request_without_metadata_is_not_invalid() {
assert_eq!(
conclude_request(
&EraResolution::Known(V2025.into()),
&RequestMetadata::Absent,
Some(&CapabilityObservation::CoreOnly),
),
RequestAssessment::Valid
);
}
#[test]
fn a_2026_request_carrying_metadata_is_not_invalid() {
assert_eq!(
conclude_request(
&EraResolution::Known(V2026.into()),
&RequestMetadata::Present(V2026.into()),
Some(&CapabilityObservation::CoreOnly),
),
RequestAssessment::Valid
);
}
#[test]
fn a_present_signal_that_is_not_a_version_is_malformed() {
assert_eq!(
resolve_era(
&EnvelopeObservation::Present("not-a-date".into()),
&RequestMetadata::Absent
),
EraResolution::Unknown(UnknownReason::MalformedSignal)
);
}
#[test]
fn a_non_version_that_sorts_high_is_still_malformed() {
assert_eq!(
resolve_era(
&EnvelopeObservation::NotApplicable,
&RequestMetadata::Present("9999-not-a-date".into())
),
EraResolution::Unknown(UnknownReason::MalformedSignal)
);
}
#[test]
fn composite_malformed_metadata_under_a_2026_header_is_invalid() {
let envelope = EnvelopeObservation::Present(V2026.into());
let metadata = RequestMetadata::Malformed;
let era = resolve_era(&envelope, &metadata);
assert_eq!(
conclude_request(&era, &metadata, Some(&CapabilityObservation::CoreOnly)),
RequestAssessment::Invalid(InvalidReason::MalformedRequestMetadata)
);
}
#[test]
fn composite_a_conflicting_request_without_a_response_is_invalid() {
let envelope = EnvelopeObservation::Present(V2025.into());
let metadata = RequestMetadata::Present(V2026.into());
let era = resolve_era(&envelope, &metadata);
assert_eq!(
conclude_request(&era, &metadata, Some(&CapabilityObservation::CoreOnly)),
RequestAssessment::Invalid(InvalidReason::EraConflicting {
header: V2025.into(),
body: V2026.into()
})
);
}
#[test]
fn composite_a_malformed_header_against_a_valid_body_is_malformed_not_conflicting() {
assert_eq!(
resolve_era(
&EnvelopeObservation::Present("not-a-date".into()),
&RequestMetadata::Present(V2026.into())
),
EraResolution::Unknown(UnknownReason::MalformedSignal)
);
}
#[test]
fn composite_a_malformed_body_against_a_valid_header_is_malformed_not_conflicting() {
assert_eq!(
resolve_era(
&EnvelopeObservation::Present(V2026.into()),
&RequestMetadata::Present("not-a-date".into())
),
EraResolution::Unknown(UnknownReason::MalformedSignal)
);
}
#[test]
fn composite_two_malformed_signals_are_malformed() {
assert_eq!(
resolve_era(
&EnvelopeObservation::Present("nope".into()),
&RequestMetadata::Present("also-nope".into())
),
EraResolution::Unknown(UnknownReason::MalformedSignal)
);
}
#[test]
fn a_malformed_header_is_representable_and_malformed() {
assert_eq!(
resolve_era(&EnvelopeObservation::Malformed, &RequestMetadata::Absent),
EraResolution::Unknown(UnknownReason::MalformedSignal)
);
}
#[test]
fn an_impossible_date_is_malformed_not_unsupported() {
for bad in ["2026-99-99", "2026-13-01", "2026-00-10", "2026-01-32"] {
assert_eq!(
resolve_era(
&EnvelopeObservation::Present(bad.into()),
&RequestMetadata::Absent
),
EraResolution::Unknown(UnknownReason::MalformedSignal),
"{bad}"
);
}
}
#[test]
fn composite_a_malformed_header_makes_the_request_invalid() {
let envelope = EnvelopeObservation::Malformed;
let metadata = RequestMetadata::Absent;
let era = resolve_era(&envelope, &metadata);
assert_eq!(era, EraResolution::Unknown(UnknownReason::MalformedSignal));
assert_eq!(
conclude_request(&era, &metadata, Some(&CapabilityObservation::CoreOnly)),
RequestAssessment::Invalid(InvalidReason::MalformedEraSignal)
);
}
#[test]
fn composite_a_malformed_signal_makes_the_result_invalid() {
let era = resolve_era(
&EnvelopeObservation::Present("2026-02-31".into()),
&RequestMetadata::Absent,
);
assert_eq!(
conclude(&era, &ResultObservation::Complete, None),
ResultConclusion::Invalid(InvalidReason::MalformedEraSignal)
);
}
#[test]
fn an_impossible_day_of_month_is_malformed_not_unsupported() {
for bad in ["2026-02-31", "2026-02-30", "2026-04-31", "2025-02-29"] {
assert_eq!(
resolve_era(
&EnvelopeObservation::Present(bad.into()),
&RequestMetadata::Absent
),
EraResolution::Unknown(UnknownReason::MalformedSignal),
"{bad}"
);
}
}
#[test]
fn a_leap_day_is_a_wellformed_date() {
assert_eq!(
resolve_era(
&EnvelopeObservation::Present("2024-02-29".into()),
&RequestMetadata::Absent
),
EraResolution::Unknown(UnknownReason::UnsupportedVersion("2024-02-29".into()))
);
}
#[test]
fn composite_a_malformed_result_type_at_2026_is_invalid() {
let era = resolve_era(
&EnvelopeObservation::Present(V2026.into()),
&RequestMetadata::Present(V2026.into()),
);
assert_eq!(
conclude(&era, &ResultObservation::Malformed, None),
ResultConclusion::Invalid(InvalidReason::MalformedResultType)
);
}
#[test]
fn composite_a_malformed_result_type_before_2026_is_not_complete() {
let era = resolve_era(
&EnvelopeObservation::Present(V2025.into()),
&RequestMetadata::Absent,
);
assert_eq!(era, EraResolution::Known(V2025.into()));
assert_eq!(
conclude(&era, &ResultObservation::Malformed, None),
ResultConclusion::Invalid(InvalidReason::MalformedResultType)
);
}
#[test]
fn a_malformed_result_survives_an_unknown_era() {
for era in [
EraResolution::Unknown(UnknownReason::NoSignal),
EraResolution::Unknown(UnknownReason::UnsupportedVersion("2031-01-01".into())),
] {
assert_eq!(
conclude(&era, &ResultObservation::Malformed, None),
ResultConclusion::Invalid(InvalidReason::MalformedResultType)
);
}
}
#[test]
fn a_non_numeric_date_shape_is_malformed_not_unsupported() {
for bad in ["abcd-01-01", "20ab-01-01", "+123-01-01", " 12-01-01"] {
assert_eq!(
resolve_era(
&EnvelopeObservation::Present(bad.into()),
&RequestMetadata::Absent
),
EraResolution::Unknown(UnknownReason::MalformedSignal),
"{bad}"
);
}
}