Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 105 additions & 0 deletions src/Http/Wolverine.Http.Tests/from_query_binding.cs
Original file line number Diff line number Diff line change
Expand Up @@ -184,4 +184,109 @@ public async Task value_with_alias()
(await forQuerystring("name=Jones&number=95&Aliased=foo")).ValueWithAlias.ShouldBe("foo");
(await forQuerystring("name=Jones&number=95&valueWithAlias=foo")).ValueWithAlias.ShouldBeNull();
}

[Fact]
public async Task aliased_string_array_as_property()
{
var result = await Scenario(x =>
{
x.Get
.Url("/api/bigquery")
.QueryString("v", "one")
.QueryString("v", "two");
});

var query = result.ReadAsJson<BigQuery>();
query.AliasedValues.ShouldBe(["one", "two"]);
}

[Fact]
public async Task aliased_int_array_as_property()
{
var result = await Scenario(x =>
{
x.Get
.Url("/api/bigquery")
.QueryString("n", "10")
.QueryString("n", "20");
});

var query = result.ReadAsJson<BigQuery>();
query.AliasedNumbers.ShouldBe([10, 20]);
}

[Fact]
public async Task aliased_enum_list_as_property()
{
var result = await Scenario(x =>
{
x.Get
.Url("/api/bigquery")
.QueryString("d", "North")
.QueryString("d", "South");
});

var query = result.ReadAsJson<BigQuery>();
query.AliasedEnumList.ShouldBe([Direction.North, Direction.South]);
}

[Fact]
public async Task aliased_string_array_in_record_with_fromquery()
{
var result = await Scenario(x =>
{
x.Get
.Url("/api/fromquery/aliased-array")
.QueryString("v", "one")
.QueryString("v", "two");
});

var query = result.ReadAsJson<AliasedArrayQuery>();
query.Values.ShouldBe(["one", "two"]);
}

[Fact]
public async Task aliased_int_array_in_record_with_fromquery()
{
var result = await Scenario(x =>
{
x.Get
.Url("/api/fromquery/aliased-int-array")
.QueryString("n", "5")
.QueryString("n", "10");
});

var query = result.ReadAsJson<AliasedIntArrayQuery>();
query.Numbers.ShouldBe([5, 10]);
}

[Fact]
public async Task aliased_string_array_in_record_with_asparameters()
{
var result = await Scenario(x =>
{
x.Get
.Url("/api/asparameters/aliased-array")
.QueryString("v", "one")
.QueryString("v", "two");
});

var query = result.ReadAsJson<AliasedArrayQuery>();
query.Values.ShouldBe(["one", "two"]);
}

[Fact]
public async Task aliased_int_array_in_record_with_asparameters()
{
var result = await Scenario(x =>
{
x.Get
.Url("/api/asparameters/aliased-int-array")
.QueryString("n", "5")
.QueryString("n", "10");
});

var query = result.ReadAsJson<AliasedIntArrayQuery>();
query.Numbers.ShouldBe([5, 10]);
}
}
10 changes: 5 additions & 5 deletions src/Http/Wolverine.Http/HttpChain.cs
Original file line number Diff line number Diff line change
Expand Up @@ -522,7 +522,7 @@ public bool FindQuerystringVariable(Type variableType, string routeOrParameterNa

if (parameterType == typeof(string[]))
{
variable = new ParsedArrayQueryStringValue(parameterType, parameterName).Variable;
variable = new ParsedArrayQueryStringValue(parameterType, key).Variable;
variable.Name = key;
_querystringVariables.Add(variable);
}
Expand All @@ -533,22 +533,22 @@ public bool FindQuerystringVariable(Type variableType, string routeOrParameterNa
if (RouteParameterStrategy.CanParse(inner))
{
//variable = new ParsedNullableQueryStringValue(parameterType, parameterName).Variable;
variable = new ReadHttpFrame(BindingSource.QueryString, parameterType, parameterName).Variable;
variable = new ReadHttpFrame(BindingSource.QueryString, parameterType, key).Variable;
variable.Name = key;
_querystringVariables.Add(variable);
}
}

if (parameterType.IsArray && RouteParameterStrategy.CanParse(parameterType.GetElementType()))
{
variable = new ParsedArrayQueryStringValue(parameterType, parameterName).Variable;
variable = new ParsedArrayQueryStringValue(parameterType, key).Variable;
variable.Name = key;
_querystringVariables.Add(variable);
}

if (ParsedCollectionQueryStringValue.CanParse(parameterType))
{
variable = new ParsedCollectionQueryStringValue(parameterType, parameterName).Variable;
variable = new ParsedCollectionQueryStringValue(parameterType, key).Variable;
variable.Name = key;
_querystringVariables.Add(variable);
}
Expand Down
28 changes: 28 additions & 0 deletions src/Http/WolverineWebApi/QuerystringEndpoints.cs
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,18 @@ public static class FromQueryEndpoints

[WolverineGet("/api/bigquery")]
public static BigQuery Get([FromQuery] BigQuery query) => query;

[WolverineGet("/api/fromquery/aliased-array")]
public static AliasedArrayQuery GetAliasedArray([FromQuery] AliasedArrayQuery query) => query;

[WolverineGet("/api/fromquery/aliased-int-array")]
public static AliasedIntArrayQuery GetAliasedIntArray([FromQuery] AliasedIntArrayQuery query) => query;

[WolverineGet("/api/asparameters/aliased-array")]
public static AliasedArrayQuery GetAliasedArrayAsParams([AsParameters] AliasedArrayQuery query) => query;

[WolverineGet("/api/asparameters/aliased-int-array")]
public static AliasedIntArrayQuery GetAliasedIntArrayAsParams([AsParameters] AliasedIntArrayQuery query) => query;
}


Expand All @@ -99,6 +111,10 @@ public record Query3(Guid Id);

public record Query4(string Name, int Number, Direction Direction);

public record AliasedArrayQuery([FromQuery(Name = "v")] string[] Values);

public record AliasedIntArrayQuery([FromQuery(Name = "n")] int[] Numbers);


public class BigQuery
{
Expand All @@ -122,4 +138,16 @@ public class BigQuery
public List<Direction> EnumListValues { get; set; } = new();

public List<int> IntList { get; set; }

[FromQuery(Name = "v")]
[FromForm(Name = "v")]
public string[] AliasedValues { get; set; }

[FromQuery(Name = "n")]
[FromForm(Name = "n")]
public int[] AliasedNumbers { get; set; }

[FromQuery(Name = "d")]
[FromForm(Name = "d")]
public List<Direction> AliasedEnumList { get; set; } = new();
}
Loading