Skip to content

Commit

Permalink
GraphQL mutation implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
ttu committed Oct 10, 2017
1 parent ca26074 commit 0a0049c
Show file tree
Hide file tree
Showing 7 changed files with 899 additions and 20 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

### [Unreleased]
* Support for HTTP HEAD Method

* Experimental GraphQL mutations support

### [0.4.0] - 2017-09-13
* Basic Authentication
* Select fields to return from query
Expand Down
134 changes: 134 additions & 0 deletions FakeServer.Test/FakeServerSpecs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -675,6 +675,140 @@ public async Task PostGraphQL()
}
}

[Fact]
public async Task PostGraphQL_Mutation_Update()
{
using (var client = new HttpClient())
{
var patch = @"
mutation {
updateFamilies( input: {
id: 4
patch: {
familyName: Habboo
}
}) {
families {
id
}
}
}";

var contentMutation = new StringContent(patch, Encoding.UTF8, "application/graphql");
var resultMutation = await client.PostAsync($"{_fixture.BaseUrl}/graphql", contentMutation);

Assert.Equal(HttpStatusCode.OK, resultMutation.StatusCode);

var q = @"
query {
families(id: 4) {
familyName
parents(id: 1) {
name
work {
companyName
}
}
}
}";

var contentQuery = new StringContent(q, Encoding.UTF8, "application/graphql");
var resultQuery = await client.PostAsync($"{_fixture.BaseUrl}/graphql", contentQuery);

Assert.Equal(HttpStatusCode.OK, resultQuery.StatusCode);

var data = JsonConvert.DeserializeObject<JObject>(await resultQuery.Content.ReadAsStringAsync());
Assert.NotNull(data["data"]);
Assert.Equal("Habboo", data["data"]["families"][0]["familyName"].Value<string>());
}
}

//[Fact]
public async Task PostGraphQL_Mutation_Add_Delete()
{
using (var client = new HttpClient())
{
var add = @"
mutation {
addFamilies ( input: {
families: {
familyName: Newtons
notes: Hello
}
}) {
families {
id
familyName
children {
name
age
}
}
}
}";

var contentMutation = new StringContent(add, Encoding.UTF8, "application/graphql");
var resultMutation = await client.PostAsync($"{_fixture.BaseUrl}/graphql", contentMutation);

Assert.Equal(HttpStatusCode.OK, resultMutation.StatusCode);

var addResult = JsonConvert.DeserializeObject<JObject>(await resultMutation.Content.ReadAsStringAsync());

var id = addResult["data"]["families"]["id"].Value<string>();

var q = @"
query {
families(id: " + id + @") {
familyName
parents(id: 1) {
name
work {
companyName
}
}
}
}";

var contentQuery = new StringContent(q, Encoding.UTF8, "application/graphql");
var resultQuery = await client.PostAsync($"{_fixture.BaseUrl}/graphql", contentQuery);

Assert.Equal(HttpStatusCode.OK, resultQuery.StatusCode);

var data = JsonConvert.DeserializeObject<JObject>(await resultQuery.Content.ReadAsStringAsync());
Assert.NotNull(data["data"]);
Assert.Equal("Newtons", data["data"]["families"][0]["familyName"].Value<string>());

// Delete

var delete = @"
mutation {
deleteFamilies ( input: {
id: " + id + @"
})
}";

var deleteMutaiton = new StringContent(delete, Encoding.UTF8, "application/graphql");
var resultDelete = await client.PostAsync($"{_fixture.BaseUrl}/graphql", deleteMutaiton);

Assert.Equal(HttpStatusCode.OK, resultDelete.StatusCode);

data = JsonConvert.DeserializeObject<JObject>(await resultDelete.Content.ReadAsStringAsync());

Assert.True(data["data"].Value<bool>());

// Try to fetch deleted

contentQuery = new StringContent(q, Encoding.UTF8, "application/graphql");
resultQuery = await client.PostAsync($"{_fixture.BaseUrl}/graphql", contentQuery);

Assert.Equal(HttpStatusCode.OK, resultQuery.StatusCode);

data = JsonConvert.DeserializeObject<JObject>(await resultQuery.Content.ReadAsStringAsync());
Assert.NotNull(data["data"]);
Assert.Equal("Newtons", data["data"]["families"][0]["familyName"].Value<string>());
}
}

[Fact]
public async Task PostGraphQL_Filter_Bool()
{
Expand Down
Loading

0 comments on commit 0a0049c

Please sign in to comment.