Skip to content

Commit e0fc6ad

Browse files
authoredNov 27, 2020
override baseUrl if set, xml comments updates
1 parent d013b6d commit e0fc6ad

File tree

6 files changed

+108
-15
lines changed

6 files changed

+108
-15
lines changed
 

‎Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<Project>
22
<PropertyGroup>
3-
<Version>0.3.5</Version>
3+
<Version>0.3.6</Version>
44
</PropertyGroup>
55
</Project>

‎src/QAToolKit.Source.Swagger.Test/SwaggerFileSourceIntegrationTest.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Collections.Generic;
77
using System.IO;
88
using System.Linq;
9+
using System.Net.Http;
910
using Xunit;
1011
using Xunit.Abstractions;
1112

@@ -87,7 +88,44 @@ public async void SwaggerFileSourceYamlWithWhitelistTest_Fails()
8788

8889
_logger.LogInformation(JsonConvert.SerializeObject(requests));
8990

91+
Assert.Equal("https://petstore3.swagger.io/api/support/v2", requests.FirstOrDefault().BasePath);
92+
Assert.Equal(HttpMethod.Get, requests.FirstOrDefault().Method);
93+
Assert.Equal("getSupportTicketCasesList", requests.FirstOrDefault().OperationId);
94+
Assert.Empty(requests.FirstOrDefault().RequestBodies);
95+
Assert.Equal(4, requests.FirstOrDefault().Responses.Count);
96+
Assert.Equal(2, requests.FirstOrDefault().Parameters.Count);
97+
Assert.Null(requests.FirstOrDefault().Parameters.FirstOrDefault(p => p.Name == "Area").Value);
9098
Assert.Single(requests);
9199
}
100+
101+
[Fact]
102+
public async void SwaggerFileSourceYamlWithWhitelistAndExampleTest_Fails()
103+
{
104+
var fileSource = new SwaggerFileSource(options =>
105+
{
106+
options.AddBaseUrl(new Uri("http://localhost/"));
107+
options.AddRequestFilters(new RequestFilter()
108+
{
109+
EndpointNameWhitelist = new string[] { "getSupportTicketsList" }
110+
});
111+
options.UseSwaggerExampleValues = true;
112+
});
113+
114+
var requests = await fileSource.Load(new List<FileInfo>() {
115+
new FileInfo("Assets/support-tickets.yaml")
116+
});
117+
118+
_logger.LogInformation(JsonConvert.SerializeObject(requests));
119+
120+
Assert.Equal("http://localhost/api/support/v2", requests.FirstOrDefault().BasePath);
121+
Assert.Equal(HttpMethod.Get, requests.FirstOrDefault().Method);
122+
Assert.Equal("getSupportTicketsList", requests.FirstOrDefault().OperationId);
123+
Assert.Empty(requests.FirstOrDefault().RequestBodies);
124+
Assert.Equal(4, requests.FirstOrDefault().Responses.Count);
125+
Assert.Equal(2, requests.FirstOrDefault().Parameters.Count);
126+
Assert.Equal("Company", requests.FirstOrDefault().Parameters.FirstOrDefault(p => p.Name == "Area").Value);
127+
Assert.Single(requests);
128+
}
129+
92130
}
93131
}

‎src/QAToolKit.Source.Swagger.Test/SwaggerTests/BicycleApi/Get/SwaggerProcessorGetBicycleByIdTests.cs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,5 +68,50 @@ public async Task PetsSwaggerGetPetByIdWithExampleValuesTest_Successfull()
6868
});
6969
Assert.Empty(requests.FirstOrDefault().TestTypes);
7070
}
71+
72+
[Fact]
73+
public async Task PetsSwaggerGetPetByIdWithExampleValuesAndDifferentBaseAddressTest_Successfull()
74+
{
75+
var urlSource = new SwaggerUrlSource(options =>
76+
{
77+
options.AddBaseUrl(new Uri("http://localhost/"));
78+
options.AddRequestFilters(new RequestFilter()
79+
{
80+
EndpointNameWhitelist = new string[] { "GetAllBikes" }
81+
});
82+
options.UseSwaggerExampleValues = true;
83+
});
84+
85+
var requests = await urlSource.Load(new Uri[] {
86+
new Uri("https://qatoolkitapi.azurewebsites.net/swagger/v1/swagger.json")
87+
});
88+
89+
_logger.LogInformation(JsonConvert.SerializeObject(requests, Formatting.Indented));
90+
91+
Assert.NotNull(requests);
92+
Assert.Single(requests);
93+
Assert.Empty(requests.FirstOrDefault().AuthenticationTypes);
94+
Assert.Equal("http://localhost/", requests.FirstOrDefault().BasePath);
95+
Assert.Equal("Get all bikes", requests.FirstOrDefault().Description);
96+
Assert.Equal(HttpMethod.Get, requests.FirstOrDefault().Method);
97+
Assert.Equal("GetAllBikes", requests.FirstOrDefault().OperationId);
98+
Assert.Equal(3, requests.FirstOrDefault().Parameters.Count);
99+
Assert.Equal("/api/bicycles", requests.FirstOrDefault().Path);
100+
Assert.Empty(requests.FirstOrDefault().RequestBodies);
101+
Assert.Equal(2, requests.FirstOrDefault().Responses.Count);
102+
103+
var getBikesParameters = BicyclesParameters.Get(true).ToExpectedObject();
104+
getBikesParameters.ShouldEqual(requests.FirstOrDefault().Parameters);
105+
106+
var expectedPetsResponse = GetBicycleByIdResponse.Get().ToExpectedObject();
107+
expectedPetsResponse.ShouldEqual(requests.FirstOrDefault().Responses);
108+
109+
Assert.Equal("Get all bikes by filter", requests.FirstOrDefault().Summary);
110+
Assert.Collection(requests.FirstOrDefault().Tags, item =>
111+
{
112+
item = "Public";
113+
});
114+
Assert.Empty(requests.FirstOrDefault().TestTypes);
115+
}
71116
}
72117
}

