diff --git a/apollo-router/src/plugins/demand_control/basic_cost_calculator.rs b/apollo-router/src/plugins/demand_control/basic_cost_calculator.rs index f56eec5527c..d8a18f636b9 100644 --- a/apollo-router/src/plugins/demand_control/basic_cost_calculator.rs +++ b/apollo-router/src/plugins/demand_control/basic_cost_calculator.rs @@ -408,19 +408,30 @@ mod tests { assert_eq!(estimated_cost(schema, query), 0.0) } - #[test] - fn requires_adds_required_field_cost() { + #[test(tokio::test)] + async fn federated_query_with_requires() { let schema = include_str!("./fixtures/federated_ships_schema.graphql"); let query = include_str!("./fixtures/federated_ships_required_query.graphql"); - assert_eq!(estimated_cost(schema, query), 10200.0) + assert_eq!(estimated_cost(schema, query), 10200.0); + assert_eq!(planned_cost(schema, query).await, 10400.0); } #[test(tokio::test)] - async fn query_plan_cost() { + async fn federated_query_with_fragments() { let schema = include_str!("./fixtures/federated_ships_schema.graphql"); - let query = include_str!("./fixtures/federated_ships_required_query.graphql"); + let query = include_str!("./fixtures/federated_ships_fragment_query.graphql"); + + assert_eq!(estimated_cost(schema, query), 300.0); + assert_eq!(planned_cost(schema, query).await, 400.0); + } + + #[test(tokio::test)] + async fn federated_query_with_defer() { + let schema = include_str!("./fixtures/federated_ships_schema.graphql"); + let query = include_str!("./fixtures/federated_ships_deferred_query.graphql"); - assert_eq!(planned_cost(schema, query).await, 10400.0) + assert_eq!(estimated_cost(schema, query), 10200.0); + assert_eq!(planned_cost(schema, query).await, 10400.0); } } diff --git a/apollo-router/src/plugins/demand_control/fixtures/federated_ships_deferred_query.graphql b/apollo-router/src/plugins/demand_control/fixtures/federated_ships_deferred_query.graphql new file mode 100644 index 00000000000..0c3696c4234 --- /dev/null +++ b/apollo-router/src/plugins/demand_control/fixtures/federated_ships_deferred_query.graphql @@ -0,0 +1,8 @@ +{ + ships { + name + ... @defer { + registrationFee + } + } +} \ No newline at end of file diff --git a/apollo-router/src/plugins/demand_control/fixtures/federated_ships_fragment_query.graphql b/apollo-router/src/plugins/demand_control/fixtures/federated_ships_fragment_query.graphql new file mode 100644 index 00000000000..9d6d479fd8d --- /dev/null +++ b/apollo-router/src/plugins/demand_control/fixtures/federated_ships_fragment_query.graphql @@ -0,0 +1,15 @@ +fragment nameAndLicense on User { + licenseNumber + name +} + +{ + ships { + owner { + ...nameAndLicense + } + } + users { + ...nameAndLicense + } +} \ No newline at end of file