// 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::>(); 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::>().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::>().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; }