use aurora_db::Aurora;
use aurora_db::types::{FieldType, Value};
use tempfile::TempDir;
#[tokio::test]
async fn test_platform_style_query_chain() {
let temp_dir = TempDir::new().unwrap();
let db = Aurora::open(temp_dir.path().to_str().unwrap()).await.unwrap();
db.new_collection(
"users",
vec![
("name", aurora_db::types::FieldDefinition { field_type: FieldType::SCALAR_STRING, unique: false, indexed: false, nullable: true, validations: vec![] }),
("role", aurora_db::types::FieldDefinition { field_type: FieldType::SCALAR_STRING, unique: false, indexed: false, nullable: true, validations: vec![] }),
("tier", aurora_db::types::FieldDefinition { field_type: FieldType::SCALAR_STRING, unique: false, indexed: false, nullable: true, validations: vec![] }),
] ,
)
.await
.unwrap();
db.insert_into(
"users",
vec![
("name", Value::String("Alice".into())),
("role", Value::String("admin".into())),
("tier", Value::String("gold".into())),
],
)
.await
.unwrap();
db.insert_into(
"users",
vec![
("name", Value::String("Bob".into())),
("role", Value::String("user".into())),
("tier", Value::String("silver".into())),
],
)
.await
.unwrap();
let id_charlie = db
.insert_into(
"users",
vec![
("name", Value::String("Charlie".into())),
("role", Value::String("user".into())),
("tier", Value::String("gold".into())),
],
)
.await
.unwrap();
let target_users = db
.query("users")
.filter(|f: &aurora_db::query::FilterBuilder| f.eq("tier", "gold"))
.filter(|f: &aurora_db::query::FilterBuilder| !f.eq("role", "admin")) .collect()
.await
.unwrap();
assert_eq!(target_users.len(), 1);
assert_eq!(target_users[0]._sid, id_charlie);
}
#[tokio::test]
async fn test_computed_fields_integration() {
let temp_dir = TempDir::new().unwrap();
let db = Aurora::open(temp_dir.path().to_str().unwrap()).await.unwrap();
db.new_collection(
"cart_items",
vec![
("item", aurora_db::types::FieldDefinition { field_type: FieldType::SCALAR_STRING, unique: false, indexed: false, nullable: true, validations: vec![] }),
("price", aurora_db::types::FieldDefinition { field_type: FieldType::SCALAR_INT, unique: false, indexed: false, nullable: true, validations: vec![] }),
("qty", aurora_db::types::FieldDefinition { field_type: FieldType::SCALAR_INT, unique: false, indexed: false, nullable: true, validations: vec![] }),
],
)
.await
.unwrap();
db.register_computed_field(
"cart_items",
"total",
aurora_db::computed::ComputedExpression::Script("doc.price * doc.qty".to_string()),
)
.await
.unwrap();
db.insert_into(
"cart_items",
vec![
("item", Value::String("Apple".into())),
("price", Value::Int(10)),
("qty", Value::Int(5)),
],
)
.await
.unwrap();
let item = db
.query("cart_items")
.filter(|f: &aurora_db::query::FilterBuilder| f.eq("item", "Apple"))
.collect()
.await
.unwrap();
assert_eq!(item.len(), 1);
let total = item[0].data.get("total").unwrap();
assert_eq!(total, &Value::Int(50));
}