use json_test::JsonTest;
use serde_json::json;
fn main() {
let data = json!({
"orders": [
{
"id": "ord_1",
"customer": "John Doe",
"items": [
{ "product": "Widget", "price": 29.99, "quantity": 2 },
{ "product": "Gadget", "price": 49.99, "quantity": 1 }
],
"status": "shipped",
"shipping_address": {
"country": "US",
"priority": "express"
}
},
{
"id": "ord_2",
"customer": "Jane Smith",
"items": [
{ "product": "Widget", "price": 29.99, "quantity": 1 }
],
"status": "pending",
"shipping_address": {
"country": "UK",
"priority": "standard"
}
}
],
"stats": {
"total_orders": 2,
"countries": ["US", "UK"],
"average_order_value": 89.98
}
});
let mut test = JsonTest::new(&data);
test.assert_path("$.orders[?(@.status == 'shipped')].customer")
.equals(json!("John Doe"))
.assert_path("$.orders[?(@.shipping_address.priority == 'express')].id")
.equals(json!("ord_1"))
.assert_path("$.orders[0].items")
.is_array()
.has_length(2)
.assert_path("$.stats.countries")
.is_array()
.contains(&json!("US"))
.contains(&json!("UK"))
.assert_path("$.stats.average_order_value")
.is_number()
.is_greater_than(80)
.is_less_than(90)
.assert_path("$.orders[?(@.items[*].product == 'Widget')].status")
.is_array()
.has_length(2);
println!("All advanced assertions passed!");
}