55 lines
2.8 KiB
Rust
55 lines
2.8 KiB
Rust
// file: crates/ksp-store-postgres-lib/unit_tests/schema_v003.rs
|
|
// version: 2
|
|
|
|
#[test]
|
|
fn pre_003_v003_resource_inventory_is_exact_and_ordered() {
|
|
let resources = crate::V003_RESOURCES;
|
|
assert_eq!(resources.len(), 25);
|
|
let ids = resources.iter().map(|resource| return resource.id).collect::<std::vec::Vec<_>>();
|
|
assert_eq!(ids.iter().filter(|id| return id.starts_with("tables/")).count(), 4);
|
|
assert_eq!(ids.iter().filter(|id| return id.starts_with("constraints/")).count(), 18);
|
|
assert_eq!(ids.iter().filter(|id| return id.starts_with("indexes/")).count(), 3);
|
|
assert!(ids[..4].iter().all(|id| return id.starts_with("tables/")));
|
|
assert!(ids[4..22].iter().all(|id| return id.starts_with("constraints/")));
|
|
assert!(ids[22..].iter().all(|id| return id.starts_with("indexes/")));
|
|
let mut unique = std::collections::BTreeSet::<&str>::new();
|
|
for id in ids {
|
|
assert!(unique.insert(id), "duplicate V003 resource id: {id}");
|
|
}
|
|
return;
|
|
}
|
|
|
|
#[test]
|
|
fn pre_003_v003_schema_is_additive_payload_bounded_and_hash_non_unique() {
|
|
let sql = crate::V003_RESOURCES.iter().map(|resource| return resource.sql).collect::<std::vec::Vec<_>>().concat();
|
|
for required in [
|
|
"CREATE TABLE IF NOT EXISTS ksp_raw_transaction_variants",
|
|
"CREATE TABLE IF NOT EXISTS ksp_raw_transaction_canonical_selectors",
|
|
"CREATE TABLE IF NOT EXISTS ksp_raw_transaction_observation_variants",
|
|
"CREATE TABLE IF NOT EXISTS ksp_raw_transaction_conflicts",
|
|
"PRIMARY KEY (transaction_signature, variant_id)",
|
|
"FOREIGN KEY (transaction_signature) REFERENCES ksp_raw_transactions(signature)",
|
|
"FOREIGN KEY (observation_key) REFERENCES ksp_raw_transaction_observations(observation_key)",
|
|
"octet_length(payload) <= 16777216",
|
|
"origin_kind = 'native' OR origin_kind = 'synthetic'",
|
|
"latest_relation = 'conflict' OR latest_relation = 'incomparable'",
|
|
"latest_reason_code = 'content_hash_collision'",
|
|
"latest_reason_code = 'unsupported_canonical_difference'",
|
|
] {
|
|
assert!(sql.contains(required), "missing V003 schema invariant: {required}");
|
|
}
|
|
for forbidden in ["UNIQUE (content_hash", "UNIQUE(content_hash", "BIGSERIAL", "INSERT INTO", "UPDATE ksp_raw_transactions"] {
|
|
assert!(!sql.contains(forbidden), "forbidden V003 migration behavior: {forbidden}");
|
|
}
|
|
return;
|
|
}
|
|
|
|
#[test]
|
|
fn pre_003_v003_observation_mapping_does_not_fabricate_legacy_rows() {
|
|
let sql = crate::V003_RESOURCES.iter().map(|resource| return resource.sql).collect::<std::vec::Vec<_>>().concat();
|
|
assert!(sql.contains("ksp_raw_transaction_observation_variants"));
|
|
assert!(!sql.contains("SELECT observation_key FROM ksp_raw_transaction_observations"));
|
|
assert!(!sql.contains("INSERT INTO ksp_raw_transaction_observation_variants"));
|
|
return;
|
|
}
|