#![allow(
clippy::unwrap_used,
clippy::expect_used,
reason = "test code — panics are acceptable failures"
)]
use chrono::Utc;
use cognee_database::ops::datasets::create_dataset;
use cognee_database::ops::graph_storage::{upsert_edges, upsert_nodes};
use cognee_database::{GraphEdge, GraphNode, connect, initialize};
use cognee_models::Dataset;
use serde_json::json;
use uuid::Uuid;
#[tokio::test]
async fn upserts_large_graph_without_variable_overflow() {
let db = connect("sqlite::memory:").await.expect("connect");
initialize(&db).await.expect("migrate");
let user = Uuid::new_v4();
let dataset = Uuid::new_v4();
create_dataset(&db, Dataset::new("war-peace".into(), user, None, dataset))
.await
.expect("seed dataset");
let n = 4000usize;
let data = Uuid::new_v4();
let nodes: Vec<GraphNode> = (0..n)
.map(|_| GraphNode {
id: Uuid::new_v4(),
slug: Uuid::new_v4(),
user_id: user,
data_id: data,
dataset_id: dataset,
label: Some("n".into()),
node_type: "Entity".into(),
indexed_fields: json!({ "index_fields": ["name"] }),
attributes: None,
created_at: Utc::now(),
})
.collect();
upsert_nodes(&db, &nodes)
.await
.expect("node upsert must chunk under the SQL-variable cap");
let edges: Vec<GraphEdge> = (0..n)
.map(|i| GraphEdge {
id: Uuid::new_v4(),
slug: Uuid::new_v4(),
user_id: user,
data_id: data,
dataset_id: dataset,
source_node_id: nodes[i].id,
destination_node_id: nodes[(i + 1) % n].id,
relationship_name: "rel".into(),
label: Some("e".into()),
attributes: None,
created_at: Utc::now(),
})
.collect();
upsert_edges(&db, &edges)
.await
.expect("edge upsert must chunk under the SQL-variable cap");
}