#[cfg(test)]
#[macro_export]
macro_rules! assert_detects_violation {
($check:expr, $sql:expr, $operation:expr) => {{
use $crate::checks::test_utils::parse_sql;
let stmt = parse_sql($sql);
let violations = $check.check(&stmt);
assert_eq!(violations.len(), 1, "Expected exactly 1 violation");
assert_eq!(
violations[0].operation, $operation,
"Expected operation '{}' but got '{}'",
$operation, violations[0].operation
);
}};
}
#[cfg(test)]
#[macro_export]
macro_rules! assert_allows {
($check:expr, $sql:expr) => {{
use $crate::checks::test_utils::parse_sql;
let stmt = parse_sql($sql);
let violations = $check.check(&stmt);
assert_eq!(
violations.len(),
0,
"Expected no violations but found {}",
violations.len()
);
}};
}
#[cfg(test)]
pub use test_helpers::*;
#[cfg(test)]
mod test_helpers {
use sqlparser::ast::Statement;
use sqlparser::dialect::PostgreSqlDialect;
use sqlparser::parser::Parser;
pub fn parse_sql(sql: &str) -> Statement {
let dialect = PostgreSqlDialect {};
Parser::parse_sql(&dialect, sql)
.expect("Failed to parse SQL")
.into_iter()
.next()
.expect("No statements found")
}
}