use super::debug_health_reasons_from_stage_output_assembly::build_logging_schema_debug_health_reasons_from_stage_output_assembly;
use super::debug_health_reasons_stage_input_assembly::build_debug_health_reasons_stage_input_assembly;
use super::debug_health_reasons_stage_output_assembly::build_debug_health_reasons_stage_output_assembly;
use super::debug_summary_contracts::LoggingSchemaDebugHealthReason;
use super::debug_summary_metrics::LoggingSchemaDebugSummaryMetrics;
pub(super) fn build_logging_schema_debug_health_reasons(
metrics: &LoggingSchemaDebugSummaryMetrics,
) -> Vec<LoggingSchemaDebugHealthReason> {
let stage_input = build_debug_health_reasons_stage_input_assembly(metrics);
let stage = build_debug_health_reasons_stage_output_assembly(stage_input);
build_logging_schema_debug_health_reasons_from_stage_output_assembly(stage)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::api::schema::debug_health_stage_test_fixtures::build_health_summary_metrics_for_tests;
#[test]
fn health_reasons_include_info_reason_when_all_resources_are_present() {
let reasons = build_logging_schema_debug_health_reasons(
&build_health_summary_metrics_for_tests(0, 0, 0, 0, 0),
);
assert_eq!(reasons.len(), 1);
assert_eq!(reasons[0].code, "all_expected_resources_present");
assert_eq!(reasons[0].severity, "info");
}
#[test]
fn health_reasons_emit_error_and_warning_reason_groups() {
let reasons = build_logging_schema_debug_health_reasons(
&build_health_summary_metrics_for_tests(1, 2, 1, 3, 4),
);
assert_eq!(reasons.len(), 5);
assert_eq!(reasons[0].code, "missing_required_tables");
assert_eq!(reasons[0].severity, "error");
assert_eq!(reasons[1].code, "missing_required_columns");
assert_eq!(reasons[2].code, "relation_type_mismatches");
assert_eq!(reasons[3].code, "missing_optional_tables");
assert_eq!(reasons[3].severity, "warning");
assert_eq!(reasons[4].code, "missing_optional_columns");
}
}