From e23325aa839a270fe786292410998ac523e1e1a7 Mon Sep 17 00:00:00 2001 From: sanych-sun Date: Thu, 16 Mar 2023 15:20:54 -0700 Subject: [PATCH] Unit tests --- .../DelegatePublishMiddleware.cs | 5 ++ .../DelegateReturnMiddleware.cs | 5 ++ .../DelegatePublishMiddlewareTests.cs | 71 +++++++++++++++++++ .../DelegateReturnMiddlewareTests.cs | 71 +++++++++++++++++++ 4 files changed, 152 insertions(+) create mode 100644 tests/RabbitMQ.Next.Tests/Publisher/DelegatePublishMiddlewareTests.cs create mode 100644 tests/RabbitMQ.Next.Tests/Publisher/DelegateReturnMiddlewareTests.cs diff --git a/src/RabbitMQ.Next.Publisher.Abstractions/DelegatePublishMiddleware.cs b/src/RabbitMQ.Next.Publisher.Abstractions/DelegatePublishMiddleware.cs index f87cfb3f..006486c8 100644 --- a/src/RabbitMQ.Next.Publisher.Abstractions/DelegatePublishMiddleware.cs +++ b/src/RabbitMQ.Next.Publisher.Abstractions/DelegatePublishMiddleware.cs @@ -16,6 +16,11 @@ public DelegatePublishMiddleware(IPublishMiddleware next, Action { throw new ArgumentNullException(nameof(middleware)); } + + if (next == null) + { + throw new ArgumentNullException(nameof(next)); + } this.next = next; this.middleware = middleware; diff --git a/tests/RabbitMQ.Next.Tests/Publisher/DelegatePublishMiddlewareTests.cs b/tests/RabbitMQ.Next.Tests/Publisher/DelegatePublishMiddlewareTests.cs new file mode 100644 index 00000000..91ce4f62 --- /dev/null +++ b/tests/RabbitMQ.Next.Tests/Publisher/DelegatePublishMiddlewareTests.cs @@ -0,0 +1,71 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using NSubstitute; +using RabbitMQ.Next.Publisher; +using Xunit; + +namespace RabbitMQ.Next.Tests.Publisher; + +public class DelegatePublishMiddlewareTests +{ + [Fact] + public void ThrowsOnEmptyNext() + { + var handler = Substitute.For>(); + + Assert.Throws(() => new DelegatePublishMiddleware(null, handler)); + } + + [Fact] + public void ThrowsOnEmptyHandler() + { + var next = Substitute.For(); + + Assert.Throws(() => new DelegatePublishMiddleware(next, null)); + } + + [Fact] + public void ThrowsOnCancellation() + { + var handler = Substitute.For>(); + var next = Substitute.For(); + + var message = Substitute.For(); + var middleware = new DelegatePublishMiddleware(next, handler); + var cancellation = new CancellationTokenSource(); + cancellation.Cancel(); + + Assert.ThrowsAnyAsync(async () => await middleware.InvokeAsync("test", message, cancellation.Token)); + handler.DidNotReceive().Invoke(Arg.Any(), Arg.Any()); + next.DidNotReceive().InvokeAsync(Arg.Any(), Arg.Any(), Arg.Any()); + } + + [Fact] + public async Task ShouldCallHandler() + { + var handler = Substitute.For>(); + var next = Substitute.For(); + + var message = Substitute.For(); + var middleware = new DelegatePublishMiddleware(next, handler); + + await middleware.InvokeAsync("test", message, default); + + handler.Received().Invoke("test", message); + } + + [Fact] + public async Task ShouldCallNext() + { + var handler = Substitute.For>(); + var next = Substitute.For(); + + var message = Substitute.For(); + var middleware = new DelegatePublishMiddleware(next, handler); + + await middleware.InvokeAsync("test", message, default); + + await next.Received().InvokeAsync("test", message, Arg.Any()); + } +} \ No newline at end of file diff --git a/tests/RabbitMQ.Next.Tests/Publisher/DelegateReturnMiddlewareTests.cs b/tests/RabbitMQ.Next.Tests/Publisher/DelegateReturnMiddlewareTests.cs new file mode 100644 index 00000000..df300cbf --- /dev/null +++ b/tests/RabbitMQ.Next.Tests/Publisher/DelegateReturnMiddlewareTests.cs @@ -0,0 +1,71 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using NSubstitute; +using RabbitMQ.Next.Publisher; +using Xunit; + +namespace RabbitMQ.Next.Tests.Publisher; + +public class DelegateReturnMiddlewareTests +{ + [Fact] + public void ThrowsOnEmptyNext() + { + var handler = Substitute.For>(); + + Assert.Throws(() => new DelegateReturnMiddleware(null, handler)); + } + + [Fact] + public void ThrowsOnEmptyHandler() + { + var next = Substitute.For(); + + Assert.Throws(() => new DelegateReturnMiddleware(next, null)); + } + + [Fact] + public void ThrowsOnCancellation() + { + var handler = Substitute.For>(); + var next = Substitute.For(); + + var message = Substitute.For(); + var middleware = new DelegateReturnMiddleware(next, handler); + var cancellation = new CancellationTokenSource(); + cancellation.Cancel(); + + Assert.ThrowsAnyAsync(async () => await middleware.InvokeAsync(message, cancellation.Token)); + handler.DidNotReceive().Invoke(Arg.Any()); + next.DidNotReceive().InvokeAsync(Arg.Any(), Arg.Any()); + } + + [Fact] + public async Task ShouldCallHandler() + { + var handler = Substitute.For>(); + var next = Substitute.For(); + + var message = Substitute.For(); + var middleware = new DelegateReturnMiddleware(next, handler); + + await middleware.InvokeAsync(message, default); + + handler.Received().Invoke(message); + } + + [Fact] + public async Task ShouldCallNext() + { + var handler = Substitute.For>(); + var next = Substitute.For(); + + var message = Substitute.For(); + var middleware = new DelegateReturnMiddleware(next, handler); + + await middleware.InvokeAsync(message, default); + + await next.Received().InvokeAsync(message, Arg.Any()); + } +} \ No newline at end of file