Skip to content

Commit 76cf53a

Browse files
committed
Http request body, url pat and parameters generators and replacements, unit tests, general refactorings
1 parent 15aa283 commit 76cf53a

File tree

10 files changed

+351
-102
lines changed

10 files changed

+351
-102
lines changed

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using Newtonsoft.Json;
2-
using QAToolKit.Core.Models;
3-
using System;
1+
using System;
42
using System.Collections.Generic;
53
using System.IO;
64
using System.Linq;

src/QAToolKit.Source.Swagger.Test/SwaggerOptionsTest.cs

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using System;
33
using System.Collections.Generic;
44
using System.Linq;
5-
using System.Text;
65
using Xunit;
76

87
namespace QAToolKit.Source.Swagger.Test
@@ -88,12 +87,37 @@ public void SwaggerTestTypeRequestFiltersTest_Successful()
8887
}
8988

9089
[Fact]
91-
public void SwaggerAddBaseUrlRequestFiltersTest_Successful()
90+
public void SwaggerAddBaseUrlOnRequestFiltersTest_Successful()
9291
{
9392
var options = new SwaggerOptions();
9493
options.AddBaseUrl(new Uri("https://petstore3.swagger.io/"));
9594

9695
Assert.Equal("https://petstore3.swagger.io/", options.BaseUrl.ToString());
9796
}
97+
98+
[Fact]
99+
public void SwaggerAddBaseUrlOffRequestFiltersTest_Successful()
100+
{
101+
var options = new SwaggerOptions();
102+
103+
Assert.Null(options.BaseUrl);
104+
}
105+
106+
[Fact]
107+
public void SwaggerAddDataGenerationOnRequestFiltersTest_Successful()
108+
{
109+
var options = new SwaggerOptions();
110+
options.AddDataGeneration();
111+
112+
Assert.True(options.UseDataGeneration);
113+
}
114+
115+
[Fact]
116+
public void SwaggerAddDataGenerationOffRequestFiltersTest_Successful()
117+
{
118+
var options = new SwaggerOptions();
119+
120+
Assert.False(options.UseDataGeneration);
121+
}
98122
}
99123
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,10 @@
3232
</ItemGroup>
3333

3434
<ItemGroup>
35+
<PackageReference Include="Faker.Net" Version="1.3.82" />
3536
<PackageReference Include="Microsoft.OpenApi" Version="1.2.3" />
3637
<PackageReference Include="Microsoft.OpenApi.Readers" Version="1.2.3" />
37-
<PackageReference Include="QAToolKit.Core" Version="0.1.2" />
38+
<PackageReference Include="QAToolKit.Core" Version="0.1.3" />
3839
</ItemGroup>
3940

4041
</Project>
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
using QAToolKit.Core.Models;
2+
using System.Collections.Generic;
3+
4+
namespace QAToolKit.Source.Swagger
5+
{
6+
/// <summary>
7+
/// Data generator for Swagger that will generate the data for the models or URLs. It is applied after the user defined replaced values.
8+
/// </summary>
9+
public class SwaggerDataGenerator
10+
{
11+
private readonly IList<HttpTestRequest> _requests;
12+
13+
/// <summary>
14+
/// Swagger data generator
15+
/// </summary>
16+
/// <param name="requests"></param>
17+
public SwaggerDataGenerator(IList<HttpTestRequest> requests)
18+
{
19+
_requests = requests;
20+
}
21+
22+
/// <summary>
23+
/// Generate HTTP request model data
24+
/// </summary>
25+
/// <returns></returns>
26+
public IList<HttpTestRequest> GenerateModelValues()
27+
{
28+
foreach (var request in _requests)
29+
{
30+
foreach (var body in request.RequestBodies)
31+
{
32+
if (body.ContentType == ContentType.Json)
33+
{
34+
var propsTemp = new List<Property>();
35+
foreach (var property in body.Properties)
36+
{
37+
propsTemp.Add(GeneratePropertyValue(property));
38+
}
39+
40+
body.Properties = propsTemp;
41+
}
42+
}
43+
}
44+
45+
return _requests;
46+
}
47+
48+
private Property GeneratePropertyValue(Property property)
49+
{
50+
switch (property.Type)
51+
{
52+
case "integer":
53+
if (string.IsNullOrEmpty(property.Value))
54+
{
55+
property.Value = Faker.RandomNumber.Next(0, 1).ToString();
56+
}
57+
58+
break;
59+
case "string":
60+
property.Value = Faker.Lorem.Sentence(1);
61+
break;
62+
case "object":
63+
property.Value = Faker.Lorem.Sentence(1);
64+
break;
65+
case "array":
66+
foreach (var prop in property.Items.Properties)
67+
{
68+
prop.Value = Faker.Lorem.Sentence(1);
69+
}
70+
break;
71+
default:
72+
break;
73+
}
74+
75+
return property;
76+
}
77+
78+
/* public IList<HttpTestRequestV2> GenerateUrlValues()
79+
{
80+
81+
}*/
82+
}
83+
}

src/QAToolKit.Source.Swagger/SwaggerFileSource.cs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,27 @@ public async Task<IList<HttpTestRequest>> Load(IList<FileInfo> source)
4949
var textWritter = new OpenApiJsonWriter(new StringWriter());
5050
openApiDocument.SerializeAsV3(textWritter);
5151

52-
var requests = processor.MapFromOpenApiDocument(_swaggerOptions.BaseUrl, openApiDocument, _swaggerOptions.ReplacementValues);
52+
var requests = processor.MapFromOpenApiDocument(_swaggerOptions.BaseUrl, openApiDocument);
5353

5454
if (_swaggerOptions.UseRequestFilter)
5555
{
56-
restRequests.AddRange(SwaggerRequestFilter.FilterRequests(requests, _swaggerOptions.RequestFilter));
56+
var filters = new SwaggerRequestFilter(requests);
57+
requests = filters.FilterRequests(_swaggerOptions.RequestFilter);
5758
}
58-
else
59+
60+
if (_swaggerOptions.UseDataGeneration)
5961
{
60-
restRequests.AddRange(requests);
62+
var generator = new SwaggerDataGenerator(requests);
63+
requests = generator.GenerateModelValues();
6164
}
65+
66+
if (_swaggerOptions.ReplacementValues != null)
67+
{
68+
var generator = new SwaggerValueReplacement(requests, _swaggerOptions.ReplacementValues);
69+
requests = generator.ReplaceAll();
70+
}
71+
72+
restRequests.AddRange(requests);
6273
}
6374
}
6475

src/QAToolKit.Source.Swagger/SwaggerOptions.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ public class SwaggerOptions
3838
/// Set custom base API URL
3939
/// </summary>
4040
internal Uri BaseUrl { get; private set; }
41+
/// <summary>
42+
/// Should data be automatically generated
43+
/// </summary>
44+
internal bool UseDataGeneration { get; private set; } = false;
4145

4246
/// <summary>
4347
/// Add basic authentication
@@ -86,5 +90,15 @@ public SwaggerOptions AddBaseUrl(Uri baseUrl)
8690
BaseUrl = baseUrl;
8791
return this;
8892
}
93+
94+
/// <summary>
95+
/// Add data generation to the Swagger processor
96+
/// </summary>
97+
/// <returns></returns>
98+
public SwaggerOptions AddDataGeneration()
99+
{
100+
UseDataGeneration = true;
101+
return this;
102+
}
89103
}
90104
}

0 commit comments

Comments
 (0)