diff --git a/readme.md b/readme.md
index bfc789d9..fb586f30 100644
--- a/readme.md
+++ b/readme.md
@@ -111,7 +111,6 @@ public async Task HttpResponse()
Access-Control-Allow-Origin: *,
Cache-Control: max-age=300,
Connection: keep-alive,
- Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox,
Cross-Origin-Resource-Policy: cross-origin,
Strict-Transport-Security: max-age=31536000,
Vary: Authorization,Accept-Encoding,
@@ -151,7 +150,7 @@ SOFTWARE.
}
}
```
-snippet source | anchor
+snippet source | anchor
@@ -268,7 +267,6 @@ await Verify(recording.Sends);
Access-Control-Allow-Origin: *,
Cache-Control: max-age=300,
Connection: keep-alive,
- Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox,
Cross-Origin-Resource-Policy: cross-origin,
Strict-Transport-Security: max-age=31536000,
Vary: Authorization|Accept-Encoding,
@@ -303,7 +301,7 @@ SOFTWARE.
}
]
```
-snippet source | anchor
+snippet source | anchor
There a Pause/Resume semantics:
@@ -432,7 +430,6 @@ The requests/response pairs will be appended to the verified file.
Headers: {
Access-Control-Allow-Origin: ,
Cache-Control: no-cache,
- Content-Security-Policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com github.githubassets.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com wss://alive-staging.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com marketplace-screenshots.githubusercontent.com/ copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com github.githubassets.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/,
Location: https://raw.githubusercontent.com/VerifyTests/Verify.Http/main/src/global.json,
Referrer-Policy: no-referrer-when-downgrade,
Strict-Transport-Security: max-age=31536000; includeSubdomains; preload,
@@ -460,7 +457,6 @@ The requests/response pairs will be appended to the verified file.
Access-Control-Allow-Origin: *,
Cache-Control: max-age=300,
Connection: keep-alive,
- Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox,
Cross-Origin-Resource-Policy: cross-origin,
Strict-Transport-Security: max-age=31536000,
Vary: Authorization,Accept-Encoding,
@@ -492,7 +488,6 @@ The requests/response pairs will be appended to the verified file.
Headers: {
Access-Control-Allow-Origin: ,
Cache-Control: no-cache,
- Content-Security-Policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com github.githubassets.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com wss://alive-staging.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com marketplace-screenshots.githubusercontent.com/ copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com github.githubassets.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/,
Location: https://raw.githubusercontent.com/VerifyTests/Verify.Http/main/src/appveyor.yml,
Referrer-Policy: no-referrer-when-downgrade,
Strict-Transport-Security: max-age=31536000; includeSubdomains; preload,
@@ -520,7 +515,6 @@ The requests/response pairs will be appended to the verified file.
Access-Control-Allow-Origin: *,
Cache-Control: max-age=300,
Connection: keep-alive,
- Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox,
Cross-Origin-Resource-Policy: cross-origin,
Strict-Transport-Security: max-age=31536000,
Vary: Authorization,Accept-Encoding,
@@ -554,7 +548,7 @@ artifacts:
]
}
```
-snippet source | anchor
+snippet source | anchor
@@ -666,28 +660,29 @@ public async Task DefaultContent()
Request-Response pairs can be verified using `MockHttpClient.Calls`
-
-
+
+
```cs
[Fact]
-public async Task RecordedCalls()
+public async Task ExplicitContent()
{
- using var client = new MockHttpClient();
+ using var client = new MockHttpClient(
+ content: """{ "a": "b" }""",
+ mediaType: "application/json");
- await client.GetAsync("https://fake/get1");
- await client.GetAsync("https://fake/get2");
+ var result = await client.GetAsync("https://fake/get");
- await Verify(client.Calls);
+ await Verify(result);
}
```
-snippet source | anchor
+snippet source | anchor
#### Resulting verified file
-
-
+
+
```txt
[
{
@@ -700,7 +695,7 @@ public async Task RecordedCalls()
}
]
```
-snippet source | anchor
+snippet source | anchor
@@ -837,16 +832,15 @@ Use custom code to create a `HttpResponseMessage` base on a `HttpRequestMessage`
[Fact]
public async Task ResponseBuilder()
{
- using var client = new MockHttpClient(
- request =>
+ using var client = new MockHttpClient(request =>
+ {
+ var content = $"Hello to {request.RequestUri}";
+ var response = new HttpResponseMessage(HttpStatusCode.OK)
{
- var content = $"Hello to {request.RequestUri}";
- var response = new HttpResponseMessage(HttpStatusCode.OK)
- {
- Content = new StringContent(content),
- };
- return response;
- });
+ Content = new StringContent(content),
+ };
+ return response;
+ });
var result1 = await client.GetAsync("https://fake/get1");
var result2 = await client.GetAsync("https://fake/get2");
@@ -858,7 +852,7 @@ public async Task ResponseBuilder()
});
}
```
-snippet source | anchor
+snippet source | anchor
@@ -956,6 +950,52 @@ public async Task EnumerableResponses()
+
+### Recording Mock Interactions
+
+Interactions with MockHttpClient (in the form of Request and repsponse pairs) can optionally be included in [Recording](https://github.com/VerifyTests/Verify/blob/main/docs/recording.md).
+
+
+
+```cs
+[Fact]
+public async Task RecordingMockInteractions()
+{
+ using var client = new MockHttpClient(recording: true);
+
+ Recording.Start();
+ await client.GetStringAsync("https://fake/getOne");
+ await client.GetStringAsync("https://fake/getTwo");
+
+ await Verify();
+}
+```
+snippet source | anchor
+
+
+
+#### Resulting verified file
+
+
+
+```txt
+{
+ httpCall: [
+ {
+ Request: https://fake/getOne,
+ Response: 200 Ok
+ },
+ {
+ Request: https://fake/getTwo,
+ Response: 200 Ok
+ }
+ ]
+}
+```
+snippet source | anchor
+
+
+
## Icon
[Spider](https://thenounproject.com/term/spider/904683/) designed by [marialuisa iborra](https://thenounproject.com/marialuisa.iborra/) from [The Noun Project](https://thenounproject.com).
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
index f7ec6ec7..e6ae0737 100644
--- a/src/Directory.Build.props
+++ b/src/Directory.Build.props
@@ -2,7 +2,7 @@
CS1591;CS0649;CS8632;NU1608;NU1109
- 7.0.0
+ 7.1.0
preview
1.0.0
Http, Verify
diff --git a/src/Tests/MockHttpClientTests.RecordingMockInteractions.verified.txt b/src/Tests/MockHttpClientTests.RecordingMockInteractions.verified.txt
new file mode 100644
index 00000000..f692bfef
--- /dev/null
+++ b/src/Tests/MockHttpClientTests.RecordingMockInteractions.verified.txt
@@ -0,0 +1,12 @@
+{
+ httpCall: [
+ {
+ Request: https://fake/getOne,
+ Response: 200 Ok
+ },
+ {
+ Request: https://fake/getTwo,
+ Response: 200 Ok
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/Tests/MockHttpClientTests.RecordedCalls.verified.txt b/src/Tests/MockHttpClientTests.TrackedCalls.verified.txt
similarity index 100%
rename from src/Tests/MockHttpClientTests.RecordedCalls.verified.txt
rename to src/Tests/MockHttpClientTests.TrackedCalls.verified.txt
diff --git a/src/Tests/MockHttpClientTests.cs b/src/Tests/MockHttpClientTests.cs
index e2305541..761e4c4d 100644
--- a/src/Tests/MockHttpClientTests.cs
+++ b/src/Tests/MockHttpClientTests.cs
@@ -48,10 +48,10 @@ public async Task DefaultContent()
#endregion
- #region RecordedCalls
+ #region TrackedCalls
[Fact]
- public async Task RecordedCalls()
+ public async Task TrackedCalls()
{
using var client = new MockHttpClient();
@@ -127,16 +127,15 @@ await Verify(new
[Fact]
public async Task ResponseBuilder()
{
- using var client = new MockHttpClient(
- request =>
+ using var client = new MockHttpClient(request =>
+ {
+ var content = $"Hello to {request.RequestUri}";
+ var response = new HttpResponseMessage(HttpStatusCode.OK)
{
- var content = $"Hello to {request.RequestUri}";
- var response = new HttpResponseMessage(HttpStatusCode.OK)
- {
- Content = new StringContent(content),
- };
- return response;
- });
+ Content = new StringContent(content),
+ };
+ return response;
+ });
var result1 = await client.GetAsync("https://fake/get1");
var result2 = await client.GetAsync("https://fake/get2");
@@ -288,4 +287,20 @@ await Verify(
})
.UniqueForRuntimeAndVersion();
}
+
+ #region RecordingMockInteractions
+
+ [Fact]
+ public async Task RecordingMockInteractions()
+ {
+ using var client = new MockHttpClient(recording: true);
+
+ Recording.Start();
+ await client.GetStringAsync("https://fake/getOne");
+ await client.GetStringAsync("https://fake/getTwo");
+
+ await Verify();
+ }
+
+ #endregion
}
\ No newline at end of file
diff --git a/src/Tests/Tests.HttpClientRecording.verified.txt b/src/Tests/Tests.HttpClientRecording.verified.txt
index 8c6850a5..a822136c 100644
--- a/src/Tests/Tests.HttpClientRecording.verified.txt
+++ b/src/Tests/Tests.HttpClientRecording.verified.txt
@@ -8,7 +8,6 @@
Access-Control-Allow-Origin: *,
Cache-Control: max-age=300,
Connection: keep-alive,
- Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox,
Cross-Origin-Resource-Policy: cross-origin,
Strict-Transport-Security: max-age=31536000,
Vary: Authorization|Accept-Encoding,
diff --git a/src/Tests/Tests.HttpClientRecordingGlobal.verified.txt b/src/Tests/Tests.HttpClientRecordingGlobal.verified.txt
index 8c6850a5..a822136c 100644
--- a/src/Tests/Tests.HttpClientRecordingGlobal.verified.txt
+++ b/src/Tests/Tests.HttpClientRecordingGlobal.verified.txt
@@ -8,7 +8,6 @@
Access-Control-Allow-Origin: *,
Cache-Control: max-age=300,
Connection: keep-alive,
- Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox,
Cross-Origin-Resource-Policy: cross-origin,
Strict-Transport-Security: max-age=31536000,
Vary: Authorization|Accept-Encoding,
diff --git a/src/Tests/Tests.HttpResponse.verified.txt b/src/Tests/Tests.HttpResponse.verified.txt
index c402de60..5ac06fa4 100644
--- a/src/Tests/Tests.HttpResponse.verified.txt
+++ b/src/Tests/Tests.HttpResponse.verified.txt
@@ -5,7 +5,6 @@
Access-Control-Allow-Origin: *,
Cache-Control: max-age=300,
Connection: keep-alive,
- Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox,
Cross-Origin-Resource-Policy: cross-origin,
Strict-Transport-Security: max-age=31536000,
Vary: Authorization,Accept-Encoding,
diff --git a/src/Tests/Tests.HttpResponseNested.verified.txt b/src/Tests/Tests.HttpResponseNested.verified.txt
index 60a29814..0af2541d 100644
--- a/src/Tests/Tests.HttpResponseNested.verified.txt
+++ b/src/Tests/Tests.HttpResponseNested.verified.txt
@@ -6,7 +6,6 @@
Access-Control-Allow-Origin: *,
Cache-Control: max-age=300,
Connection: keep-alive,
- Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox,
Cross-Origin-Resource-Policy: cross-origin,
Strict-Transport-Security: max-age=31536000,
Vary: Authorization,Accept-Encoding,
diff --git a/src/Tests/Tests.IgnoreAuth.verified.txt b/src/Tests/Tests.IgnoreAuth.verified.txt
index 9077d7ac..b6f9763b 100644
--- a/src/Tests/Tests.IgnoreAuth.verified.txt
+++ b/src/Tests/Tests.IgnoreAuth.verified.txt
@@ -14,7 +14,6 @@
Access-Control-Allow-Origin: *,
Cache-Control: max-age=300,
Connection: keep-alive,
- Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox,
Cross-Origin-Resource-Policy: cross-origin,
Strict-Transport-Security: max-age=31536000,
Vary: Authorization,Accept-Encoding,
diff --git a/src/Tests/Tests.IgnoreHeader.verified.txt b/src/Tests/Tests.IgnoreHeader.verified.txt
index c402de60..5ac06fa4 100644
--- a/src/Tests/Tests.IgnoreHeader.verified.txt
+++ b/src/Tests/Tests.IgnoreHeader.verified.txt
@@ -5,7 +5,6 @@
Access-Control-Allow-Origin: *,
Cache-Control: max-age=300,
Connection: keep-alive,
- Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox,
Cross-Origin-Resource-Policy: cross-origin,
Strict-Transport-Security: max-age=31536000,
Vary: Authorization,Accept-Encoding,
diff --git a/src/Tests/Tests.ImageHttpResponse.verified.txt b/src/Tests/Tests.ImageHttpResponse.verified.txt
index f5d74822..30eb22fd 100644
--- a/src/Tests/Tests.ImageHttpResponse.verified.txt
+++ b/src/Tests/Tests.ImageHttpResponse.verified.txt
@@ -6,7 +6,6 @@
Access-Control-Allow-Origin: *,
Cache-Control: max-age=300,
Connection: keep-alive,
- Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox,
Cross-Origin-Resource-Policy: cross-origin,
Strict-Transport-Security: max-age=31536000,
Vary: Authorization,Accept-Encoding,
diff --git a/src/Tests/Tests.JsonGet.verified.txt b/src/Tests/Tests.JsonGet.verified.txt
index 47617955..d2927493 100644
--- a/src/Tests/Tests.JsonGet.verified.txt
+++ b/src/Tests/Tests.JsonGet.verified.txt
@@ -17,7 +17,6 @@
Headers: {
Access-Control-Allow-Origin: ,
Cache-Control: no-cache,
- Content-Security-Policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com github.githubassets.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com wss://alive-staging.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com marketplace-screenshots.githubusercontent.com/ copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com github.githubassets.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/,
Location: https://raw.githubusercontent.com/VerifyTests/Verify.Http/main/src/global.json,
Referrer-Policy: no-referrer-when-downgrade,
Strict-Transport-Security: max-age=31536000; includeSubdomains; preload,
@@ -45,7 +44,6 @@
Access-Control-Allow-Origin: *,
Cache-Control: max-age=300,
Connection: keep-alive,
- Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox,
Cross-Origin-Resource-Policy: cross-origin,
Strict-Transport-Security: max-age=31536000,
Vary: Authorization,Accept-Encoding,
diff --git a/src/Tests/Tests.PauseResume.verified.txt b/src/Tests/Tests.PauseResume.verified.txt
index 8c6850a5..a822136c 100644
--- a/src/Tests/Tests.PauseResume.verified.txt
+++ b/src/Tests/Tests.PauseResume.verified.txt
@@ -8,7 +8,6 @@
Access-Control-Allow-Origin: *,
Cache-Control: max-age=300,
Connection: keep-alive,
- Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox,
Cross-Origin-Resource-Policy: cross-origin,
Strict-Transport-Security: max-age=31536000,
Vary: Authorization|Accept-Encoding,
diff --git a/src/Tests/Tests.RecordingFullControl.verified.txt b/src/Tests/Tests.RecordingFullControl.verified.txt
index 8c6850a5..a822136c 100644
--- a/src/Tests/Tests.RecordingFullControl.verified.txt
+++ b/src/Tests/Tests.RecordingFullControl.verified.txt
@@ -8,7 +8,6 @@
Access-Control-Allow-Origin: *,
Cache-Control: max-age=300,
Connection: keep-alive,
- Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox,
Cross-Origin-Resource-Policy: cross-origin,
Strict-Transport-Security: max-age=31536000,
Vary: Authorization|Accept-Encoding,
diff --git a/src/Tests/Tests.ScrubHttpTextResponse.verified.txt b/src/Tests/Tests.ScrubHttpTextResponse.verified.txt
index 581f37e4..743eb488 100644
--- a/src/Tests/Tests.ScrubHttpTextResponse.verified.txt
+++ b/src/Tests/Tests.ScrubHttpTextResponse.verified.txt
@@ -5,7 +5,6 @@
Access-Control-Allow-Origin: *,
Cache-Control: max-age=300,
Connection: keep-alive,
- Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox,
Cross-Origin-Resource-Policy: cross-origin,
Strict-Transport-Security: max-age=31536000,
Vary: Authorization,Accept-Encoding,
diff --git a/src/Tests/Tests.TestHttpRecording.verified.txt b/src/Tests/Tests.TestHttpRecording.verified.txt
index a0400c6b..873e51f7 100644
--- a/src/Tests/Tests.TestHttpRecording.verified.txt
+++ b/src/Tests/Tests.TestHttpRecording.verified.txt
@@ -14,7 +14,6 @@
Headers: {
Access-Control-Allow-Origin: ,
Cache-Control: no-cache,
- Content-Security-Policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com github.githubassets.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com wss://alive-staging.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com marketplace-screenshots.githubusercontent.com/ copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com github.githubassets.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/,
Location: https://raw.githubusercontent.com/VerifyTests/Verify.Http/main/src/global.json,
Referrer-Policy: no-referrer-when-downgrade,
Strict-Transport-Security: max-age=31536000; includeSubdomains; preload,
@@ -42,7 +41,6 @@
Access-Control-Allow-Origin: *,
Cache-Control: max-age=300,
Connection: keep-alive,
- Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox,
Cross-Origin-Resource-Policy: cross-origin,
Strict-Transport-Security: max-age=31536000,
Vary: Authorization,Accept-Encoding,
@@ -74,7 +72,6 @@
Headers: {
Access-Control-Allow-Origin: ,
Cache-Control: no-cache,
- Content-Security-Policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com github.githubassets.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com wss://alive-staging.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com marketplace-screenshots.githubusercontent.com/ copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com github.githubassets.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/,
Location: https://raw.githubusercontent.com/VerifyTests/Verify.Http/main/src/appveyor.yml,
Referrer-Policy: no-referrer-when-downgrade,
Strict-Transport-Security: max-age=31536000; includeSubdomains; preload,
@@ -102,7 +99,6 @@
Access-Control-Allow-Origin: *,
Cache-Control: max-age=300,
Connection: keep-alive,
- Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox,
Cross-Origin-Resource-Policy: cross-origin,
Strict-Transport-Security: max-age=31536000,
Vary: Authorization,Accept-Encoding,
diff --git a/src/Tests/Tests.TestHttpRecordingWithResponse.verified.txt b/src/Tests/Tests.TestHttpRecordingWithResponse.verified.txt
index 4b559505..7d0c8876 100644
--- a/src/Tests/Tests.TestHttpRecordingWithResponse.verified.txt
+++ b/src/Tests/Tests.TestHttpRecordingWithResponse.verified.txt
@@ -35,7 +35,6 @@ SOFTWARE.
Access-Control-Allow-Origin: *,
Cache-Control: max-age=300,
Connection: keep-alive,
- Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox,
Cross-Origin-Resource-Policy: cross-origin,
Strict-Transport-Security: max-age=31536000,
Vary: Authorization,Accept-Encoding,
diff --git a/src/Verify.Http/HttpRecording/HttpListener.cs b/src/Verify.Http/HttpRecording/HttpListener.cs
index 6f0640c5..b9ceba6b 100644
--- a/src/Verify.Http/HttpRecording/HttpListener.cs
+++ b/src/Verify.Http/HttpRecording/HttpListener.cs
@@ -1,4 +1,5 @@
-#pragma warning disable CA1822
+// ReSharper disable UnusedParameter.Global
+#pragma warning disable CA1822
class HttpListener :
IObserver,
IDisposable
diff --git a/src/Verify.Http/HttpRecording/MockHttpClient.cs b/src/Verify.Http/MockHttpClient/MockHttpClient.cs
similarity index 53%
rename from src/Verify.Http/HttpRecording/MockHttpClient.cs
rename to src/Verify.Http/MockHttpClient/MockHttpClient.cs
index 8b084958..9fe820e7 100644
--- a/src/Verify.Http/HttpRecording/MockHttpClient.cs
+++ b/src/Verify.Http/MockHttpClient/MockHttpClient.cs
@@ -5,13 +5,13 @@ public class MockHttpClient :
{
MockHttpHandler handler;
- public MockHttpClient(Func responseBuilder) :
- this(new MockHttpHandler(responseBuilder))
+ public MockHttpClient(Func responseBuilder, bool recording = false) :
+ this(new MockHttpHandler(responseBuilder, recording))
{
}
- public MockHttpClient(IEnumerable responses) :
- this(new MockHttpHandler(responses))
+ public MockHttpClient(IEnumerable responses, bool recording = false) :
+ this(new MockHttpHandler(responses, recording))
{
}
@@ -20,18 +20,18 @@ public MockHttpClient(params HttpResponseMessage[] responses) :
{
}
- public MockHttpClient(HttpResponseMessage response) :
- this(new MockHttpHandler(response))
+ public MockHttpClient(HttpResponseMessage response, bool recording = false) :
+ this(new MockHttpHandler(response, recording))
{
}
- public MockHttpClient(HttpStatusCode status = HttpStatusCode.OK) :
- this(new MockHttpHandler(status))
+ public MockHttpClient(HttpStatusCode status = HttpStatusCode.OK, bool recording = false) :
+ this(new MockHttpHandler(status, recording))
{
}
- public MockHttpClient(string content, string mediaType) :
- this(new MockHttpHandler(content, mediaType))
+ public MockHttpClient(string content, string mediaType, bool recording = false) :
+ this(new MockHttpHandler(content, mediaType, recording))
{
}
diff --git a/src/Verify.Http/HttpRecording/MockHttpClientConverter.cs b/src/Verify.Http/MockHttpClient/MockHttpClientConverter.cs
similarity index 100%
rename from src/Verify.Http/HttpRecording/MockHttpClientConverter.cs
rename to src/Verify.Http/MockHttpClient/MockHttpClientConverter.cs
diff --git a/src/Verify.Http/HttpRecording/MockHttpHandler.cs b/src/Verify.Http/MockHttpClient/MockHttpHandler.cs
similarity index 72%
rename from src/Verify.Http/HttpRecording/MockHttpHandler.cs
rename to src/Verify.Http/MockHttpClient/MockHttpHandler.cs
index 6d4555ad..476e7297 100644
--- a/src/Verify.Http/HttpRecording/MockHttpHandler.cs
+++ b/src/Verify.Http/MockHttpClient/MockHttpHandler.cs
@@ -3,11 +3,15 @@
public class MockHttpHandler :
DelegatingHandler
{
+ bool recording;
ConcurrentQueue calls = [];
Func builder;
- public MockHttpHandler(Func responseBuilder) =>
+ public MockHttpHandler(Func responseBuilder, bool recording = false)
+ {
builder = responseBuilder;
+ this.recording = recording;
+ }
ConcurrentBag disposables = [];
@@ -21,8 +25,9 @@ protected override void Dispose(bool disposing)
base.Dispose(disposing);
}
- public MockHttpHandler(IEnumerable responses)
+ public MockHttpHandler(IEnumerable responses, bool recording = false)
{
+ this.recording = recording;
var enumerator = responses.GetEnumerator();
disposables.Add(enumerator);
builder = _ =>
@@ -37,24 +42,39 @@ public MockHttpHandler(IEnumerable responses)
};
}
- public MockHttpHandler(HttpStatusCode status = HttpStatusCode.OK) =>
+ public MockHttpHandler(HttpStatusCode status = HttpStatusCode.OK, bool recording = false)
+ {
+ this.recording = recording;
builder = _ => new(status);
+ }
- public MockHttpHandler(HttpResponseMessage response) =>
+ public MockHttpHandler(HttpResponseMessage response, bool recording = false)
+ {
+ this.recording = recording;
builder = _ => response;
+ }
- public MockHttpHandler(string content, string mediaType) =>
+ public MockHttpHandler(string content, string mediaType, bool recording = false)
+ {
+ this.recording = recording;
builder = _ =>
new(HttpStatusCode.OK)
{
Content = new StringContent(content, Encoding.UTF8, mediaType)
};
+ }
public IReadOnlyCollection Calls => calls;
protected override Task SendAsync(HttpRequestMessage request, Cancel cancel)
{
var response = Add(request);
+ if (recording && Recording.IsRecording())
+ {
+ Recording.Add(
+ "httpCall",
+ new HttpCall(request, response, TimeSpan.Zero));
+ }
return Task.FromResult(response);
}
diff --git a/src/Verify.Http/HttpRecording/MockHttpHandlerConverter.cs b/src/Verify.Http/MockHttpClient/MockHttpHandlerConverter.cs
similarity index 100%
rename from src/Verify.Http/HttpRecording/MockHttpHandlerConverter.cs
rename to src/Verify.Http/MockHttpClient/MockHttpHandlerConverter.cs