-
-
Notifications
You must be signed in to change notification settings - Fork 158
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add test for alternate Swagger route
- Loading branch information
Showing
129 changed files
with
15,579 additions
and
0 deletions.
There are no files selected for viewing
55 changes: 55 additions & 0 deletions
55
test/OpenApiKiotaEndToEndTests/Links/AlternateOpenApiRouteTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
using FluentAssertions; | ||
using Microsoft.Extensions.DependencyInjection; | ||
using Microsoft.Kiota.Http.HttpClientLibrary; | ||
using OpenApiKiotaEndToEndTests.Links.GeneratedCode; | ||
using OpenApiKiotaEndToEndTests.Links.GeneratedCode.Models; | ||
using OpenApiTests; | ||
using OpenApiTests.Links; | ||
using Swashbuckle.AspNetCore.Swagger; | ||
using TestBuildingBlocks; | ||
using Xunit; | ||
using Xunit.Abstractions; | ||
|
||
namespace OpenApiKiotaEndToEndTests.Links; | ||
|
||
public sealed class AlternateOpenApiRouteTests : IClassFixture<IntegrationTestContext<OpenApiStartup<LinkDbContext>, LinkDbContext>> | ||
{ | ||
private readonly IntegrationTestContext<OpenApiStartup<LinkDbContext>, LinkDbContext> _testContext; | ||
private readonly TestableHttpClientRequestAdapterFactory _requestAdapterFactory; | ||
private readonly LinkFakers _fakers = new(); | ||
|
||
public AlternateOpenApiRouteTests(IntegrationTestContext<OpenApiStartup<LinkDbContext>, LinkDbContext> testContext, ITestOutputHelper testOutputHelper) | ||
{ | ||
_testContext = testContext; | ||
_requestAdapterFactory = new TestableHttpClientRequestAdapterFactory(testOutputHelper); | ||
|
||
testContext.ConfigureServices(services => | ||
services.Configure<SwaggerOptions>(options => options.RouteTemplate = "api-docs/{documentName}/swagger.yaml")); | ||
|
||
testContext.UseController<ExcursionsController>(); | ||
} | ||
|
||
[Fact] | ||
public async Task DescribedBy_link_matches_alternate_OpenAPI_route() | ||
{ | ||
// Arrange | ||
Excursion excursion = _fakers.Excursion.Generate(); | ||
|
||
using HttpClientRequestAdapter requestAdapter = _requestAdapterFactory.CreateAdapter(_testContext.Factory); | ||
var apiClient = new LinksClient(requestAdapter); | ||
|
||
await _testContext.RunOnDatabaseAsync(async dbContext => | ||
{ | ||
dbContext.Excursions.Add(excursion); | ||
await dbContext.SaveChangesAsync(); | ||
}); | ||
|
||
// Act | ||
ExcursionPrimaryResponseDocument? response = await apiClient.Excursions[excursion.StringId].GetAsync(); | ||
|
||
// Assert | ||
response.ShouldNotBeNull(); | ||
response.Links.ShouldNotBeNull(); | ||
response.Links.Describedby.Should().Be("api-docs/v1/swagger.yaml"); | ||
} | ||
} |
198 changes: 198 additions & 0 deletions
198
...nApiKiotaEndToEndTests/Links/GeneratedCode/Accommodations/AccommodationsRequestBuilder.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,198 @@ | ||
// <auto-generated/> | ||
using Microsoft.Kiota.Abstractions.Serialization; | ||
using Microsoft.Kiota.Abstractions; | ||
using OpenApiKiotaEndToEndTests.Links.GeneratedCode.Accommodations.Item; | ||
using OpenApiKiotaEndToEndTests.Links.GeneratedCode.Models; | ||
using System.Collections.Generic; | ||
using System.IO; | ||
using System.Linq; | ||
using System.Threading.Tasks; | ||
using System.Threading; | ||
using System; | ||
namespace OpenApiKiotaEndToEndTests.Links.GeneratedCode.Accommodations { | ||
/// <summary> | ||
/// Builds and executes requests for operations under \accommodations | ||
/// </summary> | ||
public class AccommodationsRequestBuilder : BaseRequestBuilder { | ||
/// <summary>Gets an item from the OpenApiKiotaEndToEndTests.Links.GeneratedCode.accommodations.item collection</summary> | ||
/// <param name="position">The identifier of the accommodation to retrieve.</param> | ||
public AccommodationsItemRequestBuilder this[string position] { get { | ||
var urlTplParams = new Dictionary<string, object>(PathParameters); | ||
urlTplParams.Add("id", position); | ||
return new AccommodationsItemRequestBuilder(urlTplParams, RequestAdapter); | ||
} } | ||
/// <summary> | ||
/// Instantiates a new AccommodationsRequestBuilder and sets the default values. | ||
/// </summary> | ||
/// <param name="pathParameters">Path parameters for the request</param> | ||
/// <param name="requestAdapter">The request adapter to use to execute the requests.</param> | ||
public AccommodationsRequestBuilder(Dictionary<string, object> pathParameters, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/accommodations{?query*}", pathParameters) { | ||
} | ||
/// <summary> | ||
/// Instantiates a new AccommodationsRequestBuilder and sets the default values. | ||
/// </summary> | ||
/// <param name="rawUrl">The raw URL to use for the request builder.</param> | ||
/// <param name="requestAdapter">The request adapter to use to execute the requests.</param> | ||
public AccommodationsRequestBuilder(string rawUrl, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/accommodations{?query*}", rawUrl) { | ||
} | ||
/// <summary> | ||
/// Retrieves a collection of accommodations. | ||
/// </summary> | ||
/// <param name="cancellationToken">Cancellation token to use when cancelling requests</param> | ||
/// <param name="requestConfiguration">Configuration for the request such as headers, query parameters, and middleware options.</param> | ||
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER | ||
#nullable enable | ||
public async Task<AccommodationCollectionResponseDocument?> GetAsync(Action<RequestConfiguration<AccommodationsRequestBuilderGetQueryParameters>>? requestConfiguration = default, CancellationToken cancellationToken = default) { | ||
#nullable restore | ||
#else | ||
public async Task<AccommodationCollectionResponseDocument> GetAsync(Action<RequestConfiguration<AccommodationsRequestBuilderGetQueryParameters>> requestConfiguration = default, CancellationToken cancellationToken = default) { | ||
#endif | ||
var requestInfo = ToGetRequestInformation(requestConfiguration); | ||
var errorMapping = new Dictionary<string, ParsableFactory<IParsable>> { | ||
{"400", ErrorResponseDocument.CreateFromDiscriminatorValue}, | ||
}; | ||
return await RequestAdapter.SendAsync<AccommodationCollectionResponseDocument>(requestInfo, AccommodationCollectionResponseDocument.CreateFromDiscriminatorValue, errorMapping, cancellationToken).ConfigureAwait(false); | ||
} | ||
/// <summary> | ||
/// Compare the returned ETag HTTP header with an earlier one to determine if the response has changed since it was fetched. | ||
/// </summary> | ||
/// <param name="cancellationToken">Cancellation token to use when cancelling requests</param> | ||
/// <param name="requestConfiguration">Configuration for the request such as headers, query parameters, and middleware options.</param> | ||
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER | ||
#nullable enable | ||
public async Task<Stream?> HeadAsync(Action<RequestConfiguration<AccommodationsRequestBuilderHeadQueryParameters>>? requestConfiguration = default, CancellationToken cancellationToken = default) { | ||
#nullable restore | ||
#else | ||
public async Task<Stream> HeadAsync(Action<RequestConfiguration<AccommodationsRequestBuilderHeadQueryParameters>> requestConfiguration = default, CancellationToken cancellationToken = default) { | ||
#endif | ||
var requestInfo = ToHeadRequestInformation(requestConfiguration); | ||
return await RequestAdapter.SendPrimitiveAsync<Stream>(requestInfo, default, cancellationToken).ConfigureAwait(false); | ||
} | ||
/// <summary> | ||
/// Creates a new accommodation. | ||
/// </summary> | ||
/// <param name="body">The request body</param> | ||
/// <param name="cancellationToken">Cancellation token to use when cancelling requests</param> | ||
/// <param name="requestConfiguration">Configuration for the request such as headers, query parameters, and middleware options.</param> | ||
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER | ||
#nullable enable | ||
public async Task<AccommodationPrimaryResponseDocument?> PostAsync(AccommodationPostRequestDocument body, Action<RequestConfiguration<AccommodationsRequestBuilderPostQueryParameters>>? requestConfiguration = default, CancellationToken cancellationToken = default) { | ||
#nullable restore | ||
#else | ||
public async Task<AccommodationPrimaryResponseDocument> PostAsync(AccommodationPostRequestDocument body, Action<RequestConfiguration<AccommodationsRequestBuilderPostQueryParameters>> requestConfiguration = default, CancellationToken cancellationToken = default) { | ||
#endif | ||
_ = body ?? throw new ArgumentNullException(nameof(body)); | ||
var requestInfo = ToPostRequestInformation(body, requestConfiguration); | ||
var errorMapping = new Dictionary<string, ParsableFactory<IParsable>> { | ||
{"400", ErrorResponseDocument.CreateFromDiscriminatorValue}, | ||
{"403", ErrorResponseDocument.CreateFromDiscriminatorValue}, | ||
{"404", ErrorResponseDocument.CreateFromDiscriminatorValue}, | ||
{"409", ErrorResponseDocument.CreateFromDiscriminatorValue}, | ||
{"422", ErrorResponseDocument.CreateFromDiscriminatorValue}, | ||
}; | ||
return await RequestAdapter.SendAsync<AccommodationPrimaryResponseDocument>(requestInfo, AccommodationPrimaryResponseDocument.CreateFromDiscriminatorValue, errorMapping, cancellationToken).ConfigureAwait(false); | ||
} | ||
/// <summary> | ||
/// Retrieves a collection of accommodations. | ||
/// </summary> | ||
/// <param name="requestConfiguration">Configuration for the request such as headers, query parameters, and middleware options.</param> | ||
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER | ||
#nullable enable | ||
public RequestInformation ToGetRequestInformation(Action<RequestConfiguration<AccommodationsRequestBuilderGetQueryParameters>>? requestConfiguration = default) { | ||
#nullable restore | ||
#else | ||
public RequestInformation ToGetRequestInformation(Action<RequestConfiguration<AccommodationsRequestBuilderGetQueryParameters>> requestConfiguration = default) { | ||
#endif | ||
var requestInfo = new RequestInformation(Method.GET, UrlTemplate, PathParameters); | ||
requestInfo.Configure(requestConfiguration); | ||
requestInfo.Headers.TryAdd("Accept", "application/vnd.api+json"); | ||
return requestInfo; | ||
} | ||
/// <summary> | ||
/// Compare the returned ETag HTTP header with an earlier one to determine if the response has changed since it was fetched. | ||
/// </summary> | ||
/// <param name="requestConfiguration">Configuration for the request such as headers, query parameters, and middleware options.</param> | ||
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER | ||
#nullable enable | ||
public RequestInformation ToHeadRequestInformation(Action<RequestConfiguration<AccommodationsRequestBuilderHeadQueryParameters>>? requestConfiguration = default) { | ||
#nullable restore | ||
#else | ||
public RequestInformation ToHeadRequestInformation(Action<RequestConfiguration<AccommodationsRequestBuilderHeadQueryParameters>> requestConfiguration = default) { | ||
#endif | ||
var requestInfo = new RequestInformation(Method.HEAD, UrlTemplate, PathParameters); | ||
requestInfo.Configure(requestConfiguration); | ||
return requestInfo; | ||
} | ||
/// <summary> | ||
/// Creates a new accommodation. | ||
/// </summary> | ||
/// <param name="body">The request body</param> | ||
/// <param name="requestConfiguration">Configuration for the request such as headers, query parameters, and middleware options.</param> | ||
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER | ||
#nullable enable | ||
public RequestInformation ToPostRequestInformation(AccommodationPostRequestDocument body, Action<RequestConfiguration<AccommodationsRequestBuilderPostQueryParameters>>? requestConfiguration = default) { | ||
#nullable restore | ||
#else | ||
public RequestInformation ToPostRequestInformation(AccommodationPostRequestDocument body, Action<RequestConfiguration<AccommodationsRequestBuilderPostQueryParameters>> requestConfiguration = default) { | ||
#endif | ||
_ = body ?? throw new ArgumentNullException(nameof(body)); | ||
var requestInfo = new RequestInformation(Method.POST, UrlTemplate, PathParameters); | ||
requestInfo.Configure(requestConfiguration); | ||
requestInfo.Headers.TryAdd("Accept", "application/vnd.api+json"); | ||
requestInfo.SetContentFromParsable(RequestAdapter, "application/vnd.api+json", body); | ||
return requestInfo; | ||
} | ||
/// <summary> | ||
/// Returns a request builder with the provided arbitrary URL. Using this method means any other path or query parameters are ignored. | ||
/// </summary> | ||
/// <param name="rawUrl">The raw URL to use for the request builder.</param> | ||
public AccommodationsRequestBuilder WithUrl(string rawUrl) { | ||
return new AccommodationsRequestBuilder(rawUrl, RequestAdapter); | ||
} | ||
/// <summary> | ||
/// Retrieves a collection of accommodations. | ||
/// </summary> | ||
public class AccommodationsRequestBuilderGetQueryParameters { | ||
/// <summary>For syntax, see the documentation for the [`include`](https://www.jsonapi.net/usage/reading/including-relationships.html)/[`filter`](https://www.jsonapi.net/usage/reading/filtering.html)/[`sort`](https://www.jsonapi.net/usage/reading/sorting.html)/[`page`](https://www.jsonapi.net/usage/reading/pagination.html)/[`fields`](https://www.jsonapi.net/usage/reading/sparse-fieldset-selection.html) query string parameters.</summary> | ||
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER | ||
#nullable enable | ||
[QueryParameter("query")] | ||
public string? Query { get; set; } | ||
#nullable restore | ||
#else | ||
[QueryParameter("query")] | ||
public string Query { get; set; } | ||
#endif | ||
} | ||
/// <summary> | ||
/// Compare the returned ETag HTTP header with an earlier one to determine if the response has changed since it was fetched. | ||
/// </summary> | ||
public class AccommodationsRequestBuilderHeadQueryParameters { | ||
/// <summary>For syntax, see the documentation for the [`include`](https://www.jsonapi.net/usage/reading/including-relationships.html)/[`filter`](https://www.jsonapi.net/usage/reading/filtering.html)/[`sort`](https://www.jsonapi.net/usage/reading/sorting.html)/[`page`](https://www.jsonapi.net/usage/reading/pagination.html)/[`fields`](https://www.jsonapi.net/usage/reading/sparse-fieldset-selection.html) query string parameters.</summary> | ||
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER | ||
#nullable enable | ||
[QueryParameter("query")] | ||
public string? Query { get; set; } | ||
#nullable restore | ||
#else | ||
[QueryParameter("query")] | ||
public string Query { get; set; } | ||
#endif | ||
} | ||
/// <summary> | ||
/// Creates a new accommodation. | ||
/// </summary> | ||
public class AccommodationsRequestBuilderPostQueryParameters { | ||
/// <summary>For syntax, see the documentation for the [`include`](https://www.jsonapi.net/usage/reading/including-relationships.html)/[`filter`](https://www.jsonapi.net/usage/reading/filtering.html)/[`sort`](https://www.jsonapi.net/usage/reading/sorting.html)/[`page`](https://www.jsonapi.net/usage/reading/pagination.html)/[`fields`](https://www.jsonapi.net/usage/reading/sparse-fieldset-selection.html) query string parameters.</summary> | ||
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER | ||
#nullable enable | ||
[QueryParameter("query")] | ||
public string? Query { get; set; } | ||
#nullable restore | ||
#else | ||
[QueryParameter("query")] | ||
public string Query { get; set; } | ||
#endif | ||
} | ||
} | ||
} |
Oops, something went wrong.