Skip to content

Commit

Permalink
Merge branch 'release/1.1.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
sahb1239 committed Feb 13, 2018
2 parents af00f86 + 36ef3ae commit 2cad6ad
Show file tree
Hide file tree
Showing 4 changed files with 262 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public IGraphQLQuery<T> AddQuery<T>(params GraphQLQueryArgument[] arguments)
where T : class
{
if (_isExecuted)
throw new NotSupportedException("Cannot add query to already executed batch");
throw new GraphQLBatchAlreadyExecutedException();

var identifier = $"batch{_identifierCount++}";

Expand Down Expand Up @@ -91,7 +91,7 @@ public async Task<T> GetValue<T>(string identitifer)
public async Task Execute()
{
if (_isExecuted)
throw new NotSupportedException("Batch is already executed");
throw new GraphQLBatchAlreadyExecutedException();

_isExecuted = true;

Expand Down
60 changes: 60 additions & 0 deletions tests/SAHB.GraphQLClient.Tests/Batching/BatchingTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,34 @@ public class QueryBatchWithConflictingArgumentsPart2
public string Part2Field4 { get; set; }
}

[Fact]
public async Task Test_Execute_Should_Set_IsExecuted()
{
// Arrange
var expected =
@"{""query"":""query{batch0_Part1Field1:part1_field1(argumentName:\""1\"") batch0_Part1Field2:part1Field2}""}";
var httpClientMock = new GraphQLHttpExecutorMock(
JsonConvert.SerializeObject(new
{
Data = new
{
batch0_Part1Field1 = "Value1",
batch0_Part1Field2 = "Value2"
}
}), expected);
var client = new GraphQLHttpClient(httpClientMock, new GraphQLFieldBuilder(),
new GraphQLQueryGeneratorFromFields());

// Act
var batch = client.CreateBatch("");
var query1 =
batch.Query<QueryBatchWithConflictingArgumentsPart1>(new GraphQLQueryArgument("argumentVariable", 1.ToString()));
var result1 = await query1.Execute();

// Assert isExecuted
Assert.True(batch.IsExecuted());
}

[Fact]
public async Task Test_Execute_And_Add_After_Execute_Should_Throw_Exception()
{
Expand Down Expand Up @@ -206,5 +234,37 @@ public async Task Test_Execute_And_Add_After_Execute_Should_Throw_Exception()
new GraphQLQueryArgument("argumentVariable", 2.ToString()));
});
}

[Fact]
public async Task Test_Execute_Two_Times_Should_Not_Throw_Exception()
{
// Arrange
var expected =
@"{""query"":""query{batch0_Part1Field1:part1_field1(argumentName:\""1\"") batch0_Part1Field2:part1Field2}""}";
var httpClientMock = new GraphQLHttpExecutorMock(
JsonConvert.SerializeObject(new
{
Data = new
{
batch0_Part1Field1 = "Value1",
batch0_Part1Field2 = "Value2"
}
}), expected);
var client = new GraphQLHttpClient(httpClientMock, new GraphQLFieldBuilder(),
new GraphQLQueryGeneratorFromFields());

// Act
var batch = client.CreateBatch("");
var query1 =
batch.Query<QueryBatchWithConflictingArgumentsPart1>(new GraphQLQueryArgument("argumentVariable", 1.ToString()));
var result1 = await query1.Execute();

// Query should not throw but insted just return same output
var result2 = await query1.Execute();

// Assert
Assert.Equal(result1.Part1Field1, result2.Part1Field1);
Assert.Equal(result1.Part1Field2, result2.Part1Field2);
}
}
}
179 changes: 179 additions & 0 deletions tests/SAHB.GraphQLClient.Tests/Builder/GraphQLBuilderTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using SAHB.GraphQLClient.Exceptions;
using SAHB.GraphQLClient.FieldBuilder;
using SAHB.GraphQLClient.QueryGenerator;
using SAHB.GraphQLClient.Tests.GraphQLClient.HttpClientMock;
Expand Down Expand Up @@ -57,5 +58,183 @@ public async Task Test_GraphQL_Builder_Empty_Result()
// Assert
Assert.Equal(null, result);
}

[Fact]
public async Task Test_GraphQL_Builder_Argument()
{
var expected = "{\"query\":\"query{doSomeAction(argumentName:1)}\"}";
var httpClientMock = new GraphQLHttpExecutorMock(
JsonConvert.SerializeObject(new
{
Data = (string)null
}), expected);
var client = new GraphQLHttpClient(httpClientMock, new GraphQLFieldBuilder(), new GraphQLQueryGeneratorFromFields());

// Act
var query = client.CreateQuery(builder =>
builder.Field("doSomeAction", field =>
{
field.Argument("argumentName", "argumentType", "variableName");
}), "randomurl", arguments: new GraphQLQueryArgument("variableName", 1));
var result = await query.Execute();

// Assert
Assert.Equal(null, result);
}

[Fact]
public async Task Test_GraphQL_Builder_Argument_Implicit_Optional_Does_Not_Throw()
{
var expected = "{\"query\":\"query{doSomeAction}\"}";
var httpClientMock = new GraphQLHttpExecutorMock(
JsonConvert.SerializeObject(new
{
Data = (string)null
}), expected);
var client = new GraphQLHttpClient(httpClientMock, new GraphQLFieldBuilder(), new GraphQLQueryGeneratorFromFields());

// Act
var query = client.CreateQuery(builder =>
builder.Field("doSomeAction", field =>
{
field.Argument("argumentName", "argumentType", "variableName");
}), "randomurl");
var result = await query.Execute();

// Assert
Assert.Equal(null, result);
}

