From 09e3c8ce481910600442f57afe4458d5968ba737 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Thu, 7 Aug 2025 17:12:42 +0200 Subject: [PATCH] Updated core unit tests to latest recommendations --- .../Auth/ApiKeyAuthenticationTest.cs | 23 ++-- .../Auth/ApiTokenAuthenticationTest.cs | 9 +- test/Cloudflare.Tests/CloudflareClientTest.cs | 52 ++++----- .../CloudflareClientTests/DeleteAsyncTest.cs | 60 ++++++----- .../CloudflareClientTests/GetAsyncTest.cs | 82 +++++++------- .../CloudflareClientTests/PatchAsyncTest.cs | 85 ++++++++------- .../CloudflareClientTests/PostAsyncTest.cs | 101 +++++++++--------- .../CloudflareClientTests/PutAsyncTest.cs | 80 +++++++------- .../Extensions/EnumExtensionsTest.cs | 2 +- .../Extensions/StringExtensionsTest.cs | 59 +++------- test/Cloudflare.Tests/MessageHandlerMock.cs | 9 +- 11 files changed, 267 insertions(+), 295 deletions(-) diff --git a/test/Cloudflare.Tests/Auth/ApiKeyAuthenticationTest.cs b/test/Cloudflare.Tests/Auth/ApiKeyAuthenticationTest.cs index 51ea1fc..940faab 100644 --- a/test/Cloudflare.Tests/Auth/ApiKeyAuthenticationTest.cs +++ b/test/Cloudflare.Tests/Auth/ApiKeyAuthenticationTest.cs @@ -2,7 +2,7 @@ using System.Net.Http; using AMWD.Net.Api.Cloudflare; -namespace Cloudflare.Core.Tests.Auth +namespace Cloudflare.Tests.Auth { [TestClass] public class ApiKeyAuthenticationTest @@ -32,48 +32,39 @@ namespace Cloudflare.Core.Tests.Auth [DataRow(null)] [DataRow("")] [DataRow(" ")] - [ExpectedException(typeof(ArgumentNullException))] public void ShouldArgumentNullExceptionForEmailAddress(string emailAddress) { // Arrange string apiKey = "some-api-key"; - // Act - new ApiKeyAuthentication(emailAddress, apiKey); - - // Assert - ArgumentNullException + // Act & Assert + Assert.ThrowsExactly(() => new ApiKeyAuthentication(emailAddress, apiKey)); } [TestMethod] [DataRow(null)] [DataRow("")] [DataRow(" ")] - [ExpectedException(typeof(ArgumentNullException))] public void ShouldArgumentNullExceptionForApiKey(string apiKey) { // Arrange string emailAddress = "test@example.com"; - // Act - new ApiKeyAuthentication(emailAddress, apiKey); - - // Assert - ArgumentNullException + // Act & Assert + Assert.ThrowsExactly(() => new ApiKeyAuthentication(emailAddress, apiKey)); } [TestMethod] [DataRow("test")] [DataRow("test@example")] [DataRow("example.com")] - [ExpectedException(typeof(ArgumentException))] public void ShouldArgumentExceptionForInvalidEmailAddress(string emailAddress) { // Arrange string apiKey = "some-api-key"; - // Act - new ApiKeyAuthentication(emailAddress, apiKey); - - // Assert - ArgumentException + // Act & Assert + Assert.ThrowsExactly(() => new ApiKeyAuthentication(emailAddress, apiKey)); } } } diff --git a/test/Cloudflare.Tests/Auth/ApiTokenAuthenticationTest.cs b/test/Cloudflare.Tests/Auth/ApiTokenAuthenticationTest.cs index 4143235..72c1a32 100644 --- a/test/Cloudflare.Tests/Auth/ApiTokenAuthenticationTest.cs +++ b/test/Cloudflare.Tests/Auth/ApiTokenAuthenticationTest.cs @@ -1,7 +1,7 @@ using System.Net.Http; using AMWD.Net.Api.Cloudflare; -namespace Cloudflare.Core.Tests.Auth +namespace Cloudflare.Tests.Auth { [TestClass] public class ApiTokenAuthenticationTest @@ -29,15 +29,12 @@ namespace Cloudflare.Core.Tests.Auth [DataRow(null)] [DataRow("")] [DataRow(" ")] - [ExpectedException(typeof(ArgumentNullException))] public void ShouldArgumentNullExceptionForEmailAddress(string apiToken) { // Arrange - // Act - new ApiTokenAuthentication(apiToken); - - // Assert - ArgumentNullException + // Act & Assert + Assert.ThrowsExactly(() => new ApiTokenAuthentication(apiToken)); } } } diff --git a/test/Cloudflare.Tests/CloudflareClientTest.cs b/test/Cloudflare.Tests/CloudflareClientTest.cs index 63f3bc4..3d10a14 100644 --- a/test/Cloudflare.Tests/CloudflareClientTest.cs +++ b/test/Cloudflare.Tests/CloudflareClientTest.cs @@ -5,7 +5,7 @@ using AMWD.Net.Api.Cloudflare; using Moq; using Moq.Protected; -namespace Cloudflare.Core.Tests +namespace Cloudflare.Tests { [TestClass] public class CloudflareClientTest @@ -72,15 +72,15 @@ namespace Cloudflare.Core.Tests } [TestMethod] - [ExpectedException(typeof(ArgumentNullException))] public void ShouldThrowArgumentNullOnMissingAuthentication() { // Arrange - // Act - using var client = new CloudflareClient((IAuthentication)null); - - // Assert - ArgumentNullException + // Act & Assert + Assert.ThrowsExactly(() => + { + using var client = new CloudflareClient((IAuthentication)null); + }); } [TestMethod] @@ -150,7 +150,6 @@ namespace Cloudflare.Core.Tests } [TestMethod] - [ExpectedException(typeof(ArgumentNullException))] public void ShouldThrowArgumentNullForBaseUrlOnAssertClientOptions() { // Arrange @@ -158,14 +157,14 @@ namespace Cloudflare.Core.Tests .Setup(o => o.BaseUrl) .Returns((string)null); - // Act - var client = GetClient(); - - // Assert - ArgumentNullException + // Act & Assert + Assert.ThrowsExactly(() => + { + var client = GetClient(); + }); } [TestMethod] - [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ShouldThrowArgumentOutOfRangeForTimeoutOnAssertClientOptions() { // Arrange @@ -173,16 +172,16 @@ namespace Cloudflare.Core.Tests .Setup(o => o.Timeout) .Returns(TimeSpan.Zero); - // Act - var client = GetClient(); - - // Assert - ArgumentOutOfRangeException + // Act & Assert + Assert.ThrowsExactly(() => + { + var client = GetClient(); + }); } [TestMethod] [DataRow(-1)] [DataRow(11)] - [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ShouldThrowArgumentOutOfRangeForMaxRetriesOnAssertClientOptions(int maxRetries) { // Arrange @@ -190,14 +189,14 @@ namespace Cloudflare.Core.Tests .Setup(o => o.MaxRetries) .Returns(maxRetries); - // Act - var client = GetClient(); - - // Assert - ArgumentOutOfRangeException + // Act & Assert + Assert.ThrowsExactly(() => + { + var client = GetClient(); + }); } [TestMethod] - [ExpectedException(typeof(ArgumentNullException))] public void ShouldThrowArgumentNullForUseProxyOnAssertClientOptions() { // Arrange @@ -205,10 +204,11 @@ namespace Cloudflare.Core.Tests .Setup(o => o.UseProxy) .Returns(true); - // Act - var client = GetClient(); - - // Assert - ArgumentNullException + // Act & Assert + Assert.ThrowsExactly(() => + { + var client = GetClient(); + }); } private void VerifyDefault() diff --git a/test/Cloudflare.Tests/CloudflareClientTests/DeleteAsyncTest.cs b/test/Cloudflare.Tests/CloudflareClientTests/DeleteAsyncTest.cs index 41cab17..b30896a 100644 --- a/test/Cloudflare.Tests/CloudflareClientTests/DeleteAsyncTest.cs +++ b/test/Cloudflare.Tests/CloudflareClientTests/DeleteAsyncTest.cs @@ -12,11 +12,13 @@ using AMWD.Net.Api.Cloudflare; using Moq; using Moq.Protected; -namespace Cloudflare.Core.Tests.CloudflareClientTests +namespace Cloudflare.Tests.CloudflareClientTests { [TestClass] public class DeleteAsyncTest { + public TestContext TestContext { get; set; } + private const string BaseUrl = "http://localhost/api/v4/"; private HttpMessageHandlerMock _httpHandlerMock; @@ -44,46 +46,46 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests } [TestMethod] - [ExpectedException(typeof(ObjectDisposedException))] public async Task ShouldThrowDisposed() { // Arrange var client = GetClient() as CloudflareClient; client.Dispose(); - // Act - await client.DeleteAsync("test"); - - // Assert - ObjectDisposedException + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.DeleteAsync("test", cancellationToken: TestContext.CancellationTokenSource.Token); + }); } [TestMethod] [DataRow(null)] [DataRow("")] [DataRow(" ")] - [ExpectedException(typeof(ArgumentNullException))] public async Task ShouldThrowArgumentNullOnRequestPath(string path) { // Arrange var client = GetClient(); - // Act - await client.DeleteAsync(path); - - // Assert - ArgumentNullException + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.DeleteAsync(path, cancellationToken: TestContext.CancellationTokenSource.Token); + }); } [TestMethod] - [ExpectedException(typeof(ArgumentException))] public async Task ShouldThrowArgumentOnRequestPath() { // Arrange var client = GetClient(); - // Act - await client.DeleteAsync("foo?bar=baz"); - - // Assert - ArgumentException + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.DeleteAsync("foo?bar=baz", cancellationToken: TestContext.CancellationTokenSource.Token); + }); } [TestMethod] @@ -99,7 +101,7 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); // Act - var response = await client.DeleteAsync("test"); + var response = await client.DeleteAsync("test", cancellationToken: TestContext.CancellationTokenSource.Token); // Assert Assert.IsNotNull(response); @@ -108,21 +110,21 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests Assert.IsNotNull(response.Messages); Assert.IsNull(response.ResultInfo); - Assert.AreEqual(0, response.Errors.Count); - Assert.AreEqual(0, response.Messages.Count); + Assert.IsEmpty(response.Errors); + Assert.IsEmpty(response.Messages); Assert.IsNotNull(response.Result); Assert.AreEqual("some-string", response.Result.Str); Assert.AreEqual(123, response.Result.Int); - Assert.AreEqual(1, _httpHandlerMock.Callbacks.Count); + Assert.HasCount(1, _httpHandlerMock.Callbacks); var callback = _httpHandlerMock.Callbacks.First(); Assert.AreEqual(HttpMethod.Delete, callback.Method); Assert.AreEqual("http://localhost/api/v4/test", callback.Url); Assert.IsNull(callback.Content); - Assert.AreEqual(3, callback.Headers.Count); + Assert.HasCount(3, callback.Headers); Assert.IsTrue(callback.Headers.ContainsKey("Accept")); Assert.IsTrue(callback.Headers.ContainsKey("Authorization")); Assert.IsTrue(callback.Headers.ContainsKey("User-Agent")); @@ -154,7 +156,7 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests try { // Act - await client.DeleteAsync("foo"); + await client.DeleteAsync("foo", cancellationToken: TestContext.CancellationTokenSource.Token); Assert.Fail(); } catch (AuthenticationException ex) @@ -179,7 +181,7 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); // Act - var response = await client.DeleteAsync("some-awesome-path"); + var response = await client.DeleteAsync("some-awesome-path", cancellationToken: TestContext.CancellationTokenSource.Token); // Assert Assert.IsNotNull(response); @@ -190,14 +192,14 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests Assert.AreEqual("This is an awesome text ;-)", response.Result); - Assert.AreEqual(1, _httpHandlerMock.Callbacks.Count); + Assert.HasCount(1, _httpHandlerMock.Callbacks); var callback = _httpHandlerMock.Callbacks.First(); Assert.AreEqual(HttpMethod.Delete, callback.Method); Assert.AreEqual("http://localhost/api/v4/some-awesome-path?bar=08%2F15", callback.Url); Assert.IsNull(callback.Content); - Assert.AreEqual(3, callback.Headers.Count); + Assert.HasCount(3, callback.Headers); Assert.IsTrue(callback.Headers.ContainsKey("Accept")); Assert.IsTrue(callback.Headers.ContainsKey("Authorization")); Assert.IsTrue(callback.Headers.ContainsKey("User-Agent")); @@ -223,7 +225,6 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests } [TestMethod] - [ExpectedException(typeof(JsonReaderException))] public async Task ShouldThrowExceptionOnInvalidResponse() { // Arrange @@ -235,8 +236,11 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); - // Act - await client.DeleteAsync("some-path"); + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.DeleteAsync("some-path", cancellationToken: TestContext.CancellationTokenSource.Token); + }); } private void VerifyDefaults() diff --git a/test/Cloudflare.Tests/CloudflareClientTests/GetAsyncTest.cs b/test/Cloudflare.Tests/CloudflareClientTests/GetAsyncTest.cs index 2506c09..7a513e4 100644 --- a/test/Cloudflare.Tests/CloudflareClientTests/GetAsyncTest.cs +++ b/test/Cloudflare.Tests/CloudflareClientTests/GetAsyncTest.cs @@ -12,11 +12,13 @@ using AMWD.Net.Api.Cloudflare; using Moq; using Moq.Protected; -namespace Cloudflare.Core.Tests.CloudflareClientTests +namespace Cloudflare.Tests.CloudflareClientTests { [TestClass] public class GetAsyncTest { + public TestContext TestContext { get; set; } + private const string BaseUrl = "http://localhost/api/v4/"; private HttpMessageHandlerMock _httpHandlerMock; @@ -44,46 +46,46 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests } [TestMethod] - [ExpectedException(typeof(ObjectDisposedException))] public async Task ShouldThrowDisposed() { // Arrange var client = GetClient() as CloudflareClient; client.Dispose(); - // Act - await client.GetAsync("/test"); - - // Assert - ObjectDisposedException + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.GetAsync("/test", cancellationToken: TestContext.CancellationTokenSource.Token); + }); } [TestMethod] [DataRow(null)] [DataRow("")] [DataRow(" ")] - [ExpectedException(typeof(ArgumentNullException))] public async Task ShouldThrowArgumentNullOnRequestPath(string path) { // Arrange var client = GetClient(); - // Act - await client.GetAsync(path); - - // Assert - ArgumentNullException + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.GetAsync(path, cancellationToken: TestContext.CancellationTokenSource.Token); + }); } [TestMethod] - [ExpectedException(typeof(ArgumentException))] public async Task ShouldThrowArgumentOnRequestPath() { // Arrange var client = GetClient(); - // Act - await client.GetAsync("/foo?bar=baz"); - - // Assert - ArgumentException + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.GetAsync("/foo?bar=baz", cancellationToken: TestContext.CancellationTokenSource.Token); + }); } [TestMethod] @@ -99,7 +101,7 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); // Act - var response = await client.GetAsync("test"); + var response = await client.GetAsync("test", cancellationToken: TestContext.CancellationTokenSource.Token); // Assert Assert.IsNotNull(response); @@ -108,21 +110,21 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests Assert.IsNotNull(response.Messages); Assert.IsNull(response.ResultInfo); - Assert.AreEqual(0, response.Errors.Count); - Assert.AreEqual(0, response.Messages.Count); + Assert.IsEmpty(response.Errors); + Assert.IsEmpty(response.Messages); Assert.IsNotNull(response.Result); Assert.AreEqual("some-string", response.Result.Str); Assert.AreEqual(123, response.Result.Int); - Assert.AreEqual(1, _httpHandlerMock.Callbacks.Count); + Assert.HasCount(1, _httpHandlerMock.Callbacks); var callback = _httpHandlerMock.Callbacks.First(); Assert.AreEqual(HttpMethod.Get, callback.Method); Assert.AreEqual("http://localhost/api/v4/test", callback.Url); Assert.IsNull(callback.Content); - Assert.AreEqual(3, callback.Headers.Count); + Assert.HasCount(3, callback.Headers); Assert.IsTrue(callback.Headers.ContainsKey("Accept")); Assert.IsTrue(callback.Headers.ContainsKey("Authorization")); Assert.IsTrue(callback.Headers.ContainsKey("User-Agent")); @@ -154,7 +156,7 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests try { // Act - await client.GetAsync("foo"); + await client.GetAsync("foo", cancellationToken: TestContext.CancellationTokenSource.Token); Assert.Fail(); } catch (AuthenticationException ex) @@ -182,7 +184,7 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests try { // Act - await client.GetAsync("foo"); + await client.GetAsync("foo", cancellationToken: TestContext.CancellationTokenSource.Token); Assert.Fail(); } catch (AuthenticationException ex) @@ -196,7 +198,6 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests [TestMethod] [DataRow(HttpStatusCode.Unauthorized)] [DataRow(HttpStatusCode.Forbidden)] - [ExpectedException(typeof(CloudflareException))] public async Task ShouldThrowCloudflareExceptionOnStatusCodeWhenDeserializeFails(HttpStatusCode statusCode) { // Arrange @@ -208,10 +209,11 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); - // Act - await client.GetAsync("foo"); - - // Assert - CloudflareException + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.GetAsync("foo", cancellationToken: TestContext.CancellationTokenSource.Token); + }); } [TestMethod] @@ -228,7 +230,7 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); // Act - var response = await client.GetAsync("some-awesome-path", new TestFilter()); + var response = await client.GetAsync("some-awesome-path", new TestFilter(), TestContext.CancellationTokenSource.Token); // Assert Assert.IsNotNull(response); @@ -239,14 +241,14 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests Assert.AreEqual("This is an awesome text ;-)", response.Result); - Assert.AreEqual(1, _httpHandlerMock.Callbacks.Count); + Assert.HasCount(1, _httpHandlerMock.Callbacks); var callback = _httpHandlerMock.Callbacks.First(); Assert.AreEqual(HttpMethod.Get, callback.Method); Assert.AreEqual("http://localhost/api/v4/some-awesome-path?bar=08%2F15&test=filter-text", callback.Url); Assert.IsNull(callback.Content); - Assert.AreEqual(3, callback.Headers.Count); + Assert.HasCount(3, callback.Headers); Assert.IsTrue(callback.Headers.ContainsKey("Accept")); Assert.IsTrue(callback.Headers.ContainsKey("Authorization")); Assert.IsTrue(callback.Headers.ContainsKey("User-Agent")); @@ -272,7 +274,6 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests } [TestMethod] - [ExpectedException(typeof(JsonReaderException))] public async Task ShouldThrowExceptionOnInvalidResponse() { // Arrange @@ -284,12 +285,14 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); - // Act - await client.GetAsync("some-path"); + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.GetAsync("some-path", cancellationToken: TestContext.CancellationTokenSource.Token); + }); } [TestMethod] - [ExpectedException(typeof(CloudflareException))] public async Task ShouldThrowCloudflareExceptionWhenDeserializeFails() { // Arrange @@ -301,10 +304,11 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); - // Act - await client.GetAsync("foo"); - - // Assert - CloudflareException + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.GetAsync("foo", cancellationToken: TestContext.CancellationTokenSource.Token); + }); } private void VerifyDefaults() diff --git a/test/Cloudflare.Tests/CloudflareClientTests/PatchAsyncTest.cs b/test/Cloudflare.Tests/CloudflareClientTests/PatchAsyncTest.cs index c3cf33b..d0c63fd 100644 --- a/test/Cloudflare.Tests/CloudflareClientTests/PatchAsyncTest.cs +++ b/test/Cloudflare.Tests/CloudflareClientTests/PatchAsyncTest.cs @@ -12,11 +12,13 @@ using AMWD.Net.Api.Cloudflare; using Moq; using Moq.Protected; -namespace Cloudflare.Core.Tests.CloudflareClientTests +namespace Cloudflare.Tests.CloudflareClientTests { [TestClass] public class PatchAsyncTest { + public TestContext TestContext { get; set; } + private const string BaseUrl = "https://localhost/api/v4/"; private HttpMessageHandlerMock _httpHandlerMock; @@ -52,46 +54,46 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests } [TestMethod] - [ExpectedException(typeof(ObjectDisposedException))] public async Task ShouldThrowDisposed() { // Arrange var client = GetClient() as CloudflareClient; client.Dispose(); - // Act - await client.PatchAsync("test", _request); - - // Assert - ObjectDisposedException + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.PatchAsync("test", _request, TestContext.CancellationTokenSource.Token); + }); } [TestMethod] [DataRow(null)] [DataRow("")] [DataRow(" ")] - [ExpectedException(typeof(ArgumentNullException))] public async Task ShouldThrowArgumentNullOnRequestPath(string path) { // Arrange var client = GetClient(); - // Act - await client.PatchAsync(path, _request); - - // Assert - ArgumentNullException + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.PatchAsync(path, _request, TestContext.CancellationTokenSource.Token); + }); } [TestMethod] - [ExpectedException(typeof(ArgumentException))] public async Task ShouldThrowArgumentOnRequestPath() { // Arrange var client = GetClient(); - // Act - await client.PatchAsync("foo?bar=baz", _request); - - // Assert - ArgumentException + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.PatchAsync("foo?bar=baz", _request, TestContext.CancellationTokenSource.Token); + }); } [TestMethod] @@ -107,7 +109,7 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); // Act - var response = await client.PatchAsync("test", _request); + var response = await client.PatchAsync("test", _request, TestContext.CancellationTokenSource.Token); // Assert Assert.IsNotNull(response); @@ -116,21 +118,21 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests Assert.IsNotNull(response.Messages); Assert.IsNull(response.ResultInfo); - Assert.AreEqual(0, response.Errors.Count); - Assert.AreEqual(0, response.Messages.Count); + Assert.IsEmpty(response.Errors); + Assert.IsEmpty(response.Messages); Assert.IsNotNull(response.Result); Assert.AreEqual("some-string", response.Result.Str); Assert.AreEqual(123, response.Result.Int); - Assert.AreEqual(1, _httpHandlerMock.Callbacks.Count); + Assert.HasCount(1, _httpHandlerMock.Callbacks); var callback = _httpHandlerMock.Callbacks.First(); Assert.AreEqual(HttpMethod.Patch, callback.Method); Assert.AreEqual("https://localhost/api/v4/test", callback.Url); Assert.AreEqual(@"{""string"":""Happy Testing!"",""integer"":54321}", callback.Content); - Assert.AreEqual(3, callback.Headers.Count); + Assert.HasCount(3, callback.Headers); Assert.IsTrue(callback.Headers.ContainsKey("Accept")); Assert.IsTrue(callback.Headers.ContainsKey("Authorization")); Assert.IsTrue(callback.Headers.ContainsKey("User-Agent")); @@ -159,7 +161,7 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); // Act - var response = await client.PatchAsync("test", stringContent); + var response = await client.PatchAsync("test", stringContent, TestContext.CancellationTokenSource.Token); // Assert Assert.IsNotNull(response); @@ -168,21 +170,21 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests Assert.IsNotNull(response.Messages); Assert.IsNull(response.ResultInfo); - Assert.AreEqual(0, response.Errors.Count); - Assert.AreEqual(0, response.Messages.Count); + Assert.IsEmpty(response.Errors); + Assert.IsEmpty(response.Messages); Assert.IsNotNull(response.Result); Assert.AreEqual("some-string", response.Result.Str); Assert.AreEqual(123, response.Result.Int); - Assert.AreEqual(1, _httpHandlerMock.Callbacks.Count); + Assert.HasCount(1, _httpHandlerMock.Callbacks); var callback = _httpHandlerMock.Callbacks.First(); Assert.AreEqual(HttpMethod.Patch, callback.Method); Assert.AreEqual("https://localhost/api/v4/test", callback.Url); Assert.AreEqual(@"{""test"":""HERE ?""}", callback.Content); - Assert.AreEqual(3, callback.Headers.Count); + Assert.HasCount(3, callback.Headers); Assert.IsTrue(callback.Headers.ContainsKey("Accept")); Assert.IsTrue(callback.Headers.ContainsKey("Authorization")); Assert.IsTrue(callback.Headers.ContainsKey("User-Agent")); @@ -211,18 +213,13 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); - try + var ex = await Assert.ThrowsExactlyAsync(async () => { - // Act - await client.PatchAsync("foo", _request); - Assert.Fail(); - } - catch (AuthenticationException ex) - { - // Assert - Assert.IsNull(ex.InnerException); - Assert.AreEqual($"4711: foo & baz.{Environment.NewLine}4712: Happy Error!", ex.Message); - } + await client.PatchAsync("foo", _request, TestContext.CancellationTokenSource.Token); + }); + // Assert + Assert.IsNull(ex.InnerException); + Assert.AreEqual($"4711: foo & baz.{Environment.NewLine}4712: Happy Error!", ex.Message); } [TestMethod] @@ -239,7 +236,7 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); // Act - var response = await client.PatchAsync("some-awesome-path", _request); + var response = await client.PatchAsync("some-awesome-path", _request, TestContext.CancellationTokenSource.Token); // Assert Assert.IsNotNull(response); @@ -250,14 +247,14 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests Assert.AreEqual("This is an awesome text ;-)", response.Result); - Assert.AreEqual(1, _httpHandlerMock.Callbacks.Count); + Assert.HasCount(1, _httpHandlerMock.Callbacks); var callback = _httpHandlerMock.Callbacks.First(); Assert.AreEqual(HttpMethod.Patch, callback.Method); Assert.AreEqual("https://localhost/api/v4/some-awesome-path?bar=08%2F15", callback.Url); Assert.AreEqual(@"{""string"":""Happy Testing!"",""integer"":54321}", callback.Content); - Assert.AreEqual(3, callback.Headers.Count); + Assert.HasCount(3, callback.Headers); Assert.IsTrue(callback.Headers.ContainsKey("Accept")); Assert.IsTrue(callback.Headers.ContainsKey("Authorization")); Assert.IsTrue(callback.Headers.ContainsKey("User-Agent")); @@ -283,7 +280,6 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests } [TestMethod] - [ExpectedException(typeof(JsonReaderException))] public async Task ShouldThrowExceptionOnInvalidResponse() { // Arrange @@ -295,8 +291,11 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); - // Act - await client.PatchAsync("some-path", _request); + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.PatchAsync("some-path", _request, TestContext.CancellationTokenSource.Token); + }); } private void VerifyDefaults() diff --git a/test/Cloudflare.Tests/CloudflareClientTests/PostAsyncTest.cs b/test/Cloudflare.Tests/CloudflareClientTests/PostAsyncTest.cs index 2b97170..71fea5a 100644 --- a/test/Cloudflare.Tests/CloudflareClientTests/PostAsyncTest.cs +++ b/test/Cloudflare.Tests/CloudflareClientTests/PostAsyncTest.cs @@ -12,11 +12,13 @@ using AMWD.Net.Api.Cloudflare; using Moq; using Moq.Protected; -namespace Cloudflare.Core.Tests.CloudflareClientTests +namespace Cloudflare.Tests.CloudflareClientTests { [TestClass] public class PostAsyncTest { + public TestContext TestContext { get; set; } + private const string BaseUrl = "https://localhost/api/v4/"; private HttpMessageHandlerMock _httpHandlerMock; @@ -52,46 +54,46 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests } [TestMethod] - [ExpectedException(typeof(ObjectDisposedException))] public async Task ShouldThrowDisposed() { // Arrange var client = GetClient() as CloudflareClient; client.Dispose(); - // Act - await client.PostAsync("test", _request); - - // Assert - ObjectDisposedException + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.PostAsync("test", _request, cancellationToken: TestContext.CancellationTokenSource.Token); + }); } [TestMethod] [DataRow(null)] [DataRow("")] [DataRow(" ")] - [ExpectedException(typeof(ArgumentNullException))] public async Task ShouldThrowArgumentNullOnRequestPath(string path) { // Arrange var client = GetClient(); - // Act - await client.PostAsync(path, _request); - - // Assert - ArgumentNullException + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.PostAsync(path, _request, cancellationToken: TestContext.CancellationTokenSource.Token); + }); } [TestMethod] - [ExpectedException(typeof(ArgumentException))] public async Task ShouldThrowArgumentOnRequestPath() { // Arrange var client = GetClient(); - // Act - await client.PostAsync("foo?bar=baz", _request); - - // Assert - ArgumentException + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.PostAsync("foo?bar=baz", _request, cancellationToken: TestContext.CancellationTokenSource.Token); + }); } [TestMethod] @@ -107,7 +109,7 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); // Act - var response = await client.PostAsync("test", _request); + var response = await client.PostAsync("test", _request, cancellationToken: TestContext.CancellationTokenSource.Token); // Assert Assert.IsNotNull(response); @@ -116,21 +118,21 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests Assert.IsNotNull(response.Messages); Assert.IsNull(response.ResultInfo); - Assert.AreEqual(0, response.Errors.Count); - Assert.AreEqual(0, response.Messages.Count); + Assert.IsEmpty(response.Errors); + Assert.IsEmpty(response.Messages); Assert.IsNotNull(response.Result); Assert.AreEqual("some-string", response.Result.Str); Assert.AreEqual(123, response.Result.Int); - Assert.AreEqual(1, _httpHandlerMock.Callbacks.Count); + Assert.HasCount(1, _httpHandlerMock.Callbacks); var callback = _httpHandlerMock.Callbacks.First(); Assert.AreEqual(HttpMethod.Post, callback.Method); Assert.AreEqual("https://localhost/api/v4/test", callback.Url); Assert.AreEqual(@"{""string"":""Happy Testing!"",""integer"":54321}", callback.Content); - Assert.AreEqual(3, callback.Headers.Count); + Assert.HasCount(3, callback.Headers); Assert.IsTrue(callback.Headers.ContainsKey("Accept")); Assert.IsTrue(callback.Headers.ContainsKey("Authorization")); Assert.IsTrue(callback.Headers.ContainsKey("User-Agent")); @@ -159,7 +161,7 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); // Act - var response = await client.PostAsync("test", stringContent); + var response = await client.PostAsync("test", stringContent, cancellationToken: TestContext.CancellationTokenSource.Token); // Assert Assert.IsNotNull(response); @@ -168,21 +170,21 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests Assert.IsNotNull(response.Messages); Assert.IsNull(response.ResultInfo); - Assert.AreEqual(0, response.Errors.Count); - Assert.AreEqual(0, response.Messages.Count); + Assert.IsEmpty(response.Errors); + Assert.IsEmpty(response.Messages); Assert.IsNotNull(response.Result); Assert.AreEqual("some-string", response.Result.Str); Assert.AreEqual(123, response.Result.Int); - Assert.AreEqual(1, _httpHandlerMock.Callbacks.Count); + Assert.HasCount(1, _httpHandlerMock.Callbacks); var callback = _httpHandlerMock.Callbacks.First(); Assert.AreEqual(HttpMethod.Post, callback.Method); Assert.AreEqual("https://localhost/api/v4/test", callback.Url); Assert.AreEqual(@"{""test"":""HERE ?""}", callback.Content); - Assert.AreEqual(3, callback.Headers.Count); + Assert.HasCount(3, callback.Headers); Assert.IsTrue(callback.Headers.ContainsKey("Accept")); Assert.IsTrue(callback.Headers.ContainsKey("Authorization")); Assert.IsTrue(callback.Headers.ContainsKey("User-Agent")); @@ -210,7 +212,7 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); // Act - var response = await client.PostAsync("posting", null); + var response = await client.PostAsync("posting", null, cancellationToken: TestContext.CancellationTokenSource.Token); // Assert Assert.IsNotNull(response); @@ -219,21 +221,21 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests Assert.IsNotNull(response.Messages); Assert.IsNull(response.ResultInfo); - Assert.AreEqual(0, response.Errors.Count); - Assert.AreEqual(0, response.Messages.Count); + Assert.IsEmpty(response.Errors); + Assert.IsEmpty(response.Messages); Assert.IsNotNull(response.Result); Assert.AreEqual("some-string", response.Result.Str); Assert.AreEqual(123, response.Result.Int); - Assert.AreEqual(1, _httpHandlerMock.Callbacks.Count); + Assert.HasCount(1, _httpHandlerMock.Callbacks); var callback = _httpHandlerMock.Callbacks.First(); Assert.AreEqual(HttpMethod.Post, callback.Method); Assert.AreEqual("https://localhost/api/v4/posting", callback.Url); Assert.IsNull(callback.Content); - Assert.AreEqual(3, callback.Headers.Count); + Assert.HasCount(3, callback.Headers); Assert.IsTrue(callback.Headers.ContainsKey("Accept")); Assert.IsTrue(callback.Headers.ContainsKey("Authorization")); Assert.IsTrue(callback.Headers.ContainsKey("User-Agent")); @@ -259,18 +261,13 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); - try + // Act & Assert + var ex = await Assert.ThrowsExactlyAsync(async () => { - // Act - await client.PostAsync("foo", _request); - Assert.Fail(); - } - catch (AuthenticationException ex) - { - // Assert - Assert.IsNull(ex.InnerException); - Assert.AreEqual($"4711: foo & baz.{Environment.NewLine}4712: Happy Error!", ex.Message); - } + await client.PostAsync("foo", _request, cancellationToken: TestContext.CancellationTokenSource.Token); + }); + Assert.IsNull(ex.InnerException); + Assert.AreEqual($"4711: foo & baz.{Environment.NewLine}4712: Happy Error!", ex.Message); } [TestMethod] @@ -287,7 +284,7 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); // Act - var response = await client.PostAsync("some-awesome-path", _request); + var response = await client.PostAsync("some-awesome-path", _request, cancellationToken: TestContext.CancellationTokenSource.Token); // Assert Assert.IsNotNull(response); @@ -298,14 +295,14 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests Assert.AreEqual("This is an awesome text ;-)", response.Result); - Assert.AreEqual(1, _httpHandlerMock.Callbacks.Count); + Assert.HasCount(1, _httpHandlerMock.Callbacks); var callback = _httpHandlerMock.Callbacks.First(); Assert.AreEqual(HttpMethod.Post, callback.Method); Assert.AreEqual("https://localhost/api/v4/some-awesome-path?bar=08%2F15", callback.Url); Assert.AreEqual(@"{""string"":""Happy Testing!"",""integer"":54321}", callback.Content); - Assert.AreEqual(3, callback.Headers.Count); + Assert.HasCount(3, callback.Headers); Assert.IsTrue(callback.Headers.ContainsKey("Accept")); Assert.IsTrue(callback.Headers.ContainsKey("Authorization")); Assert.IsTrue(callback.Headers.ContainsKey("User-Agent")); @@ -331,7 +328,6 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests } [TestMethod] - [ExpectedException(typeof(JsonReaderException))] public async Task ShouldThrowExceptionOnInvalidResponse() { // Arrange @@ -343,8 +339,11 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); - // Act - await client.PostAsync("some-path", _request); + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.PostAsync("some-path", _request, cancellationToken: TestContext.CancellationTokenSource.Token); + }); } [TestMethod] @@ -361,7 +360,7 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); // Act - var response = await client.PostAsync("path", _request); + var response = await client.PostAsync("path", _request, cancellationToken: TestContext.CancellationTokenSource.Token); // Assert Assert.IsNotNull(response); @@ -372,14 +371,14 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests Assert.AreEqual("This is an awesome text ;-)", response.Result); - Assert.AreEqual(1, _httpHandlerMock.Callbacks.Count); + Assert.HasCount(1, _httpHandlerMock.Callbacks); var callback = _httpHandlerMock.Callbacks.First(); Assert.AreEqual(HttpMethod.Post, callback.Method); Assert.AreEqual("https://localhost/api/v4/path", callback.Url); Assert.AreEqual(@"{""integer"":54321}", callback.Content); - Assert.AreEqual(3, callback.Headers.Count); + Assert.HasCount(3, callback.Headers); Assert.IsTrue(callback.Headers.ContainsKey("Accept")); Assert.IsTrue(callback.Headers.ContainsKey("Authorization")); Assert.IsTrue(callback.Headers.ContainsKey("User-Agent")); diff --git a/test/Cloudflare.Tests/CloudflareClientTests/PutAsyncTest.cs b/test/Cloudflare.Tests/CloudflareClientTests/PutAsyncTest.cs index 55501c3..e7bc559 100644 --- a/test/Cloudflare.Tests/CloudflareClientTests/PutAsyncTest.cs +++ b/test/Cloudflare.Tests/CloudflareClientTests/PutAsyncTest.cs @@ -12,11 +12,13 @@ using AMWD.Net.Api.Cloudflare; using Moq; using Moq.Protected; -namespace Cloudflare.Core.Tests.CloudflareClientTests +namespace Cloudflare.Tests.CloudflareClientTests { [TestClass] public class PutAsyncTest { + public TestContext TestContext { get; set; } + private const string BaseUrl = "https://localhost/api/v4/"; private HttpMessageHandlerMock _httpHandlerMock; @@ -52,46 +54,46 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests } [TestMethod] - [ExpectedException(typeof(ObjectDisposedException))] public async Task ShouldThrowDisposed() { // Arrange var client = GetClient() as CloudflareClient; client.Dispose(); - // Act - await client.PutAsync("test", _request); - - // Assert - ObjectDisposedException + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.PutAsync("test", _request, TestContext.CancellationTokenSource.Token); + }); } [TestMethod] [DataRow(null)] [DataRow("")] [DataRow(" ")] - [ExpectedException(typeof(ArgumentNullException))] public async Task ShouldThrowArgumentNullOnRequestPath(string path) { // Arrange var client = GetClient(); - // Act - await client.PutAsync(path, _request); - - // Assert - ArgumentNullException + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.PutAsync(path, _request, TestContext.CancellationTokenSource.Token); + }); } [TestMethod] - [ExpectedException(typeof(ArgumentException))] public async Task ShouldThrowArgumentOnRequestPath() { // Arrange var client = GetClient(); - // Act - await client.PutAsync("foo?bar=baz", _request); - - // Assert - ArgumentException + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.PutAsync("foo?bar=baz", _request, TestContext.CancellationTokenSource.Token); + }); } [TestMethod] @@ -107,7 +109,7 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); // Act - var response = await client.PutAsync("test", _request); + var response = await client.PutAsync("test", _request, TestContext.CancellationTokenSource.Token); // Assert Assert.IsNotNull(response); @@ -116,21 +118,21 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests Assert.IsNotNull(response.Messages); Assert.IsNull(response.ResultInfo); - Assert.AreEqual(0, response.Errors.Count); - Assert.AreEqual(0, response.Messages.Count); + Assert.IsEmpty(response.Errors); + Assert.IsEmpty(response.Messages); Assert.IsNotNull(response.Result); Assert.AreEqual("some-string", response.Result.Str); Assert.AreEqual(123, response.Result.Int); - Assert.AreEqual(1, _httpHandlerMock.Callbacks.Count); + Assert.HasCount(1, _httpHandlerMock.Callbacks); var callback = _httpHandlerMock.Callbacks.First(); Assert.AreEqual(HttpMethod.Put, callback.Method); Assert.AreEqual("https://localhost/api/v4/test", callback.Url); Assert.AreEqual(@"{""string"":""Happy Testing!"",""integer"":54321}", callback.Content); - Assert.AreEqual(3, callback.Headers.Count); + Assert.HasCount(3, callback.Headers); Assert.IsTrue(callback.Headers.ContainsKey("Accept")); Assert.IsTrue(callback.Headers.ContainsKey("Authorization")); Assert.IsTrue(callback.Headers.ContainsKey("User-Agent")); @@ -159,7 +161,7 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); // Act - var response = await client.PutAsync("test", stringContent); + var response = await client.PutAsync("test", stringContent, TestContext.CancellationTokenSource.Token); // Assert Assert.IsNotNull(response); @@ -168,21 +170,21 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests Assert.IsNotNull(response.Messages); Assert.IsNull(response.ResultInfo); - Assert.AreEqual(0, response.Errors.Count); - Assert.AreEqual(0, response.Messages.Count); + Assert.IsEmpty(response.Errors); + Assert.IsEmpty(response.Messages); Assert.IsNotNull(response.Result); Assert.AreEqual("some-string", response.Result.Str); Assert.AreEqual(123, response.Result.Int); - Assert.AreEqual(1, _httpHandlerMock.Callbacks.Count); + Assert.HasCount(1, _httpHandlerMock.Callbacks); var callback = _httpHandlerMock.Callbacks.First(); Assert.AreEqual(HttpMethod.Put, callback.Method); Assert.AreEqual("https://localhost/api/v4/test", callback.Url); Assert.AreEqual(@"{""test"":""HERE ?""}", callback.Content); - Assert.AreEqual(3, callback.Headers.Count); + Assert.HasCount(3, callback.Headers); Assert.IsTrue(callback.Headers.ContainsKey("Accept")); Assert.IsTrue(callback.Headers.ContainsKey("Authorization")); Assert.IsTrue(callback.Headers.ContainsKey("User-Agent")); @@ -210,7 +212,7 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); // Act - var response = await client.PutAsync("putput", null); + var response = await client.PutAsync("putput", null, TestContext.CancellationTokenSource.Token); // Assert Assert.IsNotNull(response); @@ -219,21 +221,21 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests Assert.IsNotNull(response.Messages); Assert.IsNull(response.ResultInfo); - Assert.AreEqual(0, response.Errors.Count); - Assert.AreEqual(0, response.Messages.Count); + Assert.IsEmpty(response.Errors); + Assert.IsEmpty(response.Messages); Assert.IsNotNull(response.Result); Assert.AreEqual("some-string", response.Result.Str); Assert.AreEqual(123, response.Result.Int); - Assert.AreEqual(1, _httpHandlerMock.Callbacks.Count); + Assert.HasCount(1, _httpHandlerMock.Callbacks); var callback = _httpHandlerMock.Callbacks.First(); Assert.AreEqual(HttpMethod.Put, callback.Method); Assert.AreEqual("https://localhost/api/v4/putput", callback.Url); Assert.IsNull(callback.Content); - Assert.AreEqual(3, callback.Headers.Count); + Assert.HasCount(3, callback.Headers); Assert.IsTrue(callback.Headers.ContainsKey("Accept")); Assert.IsTrue(callback.Headers.ContainsKey("Authorization")); Assert.IsTrue(callback.Headers.ContainsKey("User-Agent")); @@ -262,7 +264,7 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests try { // Act - await client.PutAsync("foo", _request); + await client.PutAsync("foo", _request, TestContext.CancellationTokenSource.Token); Assert.Fail(); } catch (AuthenticationException ex) @@ -287,7 +289,7 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); // Act - var response = await client.PutAsync("some-awesome-path", _request); + var response = await client.PutAsync("some-awesome-path", _request, TestContext.CancellationTokenSource.Token); // Assert Assert.IsNotNull(response); @@ -298,14 +300,14 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests Assert.AreEqual("This is an awesome text ;-)", response.Result); - Assert.AreEqual(1, _httpHandlerMock.Callbacks.Count); + Assert.HasCount(1, _httpHandlerMock.Callbacks); var callback = _httpHandlerMock.Callbacks.First(); Assert.AreEqual(HttpMethod.Put, callback.Method); Assert.AreEqual("https://localhost/api/v4/some-awesome-path?bar=08%2F15", callback.Url); Assert.AreEqual(@"{""string"":""Happy Testing!"",""integer"":54321}", callback.Content); - Assert.AreEqual(3, callback.Headers.Count); + Assert.HasCount(3, callback.Headers); Assert.IsTrue(callback.Headers.ContainsKey("Accept")); Assert.IsTrue(callback.Headers.ContainsKey("Authorization")); Assert.IsTrue(callback.Headers.ContainsKey("User-Agent")); @@ -331,7 +333,6 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests } [TestMethod] - [ExpectedException(typeof(JsonReaderException))] public async Task ShouldThrowExceptionOnInvalidResponse() { // Arrange @@ -343,8 +344,11 @@ namespace Cloudflare.Core.Tests.CloudflareClientTests var client = GetClient(); - // Act - await client.PutAsync("some-path", _request); + // Act & Assert + await Assert.ThrowsExactlyAsync(async () => + { + await client.PutAsync("some-path", _request, TestContext.CancellationTokenSource.Token); + }); } private void VerifyDefaults() diff --git a/test/Cloudflare.Tests/Extensions/EnumExtensionsTest.cs b/test/Cloudflare.Tests/Extensions/EnumExtensionsTest.cs index 570543e..5904762 100644 --- a/test/Cloudflare.Tests/Extensions/EnumExtensionsTest.cs +++ b/test/Cloudflare.Tests/Extensions/EnumExtensionsTest.cs @@ -1,7 +1,7 @@ using System.Runtime.Serialization; using AMWD.Net.Api.Cloudflare; -namespace Cloudflare.Core.Tests.Extensions +namespace Cloudflare.Tests.Extensions { [TestClass] public class EnumExtensionsTest diff --git a/test/Cloudflare.Tests/Extensions/StringExtensionsTest.cs b/test/Cloudflare.Tests/Extensions/StringExtensionsTest.cs index 3cc5339..a3745aa 100644 --- a/test/Cloudflare.Tests/Extensions/StringExtensionsTest.cs +++ b/test/Cloudflare.Tests/Extensions/StringExtensionsTest.cs @@ -1,5 +1,4 @@ -using System; -using AMWD.Net.Api.Cloudflare; +using AMWD.Net.Api.Cloudflare; namespace Cloudflare.Tests.Extensions { @@ -22,43 +21,34 @@ namespace Cloudflare.Tests.Extensions [DataRow(null)] [DataRow("")] [DataRow(" ")] - [ExpectedException(typeof(ArgumentNullException))] public void ShouldThrowArgumentNullExceptionForValidateId(string name) { // Arrange - // Act - name.ValidateCloudflareId(); - - // Assert - ArgumentNullException + // Act & Assert + Assert.ThrowsExactly(() => name.ValidateCloudflareId()); } [TestMethod] - [ExpectedException(typeof(ArgumentException))] public void ShouldThrowArgumentOutOfRangeExceptionForValidateId() { // Arrange string id = new('a', 33); - // Act - id.ValidateCloudflareId(); - - // Assert - ArgumentException + // Act & Assert + Assert.ThrowsExactly(() => id.ValidateCloudflareId()); } [TestMethod] [DataRow("023e105f4ecef8ad9ca31a8372d0c35")] [DataRow("023e105f4ecef8ad9ca31a8372d0C353")] [DataRow("023e105f4ecef8ad9ca31a8372d0y353")] - [ExpectedException(typeof(ArgumentException))] public void ShouldThrowArgumentExceptionForValidateId(string id) { // Arrange - // Act - id.ValidateCloudflareId(); - - // Assert - ArgumentException + // Act & Assert + Assert.ThrowsExactly(() => id.ValidateCloudflareId()); } [TestMethod] @@ -77,28 +67,22 @@ namespace Cloudflare.Tests.Extensions [DataRow(null)] [DataRow("")] [DataRow(" ")] - [ExpectedException(typeof(ArgumentNullException))] public void ShouldThrowArgumentNullExceptionForValidateName(string name) { // Arrange - // Act - name.ValidateCloudflareName(); - - // Assert - ArgumentNullException + // Act & Assert + Assert.ThrowsExactly(() => name.ValidateCloudflareName()); } [TestMethod] - [ExpectedException(typeof(ArgumentException))] public void ShouldThrowArgumentOutOfRangeExceptionForValidateName() { // Arrange string name = new('a', 254); - // Act - name.ValidateCloudflareName(); - - // Assert - ArgumentException + // Act & Assert + Assert.ThrowsExactly(() => name.ValidateCloudflareName()); } [TestMethod] @@ -117,30 +101,24 @@ namespace Cloudflare.Tests.Extensions [DataRow(null)] [DataRow("")] [DataRow(" ")] - [ExpectedException(typeof(ArgumentNullException))] public void ShouldThrowArgumentNullExceptionForValidateEmail(string email) { // Arrange - // Act - email.ValidateCloudflareEmailAddress(); - - // Assert - ArgumentNullException + // Act & Assert + Assert.ThrowsExactly(() => email.ValidateCloudflareEmailAddress()); } [TestMethod] [DataRow("test")] [DataRow("test@example")] [DataRow("example.com")] - [ExpectedException(typeof(ArgumentException))] public void ShouldThrowArgumentExceptionForValidateEmail(string email) { // Arrange - // Act - email.ValidateCloudflareEmailAddress(); - - // Assert - ArgumentException + // Act & Assert + Assert.ThrowsExactly(() => email.ValidateCloudflareEmailAddress()); } [TestMethod] @@ -157,16 +135,13 @@ namespace Cloudflare.Tests.Extensions } [TestMethod] - [ExpectedException(typeof(ArgumentException))] public void ShouldThrowArgumentExceptionForValidateLength() { // Arrange string str = "SomeExampleString"; - // Act - str.ValidateLength(10, nameof(str)); - - // Assert - ArgumentException + // Act & Assert + Assert.ThrowsExactly(() => str.ValidateLength(10, nameof(str))); } } } diff --git a/test/Cloudflare.Tests/MessageHandlerMock.cs b/test/Cloudflare.Tests/MessageHandlerMock.cs index 45ac95c..8f642c2 100644 --- a/test/Cloudflare.Tests/MessageHandlerMock.cs +++ b/test/Cloudflare.Tests/MessageHandlerMock.cs @@ -1,12 +1,11 @@ -using System.Collections.Generic; -using System.Linq; +using System.Linq; using System.Net.Http; using System.Threading; using System.Threading.Tasks; using Moq; using Moq.Protected; -namespace Cloudflare.Core.Tests +namespace Cloudflare.Tests { internal class HttpMessageHandlerMock { @@ -25,11 +24,11 @@ namespace Cloudflare.Core.Tests }; if (request.Content != null) - callback.Content = await request.Content.ReadAsStringAsync(); + callback.Content = await request.Content.ReadAsStringAsync(ct); Callbacks.Add(callback); }) - .ReturnsAsync(() => Responses.Dequeue()); + .ReturnsAsync(Responses.Dequeue); } public List Callbacks { get; } = [];