Skip to content

Commit 4a6ccd9

Browse files
authoredDec 4, 2020
HttpMethodsWhitelist and GeneralContains request filters added
1 parent 020b7d8 commit 4a6ccd9

File tree

5 files changed

+158
-4
lines changed

5 files changed

+158
-4
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.7</Version>
3+
<Version>0.3.8</Version>
44
</PropertyGroup>
55
</Project>

‎README.md

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@ SwaggerUrlSource swaggerSource = new SwaggerUrlSource(
4141
{
4242
AuthenticationTypes = new List<AuthenticationType.Enumeration>() { AuthenticationType.Enumeration.Customer },
4343
TestTypes = new List<TestType.Enumeration>() { TestType.Enumeration.LoadTest },
44-
EndpointNameWhitelist = new string[] { "GetCategories" }
44+
EndpointNameWhitelist = new string[] { "GetCategories" },
45+
HttpMethodsWhitelist = new List<HttpMethod>() { HttpMethod.Put, HttpMethod.Post, HttpMethod.Get },
46+
GeneralContains = new string[] { "bicycle" }
4547
});
4648
options.AddBaseUrl(new Uri("https://dev.myapi.com"));
4749
options.UseSwaggerExampleValues = true;
@@ -134,11 +136,21 @@ The same swagger.json excerpt which support test type tags might look like this:
134136
If you feed the list of `HttpRequest` objects with load type tags to the library like `QAToolKit.Engine.Bombardier`, only those requests will be tested.
135137

136138
##### 3.3 EndpointNameWhitelist
137-
Final `RequestFilter` option is `EndpointNameWhitelist`. You can specify a list of endpoints that will be included in the results.
139+
Another `RequestFilter` option is `EndpointNameWhitelist`. You can specify a list of endpoints that will be included in the results.
138140

139141
Every other endpoint will be excluded from the results. In the sample above we have set the result to include only `GetCategories` endpoint.
140142
That corresponds to the `operationId` in the swagger file above.
141143