[Fact]
public async Task Test_GraphQL_Builder_Argument_Explicit_Optional_Does_Not_Throw()
{
var expected = "{\"query\":\"query{doSomeAction}\"}";
var httpClientMock = new GraphQLHttpExecutorMock(
JsonConvert.SerializeObject(new
{
Data = (string)null
}), expected);
var client = new GraphQLHttpClient(httpClientMock, new GraphQLFieldBuilder(), new GraphQLQueryGeneratorFromFields());

// Act
var query = client.CreateQuery(builder =>
builder.Field("doSomeAction", field =>
{
field.Argument("argumentName", "argumentType", "variableName", isRequired: false);
}), "randomurl");
var result = await query.Execute();

// Assert
Assert.Equal(null, result);
}

[Fact]
public void Test_GraphQL_Builder_Argument_Required_Throws()
{
var expected = "{\"query\":\"query{doSomeAction}\"}";
var httpClientMock = new GraphQLHttpExecutorMock(
JsonConvert.SerializeObject(new
{
Data = (string)null
}), expected);
var client = new GraphQLHttpClient(httpClientMock, new GraphQLFieldBuilder(), new GraphQLQueryGeneratorFromFields());

// Act / Assert
Assert.Throws<GraphQLArgumentsRequiredException>(() => client.CreateQuery(builder =>
builder.Field("doSomeAction",
field => { field.Argument("argumentName", "argumentType", "variableName", isRequired: true); }),
"randomurl"));
}

[Fact]
public async Task Test_GraphQL_Builder_Argument_Inlined_Explicit_Off()
{
var expected = "{\"query\":\"query($variableName:argumentType){doSomeAction(argumentName:$variableName)}\",\"variables\":{\"variableName\":1}}";
var httpClientMock = new GraphQLHttpExecutorMock(
JsonConvert.SerializeObject(new
{
Data = (string)null
}), expected);
var client = new GraphQLHttpClient(httpClientMock, new GraphQLFieldBuilder(), new GraphQLQueryGeneratorFromFields());

// Act
var query = client.CreateQuery(builder =>
builder.Field("doSomeAction", field =>
{
field.Argument("argumentName", "argumentType", "variableName", isRequired:true, inlineArgument:false);
}), "randomurl", arguments: new GraphQLQueryArgument("variableName", 1));
var result = await query.Execute();

// Assert
Assert.Equal(null, result);
}

[Fact]
public async Task Test_GraphQL_Builder_Argument_Inlined_Implicit_Off()
{
var expected = "{\"query\":\"query($variableName:argumentType){doSomeAction(argumentName:$variableName)}\",\"variables\":{\"variableName\":{\"a\":\"a\",\"b\":\"b\"}}}";
var httpClientMock = new GraphQLHttpExecutorMock(
JsonConvert.SerializeObject(new
{
Data = (string)null
}), expected);
var client = new GraphQLHttpClient(httpClientMock, new GraphQLFieldBuilder(), new GraphQLQueryGeneratorFromFields());

// Act
var query = client.CreateQuery(builder =>
builder.Field("doSomeAction", field =>
{
field.Argument("argumentName", "argumentType", "variableName", isRequired: true, inlineArgument: false);
}), "randomurl", arguments: new GraphQLQueryArgument("variableName", new {a = "a", b = "b"}));
var result = await query.Execute();

// Assert
Assert.Equal(null, result);
}

[Fact]
public async Task Test_GraphQL_Builder_Returns_Exception_When_Error_Occurs()
{
// Arrange
var expected =
"{\"query\":\"query{field}\"}";
var httpClientMock = new GraphQLHttpExecutorMock(
JsonConvert.SerializeObject(new
{
Data = new
{
Field = "FieldValue"
},
Errors = new[]
{
new
{
message = "This is not a valid query!",
locations = new []
{
new
{
line = 1,
column = 0
},
new
{
line = 1,
column = 1
}
}
}
}
}), expected);
var client = new GraphQLHttpClient(httpClientMock, new GraphQLFieldBuilder(),
new GraphQLQueryGeneratorFromFields());

// Act
var query = client.CreateQuery(builder =>
builder.Field("field"), "randomurl");

// Assert
await Assert.ThrowsAsync<GraphQLErrorException>(() => query.Execute());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,27 @@ public void Test_Inline_String_Argument_Implicit()
Assert.Equal(expected, actual);
}

[Fact]
public void Test_Inline_DynamicType_Argument_Implicit_Not_Inlined()
{
// Arrange
var expected = "{\"query\":\"query($variableName:argumentType){alias:field(argumentName:$variableName)}\",\"variables\":{\"variableName\":{\"arg1\":\"val1\",\"arg2\":2}}}";
var fields = new[]
{
new GraphQLField(alias: "alias", field: "field", fields: null,
arguments: new List<GraphQLFieldArguments>
{
new GraphQLFieldArguments("argumentName", "argumentType", "variableName", isRequired:false, inlineArgument:null)
})
};

// Act
var actual = _queryGenerator.GetQuery(fields, new GraphQLQueryArgument("variableName", new {arg1 = "val1", arg2 = 2}));

// Assert
Assert.Equal(expected, actual);
}

[Fact]
public void Test_Inline_String_Argument_Explicit_Not_Inlined()
{
Expand Down

0 comments on commit 2cad6ad

Please sign in to comment.