reifydb_engine/
test_utils.rs

1// Copyright (c) reifydb.com 2025
2// This file is licensed under the AGPL-3.0-or-later, see license.md file
3
4use reifydb_catalog::{
5	CatalogStore, MaterializedCatalog,
6	store::{
7		namespace::NamespaceToCreate,
8		table::{TableColumnToCreate, TableToCreate},
9	},
10};
11use reifydb_core::{event::EventBus, interceptor::Interceptors};
12use reifydb_store_transaction::TransactionStore;
13pub use reifydb_transaction::multi::Transaction;
14use reifydb_transaction::{
15	cdc::TransactionCdc,
16	single::{TransactionSingleVersion, TransactionSvl},
17};
18use reifydb_type::{Type, TypeConstraint};
19
20use crate::StandardCommandTransaction;
21
22pub fn create_test_command_transaction() -> StandardCommandTransaction {
23	let store = TransactionStore::testing_memory();
24
25	let event_bus = EventBus::new();
26	let single_svl = TransactionSvl::new(store.clone(), event_bus.clone());
27	let single = TransactionSingleVersion::SingleVersionLock(single_svl.clone());
28	let cdc = TransactionCdc::new(store.clone());
29	let multi = Transaction::new(store, single.clone(), event_bus.clone());
30
31	StandardCommandTransaction::new(multi, single, cdc, event_bus, MaterializedCatalog::new(), Interceptors::new())
32		.unwrap()
33}
34
35pub fn create_test_command_transaction_with_internal_schema() -> StandardCommandTransaction {
36	let store = TransactionStore::testing_memory();
37
38	let event_bus = EventBus::new();
39	let single_svl = TransactionSvl::new(store.clone(), event_bus.clone());
40	let single = TransactionSingleVersion::SingleVersionLock(single_svl.clone());
41	let cdc = TransactionCdc::new(store.clone());
42	let multi = Transaction::new(store.clone(), single.clone(), event_bus.clone());
43	let mut result = StandardCommandTransaction::new(
44		multi,
45		single,
46		cdc,
47		event_bus,
48		MaterializedCatalog::new(),
49		Interceptors::new(),
50	)
51	.unwrap();
52
53	let namespace = CatalogStore::create_namespace(
54		&mut result,
55		NamespaceToCreate {
56			namespace_fragment: None,
57			name: "reifydb".to_string(),
58		},
59	)
60	.unwrap();
61
62	CatalogStore::create_table(
63		&mut result,
64		TableToCreate {
65			fragment: None,
66			namespace: namespace.id,
67			table: "flows".to_string(),
68			columns: vec![
69				TableColumnToCreate {
70					name: "id".to_string(),
71					constraint: TypeConstraint::unconstrained(Type::Int8),
72					policies: vec![],
73					auto_increment: true,
74					fragment: None,
75					dictionary_id: None,
76				},
77				TableColumnToCreate {
78					name: "data".to_string(),
79					constraint: TypeConstraint::unconstrained(Type::Blob),
80					policies: vec![],
81					auto_increment: false,
82					fragment: None,
83					dictionary_id: None,
84				},
85			],
86			retention_policy: None,
87		},
88	)
89	.unwrap();
90
91	result
92}