144+
##### 3.4 HttpMethodsWhitelist
145+
`HttpMethodsWhitelist` is a list of HTTP Methods that will be used in the `RequestFilter`.
146+
147+
Every other endpoint, that does not have a HTTP method that is in the `HttpMethodsWhitelist` will be excluded from the results.
148+
149+
##### 3.5 GeneralContains
150+
Final `RequestFilter` option is `GeneralContains`, which is an array of strings.
151+
152+
Every other endpoint, that does not contain an array from the list will be excluded from the results. Every string in the array is compared with Swagger `Description`, `Summary` or `Tags` and is case insensitive.
153+
142154
#### 4. AddBaseUrl
143155
Your swagger file has a `Server section`, where you can specify an server URI and can be absolute or relative. An example of relative server section is:
144156
```json

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

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,5 +181,134 @@ public async Task SwaggerRequestFilterOperationIdAndAuthTypeAndTestTypeAlternati
181181

182182
Assert.Equal(2, requests.Count());
183183
}
184+
185+
[Fact]
186+
public async Task SwaggerRequestFilterOperationIdAndAuthTypeAndTestTypeAlternativeWithMethodTest_Success()
187+
{
188+
var urlSource = new SwaggerUrlSource(options =>
189+
{
190+
options.AddBaseUrl(new Uri("https://qatoolkitapi.azurewebsites.net/"));
191+
options.AddRequestFilters(new RequestFilter()
192+
{
193+
TestTypes = new List<TestType.Enumeration> { TestType.Enumeration.LoadTest },
194+
EndpointNameWhitelist = new string[] { "DeleteBike", "UpdateBike" },
195+
AuthenticationTypes = new List<AuthenticationType.Enumeration> { AuthenticationType.Enumeration.ApiKey },
196+
HttpMethodsWhitelist = new List<HttpMethod>() { HttpMethod.Put, HttpMethod.Delete }
197+
});
198+
options.UseSwaggerExampleValues = true;
199+
});
200+
201+
var requests = await urlSource.Load(new Uri[] {
202+
new Uri("https://qatoolkitapi.azurewebsites.net/swagger/v2/swagger.json")
203+
});
204+
205+
Assert.Equal(2, requests.Count());
206+
}
207+
208+
[Fact]
209+
public async Task SwaggerRequestFilterTestTypeAlternativeWithMethodTestV2_Success()
210+
{
211+
var urlSource = new SwaggerUrlSource(options =>
212+
{
213+
options.AddBaseUrl(new Uri("https://qatoolkitapi.azurewebsites.net/"));
214+
options.AddRequestFilters(new RequestFilter()
215+
{
216+
TestTypes = new List<TestType.Enumeration> { TestType.Enumeration.LoadTest },
217+
HttpMethodsWhitelist = new List<HttpMethod>() { HttpMethod.Put, HttpMethod.Post, HttpMethod.Get }
218+
});
219+
options.UseSwaggerExampleValues = true;
220+
});
221+
222+
var requests = await urlSource.Load(new Uri[] {
223+
new Uri("https://qatoolkitapi.azurewebsites.net/swagger/v2/swagger.json")
224+
});
225+
226+
Assert.Equal(4, requests.Count());
227+
}
228+
229+
[Fact]
230+
public async Task SwaggerRequestFilterTestTypeAlternativeWithGeneralContainsTest_Success()
231+
{
232+
var urlSource = new SwaggerUrlSource(options =>
233+
{
234+
options.AddBaseUrl(new Uri("https://qatoolkitapi.azurewebsites.net/"));
235+
options.AddRequestFilters(new RequestFilter()
236+
{
237+
TestTypes = new List<TestType.Enumeration> { TestType.Enumeration.LoadTest },
238+
HttpMethodsWhitelist = new List<HttpMethod>() { HttpMethod.Put, HttpMethod.Post, HttpMethod.Get },
239+
GeneralContains = new string[] { "new bicycle" }
240+
});
241+
options.UseSwaggerExampleValues = true;
242+
});
243+
244+
var requests = await urlSource.Load(new Uri[] {
245+
new Uri("https://qatoolkitapi.azurewebsites.net/swagger/v2/swagger.json")
246+
});
247+
248+
Assert.Single(requests);
249+
}
250+
251+
[Fact]
252+
public async Task SwaggerRequestFilterAuthTypeAndTestTypeAlternativeWithGeneralContainsTestV2_Success()
253+
{
254+
var urlSource = new SwaggerUrlSource(options =>
255+
{
256+
options.AddBaseUrl(new Uri("https://qatoolkitapi.azurewebsites.net/"));
257+
options.AddRequestFilters(new RequestFilter()
258+
{
259+
TestTypes = new List<TestType.Enumeration> { TestType.Enumeration.LoadTest },
260+
HttpMethodsWhitelist = new List<HttpMethod>() { HttpMethod.Put, HttpMethod.Post, HttpMethod.Get },
261+
GeneralContains = new string[] { "bicycle" }
262+
});
263+
options.UseSwaggerExampleValues = true;
264+
});
265+
266+
var requests = await urlSource.Load(new Uri[] {
267+
new Uri("https://qatoolkitapi.azurewebsites.net/swagger/v2/swagger.json")
268+
});
269+
270+
Assert.Equal(3, requests.Count());
271+
}
272+
273+
[Fact]
274+
public async Task SwaggerRequestFilterTestTypeAlternativeWithGeneralContainsTagTest_Success()
275+
{
276+
var urlSource = new SwaggerUrlSource(options =>
277+
{
278+
options.AddBaseUrl(new Uri("https://qatoolkitapi.azurewebsites.net/"));
279+
options.AddRequestFilters(new RequestFilter()
280+
{
281+
TestTypes = new List<TestType.Enumeration> { TestType.Enumeration.LoadTest },
282+
GeneralContains = new string[] { "PUBLIC" }
283+
});
284+
options.UseSwaggerExampleValues = true;
285+
});
286+
287+
var requests = await urlSource.Load(new Uri[] {
288+
new Uri("https://qatoolkitapi.azurewebsites.net/swagger/v2/swagger.json")
289+
});
290+
291+
Assert.Equal(5, requests.Count());
292+
}
293+
294+
[Fact]
295+
public async Task SwaggerRequestFilterGeneralContainsTagTest_Success()
296+
{
297+
var urlSource = new SwaggerUrlSource(options =>
298+
{
299+
options.AddBaseUrl(new Uri("https://qatoolkitapi.azurewebsites.net/"));
300+
options.AddRequestFilters(new RequestFilter()
301+
{
302+
GeneralContains = new string[] { "PUBLIC" }
303+
});
304+
options.UseSwaggerExampleValues = true;
305+
});
306+
307+
var requests = await urlSource.Load(new Uri[] {
308+
new Uri("https://qatoolkitapi.azurewebsites.net/swagger/v1/swagger.json")
309+
});
310+
311+
Assert.Equal(5, requests.Count());
312+
}
184313
}
185314
}

‎src/QAToolKit.Source.Swagger/QAToolKit.Source.Swagger.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
<PackageReference Include="Microsoft.OpenApi" Version="1.2.3" />
3838
<PackageReference Include="Microsoft.OpenApi.Readers" Version="1.2.3" />
3939
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
40-
<PackageReference Include="QAToolKit.Core" Version="0.3.3" />
40+
<PackageReference Include="QAToolKit.Core" Version="0.3.4" />
4141
</ItemGroup>
4242

4343
</Project>

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,19 @@ public IEnumerable<HttpRequest> FilterRequests(RequestFilter requestFilter)
4444
requestsLocal = requestsLocal.Where(request => requestFilter.EndpointNameWhitelist.Any(x => x == request.OperationId));
4545
}
4646

47+
if (requestFilter.HttpMethodsWhitelist != null)
48+
{
49+
requestsLocal = requestsLocal.Where(request => requestFilter.HttpMethodsWhitelist.Any(x => x == request.Method));
50+
}
51+
52+
if (requestFilter.GeneralContains != null)
53+
{
54+
requestsLocal = requestsLocal.Where(request => requestFilter.GeneralContains.Any(x =>
55+
(request.Summary != null && request.Summary.IndexOf(x, StringComparison.OrdinalIgnoreCase) >= 0) ||
56+
(request.Description != null && request.Description.IndexOf(x, StringComparison.OrdinalIgnoreCase) >= 0) ||
57+
(request.Tags != null && request.Tags.Contains(x, StringComparer.InvariantCultureIgnoreCase))));
58+
}
59+
4760
return requestsLocal.ToList();
4861
}
4962
}

0 commit comments

Comments
 (0)