use openehr_postgresql::PostgresqlDialect;
use openehr_store::{Dialect, conformance, ddl_script};
#[test]
fn the_dialect_is_self_consistent() {
conformance::check_dialect(&PostgresqlDialect);
}
#[test]
fn the_ddl_is_this_engine_and_not_another() {
let sql = ddl_script(&PostgresqlDialect);
assert!(
!sql.contains("jsonb"),
"jsonb normalises canonical JSON, so the chain digest cannot be \
recomputed from storage (M3.43, D-08)"
);
assert!(
sql.lines()
.any(|line| line.contains("data_json") && line.contains("text")),
"canonical JSON must be held in a byte-preserving text column"
);
assert!(sql.contains("timestamptz"));
assert!(!sql.contains("VARCHAR2"), "that is Oracle");
assert!(!sql.contains("nvarchar"), "that is SQL Server");
assert!(!sql.contains("TINYINT"), "that is MySQL");
assert!(!sql.contains('`'), "backticks are MySQL quoting");
}
#[test]
fn identifiers_are_quoted_for_this_engine() {
assert_eq!(
PostgresqlDialect.quote("openehr_version"),
"\"openehr_version\""
);
let sql = ddl_script(&PostgresqlDialect);
assert!(sql.contains(&PostgresqlDialect.quote("openehr_composition_index")));
}
#[test]
fn every_table_and_index_is_emitted() {
let sql = ddl_script(&PostgresqlDialect);
for table in openehr_store::TABLES {
assert!(sql.contains(table.name), "missing table {}", table.name);
for index in table.indexes {
assert!(sql.contains(index.name), "missing index {}", index.name);
}
}
}
#[test]
fn the_dialect_names_itself_and_the_trigger_refuses_both_mutations() {
assert_eq!(PostgresqlDialect.name(), "PostgreSQL");
let sql = PostgresqlDialect.append_only_sql(&openehr_store::schema::VERSION).join("\n");
assert!(sql.contains("BEFORE UPDATE OR DELETE"), "{sql}");
assert!(sql.contains("RAISE EXCEPTION"), "{sql}");
assert!(sql.contains(openehr_store::schema::VERSION.name), "{sql}");
assert!(sql.contains("openEHR V8.10"), "{sql}");
}