tests: add tests for provenance queries

feat/lang-upgrades
Tomáš Mládek 2023-07-27 14:31:30 +02:00
parent 0a67c3c5e7
commit d7f48f1880
1 changed files with 28 additions and 0 deletions

View File

@ -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" ?)