0.3.16-pre.3.fix.1
This commit is contained in:
54
crates/ksp-store-postgres-lib/unit_tests/schema_v003.rs
Normal file
54
crates/ksp-store-postgres-lib/unit_tests/schema_v003.rs
Normal file
@@ -0,0 +1,54 @@
|
||||
// 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;
|
||||
}
|
||||
Reference in New Issue
Block a user