use super::debug_evaluation_contracts::ExpectedTablesEvaluation;
use super::debug_table_comparison_contracts::LoggingSchemaTableComparison;
pub(super) fn apply_present_comparison_counters(
evaluation: &mut ExpectedTablesEvaluation,
required: bool,
comparison: &LoggingSchemaTableComparison,
) {
if !comparison.relation_type_matches {
evaluation.relation_type_mismatch_count =
evaluation.relation_type_mismatch_count.saturating_add(1);
}
if required {
evaluation.required_missing_column_count = evaluation
.required_missing_column_count
.saturating_add(comparison.missing_columns.len());
} else {
evaluation.optional_missing_column_count = evaluation
.optional_missing_column_count
.saturating_add(comparison.missing_columns.len());
}
}
#[cfg(test)]
mod tests {
use super::*;
fn comparison(
relation_type_matches: bool,
missing_columns: Vec<&str>,
) -> LoggingSchemaTableComparison {
LoggingSchemaTableComparison {
relation_type_matches,
missing_columns: missing_columns
.into_iter()
.map(|value| value.to_string())
.collect(),
unexpected_columns: Vec::new(),
}
}
#[test]
fn present_counters_increment_required_columns_and_mismatches() {
let mut evaluation = ExpectedTablesEvaluation::default();
apply_present_comparison_counters(
&mut evaluation,
true,
&comparison(false, vec!["request_id", "status_code"]),
);
assert_eq!(evaluation.required_missing_column_count, 2);
assert_eq!(evaluation.optional_missing_column_count, 0);
assert_eq!(evaluation.relation_type_mismatch_count, 1);
}
#[test]
fn present_counters_increment_optional_columns_without_mismatch() {
let mut evaluation = ExpectedTablesEvaluation::default();
apply_present_comparison_counters(
&mut evaluation,
false,
&comparison(true, vec!["route_path"]),
);
assert_eq!(evaluation.required_missing_column_count, 0);
assert_eq!(evaluation.optional_missing_column_count, 1);
assert_eq!(evaluation.relation_type_mismatch_count, 0);
}
}