use grafeo_engine::GrafeoDB;
fn setup_db() -> GrafeoDB {
let db = GrafeoDB::new_in_memory();
db.execute("CREATE (:Entity {name: 'Alice', mentions: 10})")
.unwrap();
db.execute("CREATE (:Entity {name: 'Bob', mentions: 5})")
.unwrap();
db.execute("CREATE (:Organization {name: 'Corp', mentions: 3})")
.unwrap();
db.execute("MATCH (a:Entity {name: 'Alice'}), (b:Entity {name: 'Bob'}) CREATE (a)-[:RELATED_TO {relationship: 'friend'}]->(b)").unwrap();
db.execute("MATCH (a:Entity {name: 'Alice'}), (o:Organization {name: 'Corp'}) CREATE (a)-[:RELATED_TO {relationship: 'works_at'}]->(o)").unwrap();
db.execute("MATCH (b:Entity {name: 'Bob'}), (o:Organization {name: 'Corp'}) CREATE (b)-[:RELATED_TO {relationship: 'works_at'}]->(o)").unwrap();
db
}
#[test]
fn gql_count_star() {
let db = setup_db();
let r = db.execute("MATCH ()-[r:RELATED_TO]->() RETURN r.relationship AS rel_type, count(*) AS cnt ORDER BY cnt DESC LIMIT 20");
assert!(r.is_ok(), "GQL count(*) failed: {:?}", r.err());
assert!(!r.unwrap().rows.is_empty());
}
#[test]
fn gql_count_star_simple() {
let db = setup_db();
let r = db.execute("MATCH (n) RETURN count(*) AS total");
assert!(r.is_ok(), "GQL count(*) simple failed: {:?}", r.err());
let rows = r.unwrap();
assert_eq!(rows.rows.len(), 1);
}
#[test]
fn gql_labels_index_access() {
let db = setup_db();
let r = db.execute("MATCH (n) RETURN labels(n)[0] AS type, n.name AS name, n.mentions AS mentions ORDER BY mentions DESC LIMIT 30");
assert!(r.is_ok(), "GQL labels(n)[0] failed: {:?}", r.err());
}
#[test]
fn gql_undirected_edge() {
let db = setup_db();
let r = db.execute("MATCH (o:Organization)-[r]-(n) RETURN o, r, n LIMIT 100");
assert!(r.is_ok(), "GQL undirected edge failed: {:?}", r.err());
}
#[test]
fn gql_connections() {
let db = setup_db();
let r = db.execute("MATCH (a {name: 'Alice'})-[r]->(b) RETURN a, r, b LIMIT 50");
assert!(r.is_ok(), "GQL connections failed: {:?}", r.err());
}
#[cfg(feature = "cypher")]
#[test]
fn cypher_count_star() {
let db = setup_db();
let r = db.execute_cypher("MATCH ()-[r:RELATED_TO]->() RETURN r.relationship AS rel_type, count(*) AS count ORDER BY count DESC LIMIT 20");
assert!(r.is_ok(), "Cypher count(*) failed: {:?}", r.err());
}