devoyage-subgraph 0.0.15

Subgraph is a CLI that instantly generates a GraphQL API around Mongo, SQL, and HTTP APIs.
Documentation
use crate::execute;

#[tokio::test]
async fn update_many() {
    let request = async_graphql::Request::new(
        r#"
        mutation {
            update_comments(update_comments_input: { values: { content: "update_many test", status: false }, query: { id: 2 } }) {
                data {
                    id
                }
            }
        }
        "#,
    );

    let response = execute(request, None).await;
    assert!(response.is_ok());
}

#[tokio::test]
async fn update_many_returns_correct_results() {
    let uuid = format!("test_{}", uuid::Uuid::new_v4().to_string());
    let mut ids = vec![];
    for _ in 0..4 {
        let request = async_graphql::Request::new(format!(
            r#"
                mutation {{
                    create_comment(create_comment_input: {{ values: {{ content: "{}", status: true }} }}) {{
                        data {{
                            id
                            content
                        }}
                    }}
                }}
                "#,
            uuid
        ));
        let response = execute(request, None).await;
        let data = response.data.into_json().unwrap();
        let data = data.get("create_comment").unwrap();
        let data = data.get("data").unwrap();
        let data = data.get("id").unwrap();
        let id = data.as_i64().unwrap();
        ids.push(id);
    }

    let request = async_graphql::Request::new(format!(
        r#"
            mutation {{
                update_comments(update_comments_input: {{ values: {{ content: "update_many test", status: false }}, query: {{ OR: [{{ content: "{}" }}, {{ content: "idontexist" }}] }} }}) {{
                    data {{
                        id
                    }}
                }}
            }}
            "#,
        uuid
    ));

    let response = execute(request, None).await;
    assert!(response.is_ok());
    let data = response.data.into_json().unwrap();
    let data = data.get("update_comments").unwrap();
    let data = data.get("data").unwrap();
    let data = data.as_array().unwrap();
    assert_eq!(data.len(), 4);
    for id in ids {
        let mut found = false;
        for item in data {
            let item = item.as_object().unwrap();
            let item_id = item.get("id").unwrap().as_i64().unwrap();
            if id == item_id {
                found = true;
                break;
            }
        }
        assert!(found);
    }
}