public void CreateQuery_RequestForComplexObjectWithExernalParamsInObject_GeneratesCorrectQuery() { var client = new TestClient(null); var input = new { test1 = "test1", others = new { test2 = "test2", others = new { test3 = "test3", others = new { test4 = "test4" } } } }; var query = client.CreateQuery(e => new { o = e.ComplexWithParams(input.test1).Test, b = e.ComplexWithParams(input.others.others.others.test4).Complex.ComplexWithParams(input.others.test2).Complex.Test, c = e.ComplexWithParams(input.test1).ComplexWithParams(input.others.others.test3).Simple.Test }); AssertUtils.AreEqualIgnoreLineBreaks(@"query Query($var_0: String!, $var_1: String!, $var_2: String!, $var_3: String!) { field0: complexWithParams(name: $var_0){ field0: test field1: complexWithParams(name: $var_1){ field0: simple{ field0: test __typename } __typename } __typename } field1: complexWithParams(name: $var_2){ field0: complex{ field0: complexWithParams(name: $var_3){ field0: complex{ field0: test __typename } __typename } __typename } __typename } __typename }", query.Query); Assert.AreEqual("test1", query.Variables["var_0"]); Assert.AreEqual("test3", query.Variables["var_1"]); Assert.AreEqual("test4", query.Variables["var_2"]); Assert.AreEqual("test2", query.Variables["var_3"]); }