‎src/QAToolKit.Source.Swagger/SwaggerOptions.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
namespace QAToolKit.Source.Swagger
77
{
88
/// <summary>
9-
/// Swagger options
9+
/// Swagger processor options
1010
/// </summary>
1111
public class SwaggerOptions
1212
{
@@ -15,15 +15,15 @@ public class SwaggerOptions
1515
/// </summary>
1616
internal RequestFilter RequestFilter { get; private set; }
1717
/// <summary>
18-
/// Is Swagger protected with Basic authentication?
18+
/// Is Swagger protected with Basic authentication
1919
/// </summary>
2020
internal bool UseBasicAuth { get; private set; } = false;
2121
/// <summary>
22-
/// Is Swagger protected with NTLM authentication?
22+
/// Is Swagger protected with NTLM authentication
2323
/// </summary>
2424
internal bool UseNTLMAuth { get; private set; } = false;
2525
/// <summary>
26-
/// Use request filters?
26+
/// Use request filters, to process only selected endpoints.
2727
/// </summary>
2828
internal bool UseRequestFilter { get; private set; } = false;
2929
/// <summary>
@@ -35,20 +35,20 @@ public class SwaggerOptions
3535
/// </summary>
3636
internal string Password { get; private set; }
3737
/// <summary>
38-
/// Set custom base API URL
38+
/// Set custom base API URL to the resulting HttpRequest list.
3939
/// </summary>
4040
internal Uri BaseUrl { get; private set; }
4141
/// <summary>
42-
/// Use Swagger example values that come with Swagger file
42+
/// Use Swagger example values that come with Swagger file. Default us 'false'.
4343
/// </summary>
4444
public bool UseSwaggerExampleValues { get; set; } = false;
4545
/// <summary>
46-
/// Disable SSL validation when accessing swagger.json file
46+
/// Disable SSL validation when accessing swagger.json file. Default is 'false'.
4747
/// </summary>
4848
public bool DisableSSLValidation { get; set; } = false;
4949

5050
/// <summary>
51-
/// Add basic authentication
51+
/// Add basic authentication to access swagger.json file.
5252
/// </summary>
5353
/// <param name="userName"></param>
5454
/// <param name="password"></param>
@@ -68,7 +68,7 @@ public SwaggerOptions AddBasicAuthentication(string userName, string password)
6868
}
6969

7070
/// <summary>
71-
/// Add NTLM authentication
71+
/// Add NTLM authentication to access swagger.json file. Normally used when swagger is hosted in IIS.
7272
/// </summary>
7373
/// <param name="userName"></param>
7474
/// <param name="password"></param>
@@ -101,7 +101,7 @@ public SwaggerOptions AddNTLMAuthentication()
101101
}
102102

103103
/// <summary>
104-
/// Use request filters
104+
/// Use request filters, to process only selected endpoints.
105105
/// </summary>
106106
/// <param name="requestFilter"></param>
107107
/// <returns></returns>
@@ -113,7 +113,7 @@ public SwaggerOptions AddRequestFilters(RequestFilter requestFilter)
113113
}
114114

115115
/// <summary>
116-
/// Add base url
116+
/// Add base url, which will override swagger.json URL in the 'HttpRequest' list
117117
/// </summary>
118118
/// <param name="baseUrl"></param>
119119
/// <returns></returns>

‎src/QAToolKit.Source.Swagger/SwaggerRequestFilter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
namespace QAToolKit.Source.Swagger
77
{
88
/// <summary>
9-
/// Swagger request filtering
9+
/// Swagger request filtering by OperationId, TestType or AuthenticationType
1010
/// </summary>
1111
public class SwaggerRequestFilter
1212
{

‎src/QAToolKit.Source.Swagger/SwaggerUrlSource.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
namespace QAToolKit.Source.Swagger
1515
{
1616
/// <summary>
17-
/// Swagger Url source
17+
/// Load Swagger from url source
1818
/// </summary>
1919
public class SwaggerUrlSource : ITestSource<Uri[], IEnumerable<HttpRequest>>
2020
{
@@ -92,7 +92,17 @@ private async Task<IEnumerable<HttpRequest>> LoadInternal(Uri[] source)
9292
var textWritter = new OpenApiJsonWriter(new StringWriter());
9393
openApiDocument.SerializeAsV3(textWritter);
9494

95-
var requests = processor.MapFromOpenApiDocument(new Uri($"{uri.Scheme}://{uri.Host}"), openApiDocument);
95+
Uri url;
96+
if (_swaggerOptions.BaseUrl != null)
97+
{
98+
url = _swaggerOptions.BaseUrl;
99+
}
100+
else
101+
{
102+
url = new Uri($"{uri.Scheme}://{uri.Host}");
103+
}
104+
105+
var requests = processor.MapFromOpenApiDocument(url, openApiDocument);
96106

97107
restRequests.AddRange(requests);
98108
}

0 commit comments

Comments
 (0)