// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information. using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Net.Http; using System.Web.Http.Controllers; using System.Web.Http.Description; using System.Web.Http.Dispatcher; using Moq; using Xunit; namespace System.Web.Http.ApiExplorer { public static class ApiExplorerHelper { public static void VerifyApiDescriptions(Collection apiDescriptions, List expectedResults) { Assert.Equal(expectedResults.Count, apiDescriptions.Count); ApiDescription[] sortedDescriptions = apiDescriptions.OrderBy(description => description.ID).ToArray(); object[] sortedExpectedResults = expectedResults.OrderBy(r => { dynamic expectedResult = r; HttpMethod expectedHttpMethod = expectedResult.HttpMethod; string expectedRelativePath = expectedResult.RelativePath; return expectedHttpMethod + expectedRelativePath; }).ToArray(); for (int i = 0; i < sortedDescriptions.Length; i++) { dynamic expectedResult = sortedExpectedResults[i]; ApiDescription matchingDescription = sortedDescriptions[i]; Assert.Equal(expectedResult.HttpMethod, matchingDescription.HttpMethod); Assert.Equal(expectedResult.RelativePath, matchingDescription.RelativePath); Assert.Equal(expectedResult.HasRequestFormatters, matchingDescription.SupportedRequestBodyFormatters.Count > 0); Assert.Equal(expectedResult.HasResponseFormatters, matchingDescription.SupportedResponseFormatters.Count > 0); Assert.Equal(expectedResult.NumberOfParameters, matchingDescription.ParameterDescriptions.Count); } } public static DefaultHttpControllerSelector GetStrictControllerSelector(HttpConfiguration config, params Type[] controllerTypes) { Dictionary controllerMapping = new Dictionary(); foreach (Type controllerType in controllerTypes) { string controllerName = controllerType.Name.Substring(0, controllerType.Name.Length - DefaultHttpControllerSelector.ControllerSuffix.Length); var controllerDescriptor = new HttpControllerDescriptor(config, controllerName, controllerType); controllerMapping.Add(controllerDescriptor.ControllerName, controllerDescriptor); } Mock factory = new Mock(config); factory.Setup(f => f.GetControllerMapping()).Returns(controllerMapping); return factory.Object; } } }