a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
205 lines
12 KiB
C#
205 lines
12 KiB
C#
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
|
|
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Net.Http.Formatting.DataSets;
|
|
using System.Net.Http.Headers;
|
|
using Microsoft.TestCommon;
|
|
using Xunit;
|
|
using Xunit.Extensions;
|
|
using Assert = Microsoft.TestCommon.AssertEx;
|
|
|
|
namespace System.Net.Http.Formatting
|
|
{
|
|
public class QueryStringMappingTests
|
|
{
|
|
public static IEnumerable<string> UriStringsWithoutQuery
|
|
{
|
|
get
|
|
{
|
|
return HttpUnitTestDataSets.UriStrings.Where((s) => !s.Contains('?'));
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Description", "QueryStringMapping is public, and concrete.")]
|
|
public void TypeIsCorrect()
|
|
{
|
|
Assert.Type.HasProperties(
|
|
typeof(QueryStringMapping),
|
|
TypeAssert.TypeProperties.IsPublicVisibleClass,
|
|
typeof(MediaTypeMapping));
|
|
}
|
|
|
|
[Theory]
|
|
[TestDataSet(
|
|
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterNames",
|
|
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterValues",
|
|
typeof(HttpUnitTestDataSets), "LegalMediaTypeHeaderValues")]
|
|
[Trait("Description", "QueryStringMapping(string, string, MediaTypeHeaderValue) sets properties.")]
|
|
public void Constructor(string queryStringParameterName, string queryStringParameterValue, MediaTypeHeaderValue mediaType)
|
|
{
|
|
QueryStringMapping mapping = new QueryStringMapping(queryStringParameterName, queryStringParameterValue, mediaType);
|
|
Assert.Equal(queryStringParameterName, mapping.QueryStringParameterName);
|
|
Assert.Equal(queryStringParameterValue, mapping.QueryStringParameterValue);
|
|
Assert.MediaType.AreEqual(mediaType, mapping.MediaType, "MediaType failed to set.");
|
|
}
|
|
|
|
[Theory]
|
|
[TestDataSet(
|
|
typeof(HttpUnitTestDataSets), "LegalMediaTypeHeaderValues",
|
|
typeof(CommonUnitTestDataSets), "EmptyStrings")]
|
|
[Trait("Description", "QueryStringMapping(string, string, MediaTypeHeaderValue) throws with empty QueryStringParameterName.")]
|
|
public void ConstructorThrowsWithEmptyQueryParameterName(MediaTypeHeaderValue mediaType, string queryStringParameterName)
|
|
{
|
|
Assert.ThrowsArgumentNull(() => new QueryStringMapping(queryStringParameterName, "json", mediaType), "queryStringParameterName");
|
|
}
|
|
|
|
[Theory]
|
|
[TestDataSet(
|
|
typeof(HttpUnitTestDataSets), "LegalMediaTypeHeaderValues",
|
|
typeof(CommonUnitTestDataSets), "EmptyStrings")]
|
|
[Trait("Description", "QueryStringMapping(string, string, MediaTypeHeaderValue) throws with empty QueryStringParameterValue.")]
|
|
public void ConstructorThrowsWithEmptyQueryParameterValue(MediaTypeHeaderValue mediaType, string queryStringParameterValue)
|
|
{
|
|
Assert.ThrowsArgumentNull(() => new QueryStringMapping("query", queryStringParameterValue, mediaType), "queryStringParameterValue");
|
|
}
|
|
|
|
[Theory]
|
|
[TestDataSet(
|
|
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterNames",
|
|
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterValues")]
|
|
[Trait("Description", "QueryStringMapping(string, string, MediaTypeHeaderValue) throws with null MediaTypeHeaderValue.")]
|
|
public void ConstructorThrowsWithNullMediaTypeHeaderValue(string queryStringParameterName, string queryStringParameterValue)
|
|
{
|
|
Assert.ThrowsArgumentNull(() => new QueryStringMapping(queryStringParameterName, queryStringParameterValue, (MediaTypeHeaderValue)null), "mediaType");
|
|
}
|
|
|
|
[Theory]
|
|
[TestDataSet(
|
|
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterNames",
|
|
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterValues",
|
|
typeof(HttpUnitTestDataSets), "LegalMediaTypeStrings")]
|
|
[Trait("Description", "QueryStringMapping(string, string, string) sets properties.")]
|
|
public void Constructor1(string queryStringParameterName, string queryStringParameterValue, string mediaType)
|
|
{
|
|
QueryStringMapping mapping = new QueryStringMapping(queryStringParameterName, queryStringParameterValue, mediaType);
|
|
Assert.Equal(queryStringParameterName, mapping.QueryStringParameterName);
|
|
Assert.Equal(queryStringParameterValue, mapping.QueryStringParameterValue);
|
|
Assert.MediaType.AreEqual(mediaType, mapping.MediaType, "MediaType failed to set.");
|
|
}
|
|
|
|
[Theory]
|
|
[TestDataSet(
|
|
typeof(HttpUnitTestDataSets), "LegalMediaTypeStrings",
|
|
typeof(CommonUnitTestDataSets), "EmptyStrings")]
|
|
[Trait("Description", "QueryStringMapping(string, string, string) throws with empty QueryStringParameterName.")]
|
|
public void Constructor1ThrowsWithEmptyQueryParameterName(string mediaType, string queryStringParameterName)
|
|
{
|
|
Assert.ThrowsArgumentNull(() => new QueryStringMapping(queryStringParameterName, "json", mediaType), "queryStringParameterName");
|
|
}
|
|
|
|
[Theory]
|
|
[TestDataSet(
|
|
typeof(HttpUnitTestDataSets), "LegalMediaTypeStrings",
|
|
typeof(CommonUnitTestDataSets), "EmptyStrings")]
|
|
[Trait("Description", "QueryStringMapping(string, string, string) throws with empty QueryStringParameterValue.")]
|
|
public void Constructor1ThrowsWithEmptyQueryParameterValue(string mediaType, string queryStringParameterValue)
|
|
{
|
|
Assert.ThrowsArgumentNull(() => new QueryStringMapping("query", queryStringParameterValue, mediaType), "queryStringParameterValue");
|
|
}
|
|
|
|
[Theory]
|
|
[TestDataSet(
|
|
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterNames",
|
|
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterValues",
|
|
typeof(CommonUnitTestDataSets), "EmptyStrings")]
|
|
[Trait("Description", "QueryStringMapping(string, string, string) throws with empty MediaType.")]
|
|
public void Constructor1ThrowsWithEmptyMediaType(string queryStringParameterName, string queryStringParameterValue, string mediaType)
|
|
{
|
|
Assert.ThrowsArgumentNull(() => new QueryStringMapping(queryStringParameterName, queryStringParameterValue, (MediaTypeHeaderValue)null), "mediaType");
|
|
}
|
|
|
|
[Theory]
|
|
[TestDataSet(
|
|
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterNames",
|
|
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterValues",
|
|
typeof(HttpUnitTestDataSets), "LegalMediaTypeStrings",
|
|
typeof(QueryStringMappingTests), "UriStringsWithoutQuery")]
|
|
[Trait("Description", "TryMatchMediaType(HttpRequestMessage) returns match when the QueryStringParameterName and QueryStringParameterValue are in the Uri.")]
|
|
public void TryMatchMediaTypeReturnsMatchWithQueryStringParameterNameAndValueInUri(string queryStringParameterName, string queryStringParameterValue, string mediaType, string uriBase)
|
|
{
|
|
|
|
QueryStringMapping mapping = new QueryStringMapping(queryStringParameterName, queryStringParameterValue, mediaType);
|
|
string uri = uriBase + "?" + queryStringParameterName + "=" + queryStringParameterValue;
|
|
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, uri);
|
|
Assert.Equal(1.0, mapping.TryMatchMediaType(request));
|
|
}
|
|
|
|
[Theory]
|
|
[TestDataSet(
|
|
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterNames",
|
|
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterValues",
|
|
typeof(HttpUnitTestDataSets), "LegalMediaTypeStrings",
|
|
typeof(QueryStringMappingTests), "UriStringsWithoutQuery")]
|
|
[Trait("Description", "TryMatchMediaType(HttpRequestMessage) returns 0.0 when the QueryStringParameterName is not in the Uri.")]
|
|
public void TryMatchMediaTypeReturnsZeroWithQueryStringParameterNameNotInUri(string queryStringParameterName, string queryStringParameterValue, string mediaType, string uriBase)
|
|
{
|
|
QueryStringMapping mapping = new QueryStringMapping(queryStringParameterName, queryStringParameterValue, mediaType);
|
|
string uri = uriBase + "?" + "not" + queryStringParameterName + "=" + queryStringParameterValue;
|
|
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, uri);
|
|
Assert.Equal(0.0, mapping.TryMatchMediaType(request));
|
|
}
|
|
|
|
[Theory]
|
|
[TestDataSet(
|
|
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterNames",
|
|
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterValues",
|
|
typeof(HttpUnitTestDataSets), "LegalMediaTypeStrings",
|
|
typeof(QueryStringMappingTests), "UriStringsWithoutQuery")]
|
|
[Trait("Description", "TryMatchMediaType(HttpRequestMessage) returns 0.0 when the QueryStringParameterValue is not in the Uri.")]
|
|
public void TryMatchMediaTypeReturnsZeroWithQueryStringParameterValueNotInUri(string queryStringParameterName, string queryStringParameterValue, string mediaType, string uriBase)
|
|
{
|
|
QueryStringMapping mapping = new QueryStringMapping(queryStringParameterName, queryStringParameterValue, mediaType);
|
|
string uri = uriBase + "?" + queryStringParameterName + "=" + "not" + queryStringParameterValue;
|
|
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, uri);
|
|
Assert.Equal(0.0, mapping.TryMatchMediaType(request));
|
|
}
|
|
|
|
[Theory]
|
|
[TestDataSet(
|
|
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterNames",
|
|
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterValues",
|
|
typeof(HttpUnitTestDataSets), "LegalMediaTypeStrings")]
|
|
[Trait("Description", "TryMatchMediaType(HttpRequestMessage) throws with a null HttpRequestMessage.")]
|
|
public void TryMatchMediaTypeThrowsWithNullHttpRequestMessage(string queryStringParameterName, string queryStringParameterValue, string mediaType)
|
|
{
|
|
QueryStringMapping mapping = new QueryStringMapping(queryStringParameterName, queryStringParameterValue, mediaType);
|
|
Assert.ThrowsArgumentNull(() => mapping.TryMatchMediaType(request: null), "request");
|
|
}
|
|
|
|
[Theory]
|
|
[TestDataSet(
|
|
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterNames",
|
|
typeof(HttpUnitTestDataSets), "LegalQueryStringParameterValues",
|
|
typeof(HttpUnitTestDataSets), "LegalMediaTypeStrings")]
|
|
[Trait("Description", "TryMatchMediaType(HttpRequestMessage) throws with a null Uri in HttpRequestMessage.")]
|
|
public void TryMatchMediaTypeThrowsWithNullUriInHttpRequestMessage(string queryStringParameterName, string queryStringParameterValue, string mediaType)
|
|
{
|
|
QueryStringMapping mapping = new QueryStringMapping(queryStringParameterName, queryStringParameterValue, mediaType);
|
|
string errorMessage = RS.Format(Properties.Resources.NonNullUriRequiredForMediaTypeMapping, typeof(QueryStringMapping).Name);
|
|
Assert.Throws<InvalidOperationException>(() => mapping.TryMatchMediaType(new HttpRequestMessage()), errorMessage);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("nAmE", "VaLuE", "name=value")]
|
|
[InlineData("Format", "Xml", "format=xml")]
|
|
public void TryMatchMediaTypeIsCaseInsensitive(string name, string value, string query)
|
|
{
|
|
QueryStringMapping mapping = new QueryStringMapping(name, value, "application/json");
|
|
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/?" + query);
|
|
Assert.Equal(1.0, mapping.TryMatchMediaType(request));
|
|
}
|
|
}
|
|
}
|