use serde_json::json; #[derive(cynic::QueryFragment, Debug, PartialEq)] #[cynic( schema_path = "../schemas/starwars.schema.graphql", graphql_type = "Root" )] struct QueryWithFeatures { #[arguments(id = cynic::Id::new("ZmlsbXM6MQ=="))] #[cynic(rename = "film", alias, feature = "a_new_hope")] a_new_hope: Option, #[arguments(id = cynic::Id::new("ZmlsbXM6Mg=="))] #[cynic(rename = "film", alias)] empire_strikes_back: Option, } #[derive(cynic::QueryFragment, Debug, PartialEq)] #[cynic(schema_path = "../schemas/starwars.schema.graphql")] struct Film { title: Option, } mod schema { cynic::use_schema!("../schemas/starwars.schema.graphql"); } #[test] fn query_string_with_feature_enabled() { let operation = cynic::OperationBuilder::::query() .with_variables(()) .with_feature_enabled("a_new_hope") .build() .expect("operation building to succeed"); insta::assert_snapshot!(operation.query); } #[test] fn query_string_without_feature_enabled() { let operation = cynic::OperationBuilder::::query() .with_variables(()) .build() .expect("operation building to succeed"); insta::assert_snapshot!(operation.query); } #[test] fn decoding_succeeds_with_data_missing() { let data = serde_json::from_value::( json!({ "empire_strikes_back": {"title": "Empire Strikes Back"} }), ) .expect("deser to succeed"); assert_eq!(data.a_new_hope, None); assert_eq!( data.empire_strikes_back, Some(Film { title: Some("Empire Strikes Back".into()) }) ); } #[test] fn test_decoding_with_data_present() { let data = serde_json::from_value::(json!({ "empire_strikes_back": {"title": "Empire Strikes Back"}, "a_new_hope": {"title": "A New Hope"} })) .expect("deser to succeed"); assert_eq!( data.a_new_hope, Some(Film { title: Some("A New Hope".into()) }) ); assert_eq!( data.empire_strikes_back, Some(Film { title: Some("Empire Strikes Back".into()) }) ); }