tests: add tests for provenance queries
parent
0a67c3c5e7
commit
d7f48f1880
|
@ -517,16 +517,37 @@ mod test {
|
|||
|
||||
let connection = db.connection().unwrap();
|
||||
|
||||
for address in connection.get_all_addresses().unwrap() {
|
||||
connection.remove_object(address).unwrap();
|
||||
}
|
||||
|
||||
// Test elementary inserts and queries
|
||||
let random_entity = Address::Uuid(uuid::Uuid::new_v4());
|
||||
upend_insert_val!(connection, random_entity, ATTR_LABEL, "FOOBAR").unwrap();
|
||||
upend_insert_val!(connection, random_entity, "FLAVOUR", "STRANGE").unwrap();
|
||||
|
||||
let query = format!(r#"(matches ? ? ?)"#).parse().unwrap();
|
||||
let result = connection.query::<Vec<Entry>>(query).unwrap();
|
||||
assert_eq!(result.len(), 2);
|
||||
|
||||
let query = format!(r#"(matches @{random_entity} ? ?)"#)
|
||||
.parse()
|
||||
.unwrap();
|
||||
let result = connection.query::<Vec<Entry>>(query).unwrap();
|
||||
assert_eq!(result.len(), 2);
|
||||
|
||||
// Test elementary provenance queries
|
||||
let query = format!(r#"(matches ? ? ? "SYSTEM INIT")"#).parse().unwrap();
|
||||
let result = connection.query::<Vec<Entry>>(query).unwrap();
|
||||
assert_eq!(result.len(), 2);
|
||||
|
||||
let query = format!(r#"(matches ? ? ? "SOMETHING ELSE")"#)
|
||||
.parse()
|
||||
.unwrap();
|
||||
let result = connection.query::<Vec<Entry>>(query).unwrap();
|
||||
assert_eq!(result.len(), 0);
|
||||
|
||||
// Test IN queries for entities
|
||||
let other_entity = Address::Uuid(uuid::Uuid::new_v4());
|
||||
upend_insert_val!(connection, random_entity, ATTR_LABEL, "BAZQUX").unwrap();
|
||||
upend_insert_val!(connection, random_entity, "CHARGE", "POSITIVE").unwrap();
|
||||
|
@ -537,28 +558,33 @@ mod test {
|
|||
let result = connection.query::<Vec<Entry>>(query).unwrap();
|
||||
assert_eq!(result.len(), 4);
|
||||
|
||||
// Test IN queries for attributes
|
||||
let query = r#"(matches ? (in "FLAVOUR" "CHARGE") ?)"#.parse().unwrap();
|
||||
let result = connection.query::<Vec<Entry>>(query).unwrap();
|
||||
assert_eq!(result.len(), 2);
|
||||
|
||||
// Test IN queries for values
|
||||
let query = format!(r#"(matches ? "{ATTR_LABEL}" (in "FOOBAR" "BAZQUX"))"#)
|
||||
.parse()
|
||||
.unwrap();
|
||||
let result = connection.query::<Vec<Entry>>(query).unwrap();
|
||||
assert_eq!(result.len(), 2);
|
||||
|
||||
// Test CONTAINS queries for values
|
||||
let query = format!(r#"(matches ? "{ATTR_LABEL}" (contains "OOBA"))"#)
|
||||
.parse()
|
||||
.unwrap();
|
||||
let result = connection.query::<Vec<Entry>>(query).unwrap();
|
||||
assert_eq!(result.len(), 1);
|
||||
|
||||
// Test multiple IN queries
|
||||
let query = r#"(or (matches ? ? (contains "OOBA")) (matches ? (contains "HARGE") ?) )"#
|
||||
.parse()
|
||||
.unwrap();
|
||||
let result = connection.query::<Vec<Entry>>(query).unwrap();
|
||||
assert_eq!(result.len(), 2);
|
||||
|
||||
// Test multiple queries
|
||||
let query =
|
||||
format!(r#"(and (matches ? ? (contains "OOBA")) (matches ? "{ATTR_LABEL}" ?) )"#)
|
||||
.parse()
|
||||
|
@ -566,6 +592,7 @@ mod test {
|
|||
let result = connection.query::<Vec<Entry>>(query).unwrap();
|
||||
assert_eq!(result.len(), 1);
|
||||
|
||||
// Test composed multi-query
|
||||
let query = format!(
|
||||
r#"(and
|
||||
(or
|
||||
|
@ -580,6 +607,7 @@ mod test {
|
|||
let result = connection.query::<Vec<Entry>>(query).unwrap();
|
||||
assert_eq!(result.len(), 1);
|
||||
|
||||
// Test join query
|
||||
let query = format!(
|
||||
r#"(join
|
||||
(matches ?a "FLAVOUR" ?)
|
||||
|
|
Loading…
Reference in New Issue