public IEnumerator NetworkError()
        {
            var client  = new GraphQLClient("https://non_resolvable_host_123123123123123");
            var request = new Request {
                Query = "{ continents { name } }"
            };
            var responseType = new { continents = new [] { new { name = "" } } };
            var response     = client.Send(() => responseType, request);

            yield return(response.AsCoroutineUnchecked());

            var ex = response.Expect <UnityWebRequestException>();

#if UNITY_2020_2_OR_NEWER
            Assert.AreEqual(ex.Result, UnityWebRequest.Result.ConnectionError);
#else
            Assert.IsTrue(ex.IsNetworkError);
#endif
        }
        public IEnumerator SimpleQuery()
        {
            var client  = new GraphQLClient(Uri);
            var request = new Request {
                Query = "{ continents { name } }"
            };
            var responseType = new { continents = new [] { new { name = "" } } };
            var response     = client.Send(() => responseType, request);

            yield return(response.AsCoroutine());

            Assert.IsNull(response.Result.Errors);

            var data = response.Result.Data;

            Assert.IsNotNull(data);
            Assert.IsNotNull(data.continents);
            Assert.IsTrue(data.continents.Any(c => c.name == "Europe"));
        }
        public IEnumerator Http404Error()
        {
            var client  = new GraphQLClient("https://google.com/url_that_returns_404_lsdfksadjflksdafjs");
            var request = new Request {
                Query = "{ continents { name } }"
            };
            var responseType = new { continents = new [] { new { name = "" } } };
            var response     = client.Send(() => responseType, request);

            yield return(response.AsCoroutineUnchecked());

            var ex = response.Expect <UnityWebRequestException>();

#if UNITY_2020_2_OR_NEWER
            Assert.AreEqual(ex.Result, UnityWebRequest.Result.ProtocolError);
#else
            Assert.IsTrue(ex.IsHttpError);
#endif
            Assert.AreEqual(ex.ResponseCode, 404);
        }
        public IEnumerator MalformedQuery()
        {
            var client = new GraphQLClient(Uri);
            var query  = new Request {
                Query = "{ continents MALFORMED name } }"
            };
            var responseType = new { continents = new [] { new { name = "" } } };
            var response     = client.Send(() => responseType, query);

            yield return(response.AsCoroutineUnchecked());

            var ex = response.Expect <UnityWebRequestException>();

            Assert.AreEqual(ex.ResponseCode, 400); // Bad request

            var errors = DeserializeResponse(() => responseType, ex.Text).Errors;

            Assert.IsNotNull(errors);
            Assert.IsNotEmpty(errors);
            Assert.IsNotNull(errors[0].Message);
        }
        public IEnumerator QueryWithArgs()
        {
            var client  = new GraphQLClient(Uri);
            var request = new Request
            {
                Query     = "query ContinentNameByCode($code: ID!) { continent(code: $code) { name } }",
                Variables = new
                {
                    code = "EU"
                }
            };
            var responseType = new { continent = new { name = "" } };
            var response     = client.Send(() => responseType, request);

            yield return(response.AsCoroutine());

            Assert.IsNull(response.Result.Errors);

            var data = response.Result.Data;

            Assert.IsNotNull(data);
            Assert.IsNotNull(data.continent);
            Assert.AreEqual(data.continent.name, "Europe");
        }