Skip to content
This repository was archived by the owner on Apr 29, 2022. It is now read-only.

Commit f1f438b

Browse files
author
Anton Vorontsov
committed
Set up some DI logic tests
1 parent 67c5ed8 commit f1f438b

File tree

8 files changed

+152
-6
lines changed

8 files changed

+152
-6
lines changed

readme.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,10 +175,6 @@ Exchange sections define how to bind queues and exchanges with each other using
175175

176176
For more information about `appsettings.json` and manual configuration features, see [rabbit-configuration](./docs/rabbit-configuration.md) and [exchange-configuration](./docs/exchange-configuration.md) documentation files.
177177

178-
## Versioning
179-
180-
For now this project uses semantic versioning that follows .Net Core versioning. That means that major and minor versions are equal to .Net Core major and minor versions but patch versions will be used independently.
181-
182178
## Changelog
183179

184180
All notable changes are being tracked in the [changelog](./docs/changelog.md) file.

src/RabbitMQ.Client.Core.DependencyInjection/MessageHandlerDependencyInjectionExtensions.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -840,8 +840,9 @@ static void MessageHandlerOrderingModelExists<TImplementation>(IServiceCollectio
840840
{
841841
var messageHandlerOrderingModel = services.FirstOrDefault(x => x.ServiceType == typeof(MessageHandlerOrderingModel)
842842
&& x.Lifetime == ServiceLifetime.Singleton
843-
&& x.ImplementationType == typeof(TImplementation)
844-
&& string.Equals(((MessageHandlerOrderingModel)x.ImplementationInstance).Exchange, exchange, StringComparison.OrdinalIgnoreCase)
843+
&& ((MessageHandlerOrderingModel)x.ImplementationInstance).MessageHandlerType == typeof(TImplementation)
844+
&& (string.Equals(((MessageHandlerOrderingModel)x.ImplementationInstance).Exchange, exchange, StringComparison.OrdinalIgnoreCase)
845+
|| (exchange is null && ((MessageHandlerOrderingModel)x.ImplementationInstance).Exchange is null))
845846
&& ((MessageHandlerOrderingModel)x.ImplementationInstance).Order != order
846847
&& routePatterns.Intersect(((MessageHandlerOrderingModel)x.ImplementationInstance).RoutePatterns).Any());
847848
if (messageHandlerOrderingModel is null)
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
using Microsoft.Extensions.DependencyInjection;
4+
using RabbitMQ.Client.Core.DependencyInjection.Tests.UnitTests.Stubs;
5+
using Xunit;
6+
7+
namespace RabbitMQ.Client.Core.DependencyInjection.Tests.UnitTests
8+
{
9+
public class MessageHandlerDependencyInjectionExtensionsTests
10+
{
11+
[Fact]
12+
public async Task ShouldProperlyThrowExceptionWhenRegisteringSameMessageHandlerTwiceForOneRoutingKeyWithDifferentOrder()
13+
{
14+
await Assert.ThrowsAsync<ArgumentException>(() =>
15+
{
16+
new ServiceCollection()
17+
.AddMessageHandlerTransient<StubMessageHandler>("routing.key", 0)
18+
.AddMessageHandlerTransient<StubMessageHandler>("routing.key", 1);
19+
return Task.CompletedTask;
20+
});
21+
}
22+
23+
[Fact]
24+
public async Task ShouldProperlyThrowExceptionWhenRegisteringSameAsyncMessageHandlerTwiceForOneRoutingKeyWithDifferentOrder()
25+
{
26+
await Assert.ThrowsAsync<ArgumentException>(() =>
27+
{
28+
new ServiceCollection()
29+
.AddAsyncMessageHandlerTransient<StubAsyncMessageHandler>("routing.key", 0)
30+
.AddAsyncMessageHandlerTransient<StubAsyncMessageHandler>("routing.key", 1);
31+
return Task.CompletedTask;
32+
});
33+
}
34+
35+
[Fact]
36+
public async Task ShouldProperlyThrowExceptionWhenRegisteringSameNonCyclicMessageHandlerTwiceForOneRoutingKeyWithDifferentOrder()
37+
{
38+
await Assert.ThrowsAsync<ArgumentException>(() =>
39+
{
40+
new ServiceCollection()
41+
.AddNonCyclicMessageHandlerTransient<StubNonCyclicMessageHandler>("routing.key", 0)
42+
.AddNonCyclicMessageHandlerTransient<StubNonCyclicMessageHandler>("routing.key", 1);
43+
return Task.CompletedTask;
44+
});
45+
}
46+
47+
[Fact]
48+
public async Task ShouldProperlyThrowExceptionWhenRegisteringSameAsyncNonCyclicMessageHandlerTwiceForOneRoutingKeyWithDifferentOrder()
49+
{
50+
await Assert.ThrowsAsync<ArgumentException>(() =>
51+
{
52+
new ServiceCollection()
53+
.AddAsyncNonCyclicMessageHandlerTransient<StubAsyncNonCyclicMessageHandler>("routing.key", 0)
54+
.AddAsyncNonCyclicMessageHandlerTransient<StubAsyncNonCyclicMessageHandler>("routing.key", 1);
55+
return Task.CompletedTask;
56+
});
57+
}
58+
}
59+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
using Microsoft.Extensions.Configuration;
4+
using Microsoft.Extensions.DependencyInjection;
5+
using Moq;
6+
using RabbitMQ.Client.Core.DependencyInjection.Configuration;
7+
using Xunit;
8+
9+
namespace RabbitMQ.Client.Core.DependencyInjection.Tests.UnitTests
10+
{
11+
public class RabbitMqExchangeDependencyInjectionExtensionsTests
12+
{
13+
[Fact]
14+
public async Task ShouldProperlyThrowExceptionWhenRegisteringSameExchangeWithSameNameAndOptionsTwice()
15+
{
16+
await Assert.ThrowsAsync<ArgumentException>(() =>
17+
{
18+
new ServiceCollection()
19+
.AddExchange("exchange.name", true, new RabbitMqExchangeOptions())
20+
.AddExchange("exchange.name", false, new RabbitMqExchangeOptions());
21+
return Task.CompletedTask;
22+
});
23+
}
24+
25+
[Fact]
26+
public async Task ShouldProperlyThrowExceptionWhenRegisteringSameExchangeWithSameNameAndConfigurationTwice()
27+
{
28+
await Assert.ThrowsAsync<ArgumentException>(() =>
29+
{
30+
var configurationMock = new Mock<IConfiguration>();
31+
new ServiceCollection()
32+
.AddExchange("exchange.name", true, configurationMock.Object)
33+
.AddExchange("exchange.name", false, configurationMock.Object);
34+
return Task.CompletedTask;
35+
});
36+
}
37+
}
38+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
4+
namespace RabbitMQ.Client.Core.DependencyInjection.Tests.UnitTests.Stubs
5+
{
6+
internal class StubAsyncMessageHandler : IAsyncMessageHandler
7+
{
8+
public Task Handle(string message, string routingKey)
9+
{
10+
Console.WriteLine($"{message}:{routingKey}");
11+
return Task.CompletedTask;
12+
}
13+
}
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
4+
namespace RabbitMQ.Client.Core.DependencyInjection.Tests.UnitTests.Stubs
5+
{
6+
internal class StubAsyncNonCyclicMessageHandler : IAsyncNonCyclicMessageHandler
7+
{
8+
public Task Handle(string message, string routingKey, IQueueService queueService)
9+
{
10+
Console.WriteLine($"{message}:{routingKey}:{queueService.GetType()}");
11+
return Task.CompletedTask;
12+
}
13+
}
14+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using System;
2+
3+
namespace RabbitMQ.Client.Core.DependencyInjection.Tests.UnitTests.Stubs
4+
{
5+
internal class StubMessageHandler : IMessageHandler
6+
{
7+
public void Handle(string message, string routingKey)
8+
{
9+
Console.WriteLine($"{message}:{routingKey}");
10+
}
11+
}
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using System;
2+
3+
namespace RabbitMQ.Client.Core.DependencyInjection.Tests.UnitTests.Stubs
4+
{
5+
internal class StubNonCyclicMessageHandler : INonCyclicMessageHandler
6+
{
7+
public void Handle(string message, string routingKey, IQueueService queueService)
8+
{
9+
Console.WriteLine($"{message}:{routingKey}:{queueService.GetType()}");
10+
}
11+
}
12+
}

0 commit comments

Comments
 (0)