use reifydb_core::{
interface::catalog::flow::{FlowNode, FlowNodeId},
internal,
};
use reifydb_transaction::transaction::Transaction;
use reifydb_type::error::Error;
use crate::{CatalogStore, Result};
impl CatalogStore {
pub(crate) fn get_flow_node(rx: &mut Transaction<'_>, node_id: FlowNodeId) -> Result<FlowNode> {
CatalogStore::find_flow_node(rx, node_id)?.ok_or_else(|| {
Error(Box::new(internal!(
"Flow node with ID {:?} not found in catalog. This indicates a critical catalog inconsistency.",
node_id
)))
})
}
}
#[cfg(test)]
pub mod tests {
use reifydb_core::interface::catalog::flow::FlowNodeId;
use reifydb_engine::test_harness::create_test_admin_transaction;
use reifydb_transaction::transaction::Transaction;
use crate::{
CatalogStore,
test_utils::{create_flow_node, create_namespace, ensure_test_flow},
};
#[test]
fn test_get_flow_node_ok() {
let mut txn = create_test_admin_transaction();
let _namespace = create_namespace(&mut txn, "test_namespace");
let flow = ensure_test_flow(&mut txn);
let node = create_flow_node(&mut txn, flow.id, 1, &[0x01, 0x02, 0x03]);
let result = CatalogStore::get_flow_node(&mut Transaction::Admin(&mut txn), node.id).unwrap();
assert_eq!(result.id, node.id);
assert_eq!(result.flow, flow.id);
assert_eq!(result.node_type, 1);
assert_eq!(result.data.as_bytes(), &[0x01, 0x02, 0x03]);
}
#[test]
fn test_get_flow_node_not_found() {
let mut txn = create_test_admin_transaction();
let err = CatalogStore::get_flow_node(&mut Transaction::Admin(&mut txn), FlowNodeId(999)).unwrap_err();
assert_eq!(err.code, "INTERNAL_ERROR");
assert!(err.message.contains("FlowNodeId(999)"));
assert!(err.message.contains("not found in catalog"));
}
}