diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 80734df..e040a26 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -26,6 +26,10 @@ jobs:
uses: actions/setup-dotnet@v1
with:
dotnet-version: '5.0.x'
+ - name: Setup .NET Core 6.0
+ uses: actions/setup-dotnet@v1
+ with:
+ dotnet-version: '6.0.x'
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
diff --git a/.github/workflows/dotnet-core.yml b/.github/workflows/dotnet-core.yml
index ead8c3d..0d27ca5 100644
--- a/.github/workflows/dotnet-core.yml
+++ b/.github/workflows/dotnet-core.yml
@@ -24,6 +24,10 @@ jobs:
uses: actions/setup-dotnet@v1
with:
dotnet-version: '5.0.x'
+ - name: Setup .NET Core 6.0
+ uses: actions/setup-dotnet@v1
+ with:
+ dotnet-version: '6.0.x'
- name: Clean
run: dotnet clean --configuration Release && dotnet nuget locals all --clear
- name: Install dependencies
diff --git a/.github/workflows/sonarqube-analysis.yml b/.github/workflows/sonarqube-analysis.yml
index da534ce..e477e33 100644
--- a/.github/workflows/sonarqube-analysis.yml
+++ b/.github/workflows/sonarqube-analysis.yml
@@ -20,8 +20,12 @@ jobs:
uses: actions/setup-dotnet@v1
with:
dotnet-version: '5.0.x'
+ - name: Setup .NET Core 6.0
+ uses: actions/setup-dotnet@v1
+ with:
+ dotnet-version: '6.0.x'
- name: SonarScanner for .NET Core with pull request decoration support
- uses: highbyte/sonarscan-dotnet@2.0
+ uses: highbyte/sonarscan-dotnet@v2.1.2
with:
sonarProjectKey: qatoolkit_qatoolkit-engine-httptester-net
sonarProjectName: qatoolkit_qatoolkit-engine-httptester-net
diff --git a/Directory.Build.props b/Directory.Build.props
index 83b1ab4..8f6c07a 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -1,5 +1,5 @@
- 0.3.4
+ 0.3.5
\ No newline at end of file
diff --git a/README.md b/README.md
index 7391949..8a2cfeb 100644
--- a/README.md
+++ b/README.md
@@ -287,7 +287,7 @@ using (var client = new HttpTesterClient())
MIT License
-Copyright (c) 2020-2021 Miha Jakovac
+Copyright (c) 2020-2022 Miha Jakovac
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/src/QAToolKit.Engine.HttpTester.Test/HttpTesterClientTests.cs b/src/QAToolKit.Engine.HttpTester.Test/HttpTesterClientTests.cs
index 7441686..5120dbf 100644
--- a/src/QAToolKit.Engine.HttpTester.Test/HttpTesterClientTests.cs
+++ b/src/QAToolKit.Engine.HttpTester.Test/HttpTesterClientTests.cs
@@ -31,27 +31,27 @@ public async Task HttpTesterClientWithSwagger_Success()
options.UseSwaggerExampleValues = true;
});
- var requests = await urlSource.Load(new Uri[] {
+ var requests = await urlSource.Load(new Uri[]
+ {
new Uri("https://qatoolkitapi.azurewebsites.net/swagger/v1/swagger.json")
});
- var replacementValues = new Dictionary {
- { "api-version", 1}
- };
-
- var urlGenerator = new HttpRequestUrlGenerator(requests.FirstOrDefault(), options =>
+ var replacementValues = new Dictionary
{
- options.AddReplacementValues(replacementValues);
- });
+ { "api-version", 1 }
+ };
+
+ var urlGenerator = new HttpRequestUrlGenerator(requests.FirstOrDefault(),
+ options => { options.AddReplacementValues(replacementValues); });
using (var client = new HttpTesterClient())
{
var response = await client
- .CreateHttpRequest(new Uri(urlGenerator.GetUrl()))
- .WithHeaders(new Dictionary() { { "Content-Type", "application/json" } })
- .WithMethod(HttpMethod.Post)
- .WithJsonBody(BicycleFixture.Get())
- .Start();
+ .CreateHttpRequest(new Uri(urlGenerator.GetUrl()))
+ .WithHeaders(new Dictionary() { { "Content-Type", "application/json" } })
+ .WithMethod(HttpMethod.Post)
+ .WithJsonBody(BicycleFixture.Get())
+ .Start();
var msg = await response.GetResponseJsonBody();
@@ -67,11 +67,11 @@ public async Task HttpTesterClientSimple_Success()
using (var client = new HttpTesterClient())
{
var response = await client
- .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
- .WithQueryParams(new Dictionary() { { "api-version", "1" } })
- .WithMethod(HttpMethod.Get)
- .WithPath("/api/bicycles")
- .Start();
+ .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
+ .WithQueryParams(new Dictionary() { { "api-version", "1" } })
+ .WithMethod(HttpMethod.Get)
+ .WithPath("/api/bicycles")
+ .Start();
var msg = await response.GetResponseJsonBody>();
@@ -89,11 +89,11 @@ public async Task HttpTesterClientSimpleGet_Success()
using (var client = new HttpTesterClient())
{
var response = await client
- .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
- .WithQueryParams(new Dictionary() { { "api-version", "1" } })
- .WithMethod(HttpMethod.Get)
- .WithPath("/api/bicycles/1")
- .Start();
+ .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
+ .WithQueryParams(new Dictionary() { { "api-version", "1" } })
+ .WithMethod(HttpMethod.Get)
+ .WithPath("/api/bicycles/1")
+ .Start();
var msg = await response.GetResponseJsonBody();
@@ -112,12 +112,12 @@ public async Task HttpTesterClientWithoutHeaders_Success()
using (var client = new HttpTesterClient())
{
var response = await client
- .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
- .WithQueryParams(new Dictionary() { { "api-version", "1" } })
- .WithMethod(HttpMethod.Post)
- .WithJsonBody(BicycleFixture.GetCfr())
- .WithPath("/api/bicycles")
- .Start();
+ .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
+ .WithQueryParams(new Dictionary() { { "api-version", "1" } })
+ .WithMethod(HttpMethod.Post)
+ .WithJsonBody(BicycleFixture.GetCfr())
+ .WithPath("/api/bicycles")
+ .Start();
var msg = await response.GetResponseJsonBody();
@@ -136,12 +136,12 @@ public async Task HttpTesterClientWithoutQueryParams_Success()
using (var client = new HttpTesterClient())
{
var response = await client
- .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
- .WithHeaders(new Dictionary() { { "Content-Type", "application/json" } })
- .WithMethod(HttpMethod.Post)
- .WithJsonBody(BicycleFixture.Get())
- .WithPath("/api/bicycles")
- .Start();
+ .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
+ .WithHeaders(new Dictionary() { { "Content-Type", "application/json" } })
+ .WithMethod(HttpMethod.Post)
+ .WithJsonBody(BicycleFixture.Get())
+ .WithPath("/api/bicycles")
+ .Start();
Assert.True(client.Duration < 2000);
Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
@@ -154,12 +154,12 @@ public async Task HttpTesterClientWithoutPath_Success()
using (var client = new HttpTesterClient())
{
var response = await client
- .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
- .WithHeaders(new Dictionary() { { "Content-Type", "application/json" } })
- .WithQueryParams(new Dictionary() { { "api-version", "1" } })
- .WithMethod(HttpMethod.Post)
- .WithJsonBody(BicycleFixture.Get())
- .Start();
+ .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
+ .WithHeaders(new Dictionary() { { "Content-Type", "application/json" } })
+ .WithQueryParams(new Dictionary() { { "api-version", "1" } })
+ .WithMethod(HttpMethod.Post)
+ .WithJsonBody(BicycleFixture.Get())
+ .Start();
Assert.True(client.Duration < 2000);
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
@@ -172,10 +172,10 @@ public async Task HttpTesterClientWithoutMethod_Exception()
using (var client = new HttpTesterClient())
{
var response = client
- .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
- .WithHeaders(new Dictionary() { { "Content-Type", "application/json" } })
- .WithQueryParams(new Dictionary() { { "api-version", "1" } })
- .WithJsonBody(BicycleFixture.Get());
+ .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
+ .WithHeaders(new Dictionary() { { "Content-Type", "application/json" } })
+ .WithQueryParams(new Dictionary() { { "api-version", "1" } })
+ .WithJsonBody(BicycleFixture.Get());
await Assert.ThrowsAsync(async () => await client.Start());
}
@@ -187,11 +187,11 @@ public async Task HttpTesterClientGetWithBody_Exception()
using (var client = new HttpTesterClient())
{
var response = client
- .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
- .WithHeaders(new Dictionary() { { "Content-Type", "application/json" } })
- .WithQueryParams(new Dictionary() { { "api-version", "1" } })
- .WithMethod(HttpMethod.Get)
- .WithJsonBody(BicycleFixture.Get());
+ .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
+ .WithHeaders(new Dictionary() { { "Content-Type", "application/json" } })
+ .WithQueryParams(new Dictionary() { { "api-version", "1" } })
+ .WithMethod(HttpMethod.Get)
+ .WithJsonBody(BicycleFixture.Get());
await Assert.ThrowsAsync(async () => await client.Start());
}
@@ -203,7 +203,7 @@ public async Task HttpTesterClientOnlyBaseUrl_Exception()
using (var client = new HttpTesterClient())
{
var response = client
- .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"));
+ .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"));
await Assert.ThrowsAsync(async () => await client.Start());
}
@@ -224,11 +224,11 @@ public async Task HttpTesterClientGetWithBodyDisableSSLValidationWithValidCert_S
using (var client = new HttpTesterClient())
{
var response = await client
- .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"), false)
- .WithQueryParams(new Dictionary() { { "api-version", "1" } })
- .WithMethod(HttpMethod.Get)
- .WithPath("/api/bicycles/1")
- .Start();
+ .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"), false)
+ .WithQueryParams(new Dictionary() { { "api-version", "1" } })
+ .WithMethod(HttpMethod.Get)
+ .WithPath("/api/bicycles/1")
+ .Start();
var msg = await response.GetResponseJsonBody();
@@ -247,11 +247,11 @@ public async Task HttpTesterClientGetWithBodyDisableSSLValidationWithInvalidCert
using (var client = new HttpTesterClient())
{
var response = await client
- .CreateHttpRequest(new Uri("https://swagger-demo.qatoolkit.io/"), false)
- .WithQueryParams(new Dictionary() { { "api-version", "1" } })
- .WithMethod(HttpMethod.Get)
- .WithPath("/api/bicycles/1")
- .Start();
+ .CreateHttpRequest(new Uri("https://swagger-demo.qatoolkit.io/"), false)
+ .WithQueryParams(new Dictionary() { { "api-version", "1" } })
+ .WithMethod(HttpMethod.Get)
+ .WithPath("/api/bicycles/1")
+ .Start();
var msg = await response.GetResponseJsonBody();
@@ -263,7 +263,7 @@ public async Task HttpTesterClientGetWithBodyDisableSSLValidationWithInvalidCert
Assert.Equal("Scott", msg.Brand);
}
}
-
+
[Fact]
public async Task HttpTesterClientGetWithBodyDisableSSLValidationWithInvalidCertAndResponseBody_Success()
{
@@ -306,18 +306,18 @@ public async Task HttpTesterClientGetWithBodyDisableSSLValidationWithInvalidCert
Assert.True(response.IsSuccessStatusCode);
}
}
-
+
[Fact]
public async Task HttpTesterClientGetWithBodyDisableSSLValidationWithHttpUrl_Exception()
{
using (var client = new HttpTesterClient())
{
var response = await client
- .CreateHttpRequest(new Uri("http://swagger-demo.qatoolkit.io/"), false)
- .WithQueryParams(new Dictionary() { { "api-version", "1" } })
- .WithMethod(HttpMethod.Get)
- .WithPath("/api/bicycles/1")
- .Start();
+ .CreateHttpRequest(new Uri("http://swagger-demo.qatoolkit.io/"), false)
+ .WithQueryParams(new Dictionary() { { "api-version", "1" } })
+ .WithMethod(HttpMethod.Get)
+ .WithPath("/api/bicycles/1")
+ .Start();
var msg = await response.GetResponseJsonBody();
@@ -329,17 +329,17 @@ public async Task HttpTesterClientGetWithBodyDisableSSLValidationWithHttpUrl_Exc
Assert.Equal("Scott", msg.Brand);
}
}
-
+
[Fact]
public async Task HttpTesterClientGetWithBodyDisableSSLValidationWithInvalidCertAndUrl2_Exception()
{
using (var client = new HttpTesterClient())
{
var response = client
- .CreateHttpRequest(new Uri("http://swagger-demo.qatoolkit.io/"), true)
- .WithQueryParams(new Dictionary() { { "api-version", "1" } })
- .WithMethod(HttpMethod.Get)
- .WithPath("/api/bicycles/1");
+ .CreateHttpRequest(new Uri("http://swagger-demo.qatoolkit.io/"), true)
+ .WithQueryParams(new Dictionary() { { "api-version", "1" } })
+ .WithMethod(HttpMethod.Get)
+ .WithPath("/api/bicycles/1");
await Assert.ThrowsAsync(async () => await client.Start());
}
@@ -351,12 +351,12 @@ public async Task HttpTesterClientReturnDynamic_Success()
using (var client = new HttpTesterClient())
{
var response = await client
- .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
- .WithQueryParams(new Dictionary() { { "api-version", "1" } })
- .WithMethod(HttpMethod.Post)
- .WithJsonBody(BicycleFixture.GetCfr())
- .WithPath("/api/bicycles")
- .Start();
+ .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
+ .WithQueryParams(new Dictionary() { { "api-version", "1" } })
+ .WithMethod(HttpMethod.Post)
+ .WithJsonBody(BicycleFixture.GetCfr())
+ .WithPath("/api/bicycles")
+ .Start();
var msg = await response.GetResponseJsonBody();
@@ -372,10 +372,10 @@ public async Task HttpTesterClientPostStringBodyWithFulUrl_Success()
using (var client = new HttpTesterClient())
{
var response = await client
- .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1"))
- .WithJsonBody("{\"id\": 5,\"name\":\"EXCEED CFR\",\"brand\":\"Giant\",\"type\":2}")
- .WithMethod(HttpMethod.Post)
- .Start();
+ .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1"))
+ .WithJsonBody("{\"id\": 5,\"name\":\"EXCEED CFR\",\"brand\":\"Giant\",\"type\":2}")
+ .WithMethod(HttpMethod.Post)
+ .Start();
var msg = await response.GetResponseBodyString();
@@ -390,10 +390,10 @@ public async Task HttpTesterClientPostObjectBodyWithFulUrl_Success()
using (var client = new HttpTesterClient())
{
var response = await client
- .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1"))
- .WithJsonBody(BicycleFixture.GetCfr())
- .WithMethod(HttpMethod.Post)
- .Start();
+ .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1"))
+ .WithJsonBody(BicycleFixture.GetCfr())
+ .WithMethod(HttpMethod.Post)
+ .Start();
var msg = await response.GetResponseJsonBody();
@@ -409,11 +409,11 @@ public async Task HttpTesterClientPostObjectBodyWithFulUrlWithBasicAuthorization
using (var client = new HttpTesterClient())
{
var response = await client
- .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1"))
- .WithJsonBody(BicycleFixture.GetCfr())
- .WithMethod(HttpMethod.Post)
- .WithBasicAuthentication("user", "pass")
- .Start();
+ .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1"))
+ .WithJsonBody(BicycleFixture.GetCfr())
+ .WithMethod(HttpMethod.Post)
+ .WithBasicAuthentication("user", "pass")
+ .Start();
var msg = await response.GetResponseJsonBody();
@@ -430,11 +430,11 @@ public async Task HttpTesterClientPostObjectBodyWithFulUrlWithBearerAuthorizatio
using (var client = new HttpTesterClient())
{
var response = await client
- .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1"))
- .WithJsonBody(BicycleFixture.GetCfr())
- .WithMethod(HttpMethod.Post)
- .WithBearerAuthentication("123")
- .Start();
+ .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1"))
+ .WithJsonBody(BicycleFixture.GetCfr())
+ .WithMethod(HttpMethod.Post)
+ .WithBearerAuthentication("123")
+ .Start();
var msg = await response.GetResponseJsonBody();
@@ -451,11 +451,11 @@ public async Task HttpTesterClientPostObjectBodyWithFulUrlWithNTLMDefaultAuthori
using (var client = new HttpTesterClient())
{
var response = await client
- .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1"))
- .WithJsonBody(BicycleFixture.GetCfr())
- .WithMethod(HttpMethod.Post)
- .WithNTLMAuthentication()
- .Start();
+ .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1"))
+ .WithJsonBody(BicycleFixture.GetCfr())
+ .WithMethod(HttpMethod.Post)
+ .WithNTLMAuthentication()
+ .Start();
var msg = await response.GetResponseJsonBody();
@@ -471,11 +471,11 @@ public async Task HttpTesterClientPostObjectBodyWithFulUrlWithNTLMAuthorization_
using (var client = new HttpTesterClient())
{
var response = await client
- .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1"))
- .WithJsonBody(BicycleFixture.GetCfr())
- .WithMethod(HttpMethod.Post)
- .WithNTLMAuthentication("user", "pass")
- .Start();
+ .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net/api/bicycles?api-version=1"))
+ .WithJsonBody(BicycleFixture.GetCfr())
+ .WithMethod(HttpMethod.Post)
+ .WithNTLMAuthentication("user", "pass")
+ .Start();
var msg = await response.GetResponseJsonBody();
@@ -493,13 +493,13 @@ public async Task HttpTesterClientFileUpload_Success()
var image = new WebClient().DownloadData("https://qatoolkit.io/assets/logo.png");
var response = await client
- .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
- .WithQueryParams(new Dictionary() { { "api-version", "2" } })
- .WithMethod(HttpMethod.Post)
- .WithPath("/api/bicycles/1/images")
- .WithMultipart(image, "FileContent", "logo.png")
- .WithMultipart("FileName", "miha.txt")
- .Start();
+ .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
+ .WithQueryParams(new Dictionary() { { "api-version", "2" } })
+ .WithMethod(HttpMethod.Post)
+ .WithPath("/api/bicycles/1/images")
+ .WithMultipart(image, "FileContent", "logo.png")
+ .WithMultipart("FileName", "miha.txt")
+ .Start();
var msg = await response.GetResponseBodyString();
@@ -516,13 +516,13 @@ public async Task HttpTesterClientFileUpload2_Success()
byte[] image = new WebClient().DownloadData("https://qatoolkit.io/assets/logo.png");
var response = await client
- .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
- .WithQueryParams(new Dictionary() { { "api-version", "2" } })
- .WithMethod(HttpMethod.Post)
- .WithPath("/api/bicycles/1/images")
- .WithMultipart(image, "FileContent", "logo.png")
- .WithMultipart("FileName", "miha.txt")
- .Start();
+ .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
+ .WithQueryParams(new Dictionary() { { "api-version", "2" } })
+ .WithMethod(HttpMethod.Post)
+ .WithPath("/api/bicycles/1/images")
+ .WithMultipart(image, "FileContent", "logo.png")
+ .WithMultipart("FileName", "miha.txt")
+ .Start();
var msg = await response.GetResponseBodyString();
@@ -539,15 +539,15 @@ public async Task HttpTesterClientBrochureUpload_Success()
byte[] image = new WebClient().DownloadData("https://qatoolkit.io/assets/logo.png");
var response = await client
- .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
- .WithQueryParams(new Dictionary() { { "api-version", "2" } })
- .WithMethod(HttpMethod.Post)
- .WithPath("/api/bicycles/1/brochures")
- .WithMultipart(image, "Image.FileContent", "logo.png")
- .WithMultipart("Image.FileName", "miha.txt")
- .WithMultipart("Metadata.Year", "2000")
- .WithMultipart("Metadata.Name", "Brochure 2000")
- .Start();
+ .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
+ .WithQueryParams(new Dictionary() { { "api-version", "2" } })
+ .WithMethod(HttpMethod.Post)
+ .WithPath("/api/bicycles/1/brochures")
+ .WithMultipart(image, "Image.FileContent", "logo.png")
+ .WithMultipart("Image.FileName", "miha.txt")
+ .WithMultipart("Metadata.Year", "2000")
+ .WithMultipart("Metadata.Name", "Brochure 2000")
+ .Start();
var msg = await response.GetResponseBodyString();
@@ -564,13 +564,14 @@ public void HttpTesterClientBrochureUploadBodyPresent_Fails()
byte[] image = new WebClient().DownloadData("https://qatoolkit.io/assets/logo.png");
var response = client
- .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
- .WithQueryParams(new Dictionary() { { "api-version", "2" } })
- .WithMethod(HttpMethod.Post)
- .WithPath("/api/bicycles/1/brochures")
- .WithJsonBody("1234");
+ .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
+ .WithQueryParams(new Dictionary() { { "api-version", "2" } })
+ .WithMethod(HttpMethod.Post)
+ .WithPath("/api/bicycles/1/brochures")
+ .WithJsonBody("1234");
- var exception = Assert.Throws(() => client.WithMultipart(image, "Image.FileContent", "logo.png"));
+ var exception = Assert.Throws(() =>
+ client.WithMultipart(image, "Image.FileContent", "logo.png"));
Assert.StartsWith("Body application/json already defined on", exception.Message);
}
}
@@ -583,16 +584,17 @@ public void HttpTesterClientBrochureUploadMultipartPresent_Fails()
byte[] image = new WebClient().DownloadData("https://qatoolkit.io/assets/logo.png");
var response = client
- .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
- .WithQueryParams(new Dictionary() { { "api-version", "2" } })
- .WithMethod(HttpMethod.Post)
- .WithPath("/api/bicycles/1/brochures")
- .WithMultipart(image, "Image.FileContent", "logo.png")
- .WithMultipart("Image.FileName", "miha.txt")
- .WithMultipart("Metadata.Year", "2000")
- .WithMultipart("Metadata.Name", "Brochure 2000");
-
- var exception = Assert.Throws(() => client.WithJsonBody("1234"));
+ .CreateHttpRequest(new Uri("https://qatoolkitapi.azurewebsites.net"))
+ .WithQueryParams(new Dictionary() { { "api-version", "2" } })
+ .WithMethod(HttpMethod.Post)
+ .WithPath("/api/bicycles/1/brochures")
+ .WithMultipart(image, "Image.FileContent", "logo.png")
+ .WithMultipart("Image.FileName", "miha.txt")
+ .WithMultipart("Metadata.Year", "2000")
+ .WithMultipart("Metadata.Name", "Brochure 2000");
+
+ var exception =
+ Assert.Throws(() => client.WithJsonBody("1234"));
Assert.StartsWith("Body multipart/form-data already defined", exception.Message);
}
}
@@ -610,16 +612,17 @@ public async Task HttpTesterClientAddPostHttpRequest_Success()
options.UseSwaggerExampleValues = true;
});
- var requests = await urlSource.Load(new Uri[] {
+ var requests = await urlSource.Load(new Uri[]
+ {
new Uri("https://qatoolkitapi.azurewebsites.net/swagger/v2/swagger.json")
});
using (var client = new HttpTesterClient())
{
var response = await client
- .CreateHttpRequest(requests.FirstOrDefault())
- .WithJsonBody(BicycleFixture.Get())
- .Start();
+ .CreateHttpRequest(requests.FirstOrDefault())
+ .WithJsonBody(BicycleFixture.Get())
+ .Start();
var msg = await response.GetResponseJsonBody();
@@ -642,15 +645,16 @@ public async Task HttpTesterClientAddGetHttpRequest_Success()
options.UseSwaggerExampleValues = true;
});
- var requests = await urlSource.Load(new Uri[] {
+ var requests = await urlSource.Load(new Uri[]
+ {
new Uri("https://qatoolkitapi.azurewebsites.net/swagger/v2/swagger.json")
});
using (var client = new HttpTesterClient())
{
var response = await client
- .CreateHttpRequest(requests.FirstOrDefault())
- .Start();
+ .CreateHttpRequest(requests.FirstOrDefault())
+ .Start();
var msg = await response.GetResponseJsonBody>();
@@ -675,17 +679,18 @@ public async Task HttpTesterClientGetBikeByIdRequest_Success()
options.UseSwaggerExampleValues = true;
});
- var requests = await urlSource.Load(new Uri[] {
+ var requests = await urlSource.Load(new Uri[]
+ {
new Uri("https://qatoolkitapi.azurewebsites.net/swagger/v2/swagger.json")
});
using (var client = new HttpTesterClient())
{
var response = await client
- .CreateHttpRequest(requests.FirstOrDefault())
- .WithPathReplacementValues(new Dictionary() { { "id", "2" } })
- .WithQueryParams(new Dictionary() { { "api-version", "2" } })
- .Start();
+ .CreateHttpRequest(requests.FirstOrDefault())
+ .WithPathReplacementValues(new Dictionary() { { "id", "2" } })
+ .WithQueryParams(new Dictionary() { { "api-version", "2" } })
+ .Start();
var msg = await response.GetResponseJsonBody();
@@ -710,16 +715,18 @@ public async Task HttpTesterClientGetBikesByTypeHttpRequest_Success()
options.UseSwaggerExampleValues = true;
});
- var requests = await urlSource.Load(new Uri[] {
+ var requests = await urlSource.Load(new Uri[]
+ {
new Uri("https://qatoolkitapi.azurewebsites.net/swagger/v2/swagger.json")
});
using (var client = new HttpTesterClient())
{
var response = await client
- .CreateHttpRequest(requests.FirstOrDefault())
- .WithQueryParams(new Dictionary() { { "api-version", "2" }, {"bicycleType", "1" } })
- .Start();
+ .CreateHttpRequest(requests.FirstOrDefault())
+ .WithQueryParams(
+ new Dictionary() { { "api-version", "2" }, { "bicycleType", "1" } })
+ .Start();
var msg = await response.GetResponseJsonBody>();
@@ -730,7 +737,7 @@ public async Task HttpTesterClientGetBikesByTypeHttpRequest_Success()
Assert.True(response.IsSuccessStatusCode);
}
}
-
+
[Fact]
public async Task HttpTesterClientPostObjectBodyWithBlankCertificateDefaultAuthorization_Success()
{
@@ -744,5 +751,41 @@ await Assert.ThrowsAsync(async () => await client
.Start());
}
}
+
+ [Fact]
+ public async Task HttpTesterMultipleHeaders_Success()
+ {
+ using (var client = new HttpTesterClient())
+ {
+ client
+ .CreateHttpRequest(new Uri("http://swagger-demo.qatoolkit.io/"), true)
+ .WithQueryParams(new Dictionary() { { "api-version", "1" } })
+ .WithMethod(HttpMethod.Get)
+ .WithHeaders(new Dictionary() { { "ApiKey", "1234" } })
+ .WithPath("/api/bicycles/1");
+
+ client.WithHeaders(new Dictionary() { { "Test", "1234" } });
+
+ Assert.True(client.GetRequestHeaders().Count == 2);
+ }
+ }
+
+ [Fact]
+ public async Task HttpTesterMultipleHeadersAlreadyExist_Success()
+ {
+ using (var client = new HttpTesterClient())
+ {
+ client
+ .CreateHttpRequest(new Uri("http://swagger-demo.qatoolkit.io/"), true)
+ .WithQueryParams(new Dictionary() { { "api-version", "1" } })
+ .WithMethod(HttpMethod.Get)
+ .WithHeaders(new Dictionary() { { "ApiKey", "1234" } })
+ .WithPath("/api/bicycles/1");
+
+ client.WithHeaders(new Dictionary() { { "ApiKey", "1234" } });
+
+ Assert.True(client.GetRequestHeaders().Count == 1);
+ }
+ }
}
-}
+}
\ No newline at end of file
diff --git a/src/QAToolKit.Engine.HttpTester.Test/QAToolKit.Engine.HttpTester.Test.csproj b/src/QAToolKit.Engine.HttpTester.Test/QAToolKit.Engine.HttpTester.Test.csproj
index 4ed442e..573bc1d 100644
--- a/src/QAToolKit.Engine.HttpTester.Test/QAToolKit.Engine.HttpTester.Test.csproj
+++ b/src/QAToolKit.Engine.HttpTester.Test/QAToolKit.Engine.HttpTester.Test.csproj
@@ -1,7 +1,7 @@
- net5.0
+ net6.0
latest
false
@@ -12,11 +12,11 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
-
+
+
+
+
+
all
diff --git a/src/QAToolKit.Engine.HttpTester/HttpTesterClient.cs b/src/QAToolKit.Engine.HttpTester/HttpTesterClient.cs
index f8fa60f..e9fbcae 100644
--- a/src/QAToolKit.Engine.HttpTester/HttpTesterClient.cs
+++ b/src/QAToolKit.Engine.HttpTester/HttpTesterClient.cs
@@ -168,8 +168,26 @@ public IHttpTesterClient WithPathReplacementValues(Dictionary pa
///
public IHttpTesterClient WithHeaders(Dictionary headers)
{
- _headers = headers ?? throw new ArgumentException($"{nameof(headers)} is null.");
-
+ if (headers == null)
+ {
+ throw new ArgumentException($"{nameof(headers)} is null.");
+ }
+
+ if (_headers == null || _headers.Count == 0)
+ {
+ _headers = headers;
+ }
+ else
+ {
+ foreach (var header in headers)
+ {
+ if (!_headers.ContainsKey(header.Key))
+ {
+ _headers.Add(header.Key, header.Value);
+ }
+ }
+ }
+
return this;
}
@@ -427,6 +445,16 @@ public async Task Start()
return _responseMessage;
}
+ public Dictionary GetRequestHeaders()
+ {
+ return _headers;
+ }
+
+ public Dictionary GetQueryParameters()
+ {
+ return _queryParameters;
+ }
+
///
/// Dispose the object
///