using System; using FluentAssertions; using Tapeti.Annotations; using Tapeti.Default; using Xunit; namespace Tapeti.Tests.Default { // ReSharper disable InconsistentNaming public class TypeNameRoutingKeyStrategyTests { private class Example { } [Fact] public void Singleword() { AssertRoutingKey("example", typeof(Example)); } private class ExampleMessage { } [Fact] public void SinglewordMessagePostfix() { AssertRoutingKey("example", typeof(ExampleMessage)); } private class ExampleMultiWord { } [Fact] public void Multiword() { AssertRoutingKey("example.multi.word", typeof(ExampleMultiWord)); } private class ExampleMultiWordMessage { } [Fact] public void MultiwordMessagePostfix() { AssertRoutingKey("example.multi.word", typeof(ExampleMultiWordMessage)); } private class ACRTestMessage { } [Fact] public void Acronym() { AssertRoutingKey("acr.test", typeof(ACRTestMessage)); } private class ACRTestMIXEDCaseMESSAGE { } [Fact] public void MixedCasing() { AssertRoutingKey("acr.test.mixed.case", typeof(ACRTestMIXEDCaseMESSAGE)); } [RoutingKey(Prefix = "prefix.")] private class PrefixAttributeTestMessage { } [Fact] public void Prefix() { AssertRoutingKey("prefix.prefix.attribute.test", typeof(PrefixAttributeTestMessage)); } [RoutingKey(Postfix = ".postfix")] private class PostfixAttributeTestMessage { } [Fact] public void Postfix() { AssertRoutingKey("postfix.attribute.test.postfix", typeof(PostfixAttributeTestMessage)); } [RoutingKey(Prefix = "prefix.", Postfix = ".postfix")] private class PrefixPostfixAttributeTestMessage { } [Fact] public void PrefixPostfix() { AssertRoutingKey("prefix.prefix.postfix.attribute.test.postfix", typeof(PrefixPostfixAttributeTestMessage)); } [RoutingKey(Full = "andnowforsomethingcompletelydifferent", Prefix = "ignore.", Postfix = ".me")] private class FullAttributeTestMessage { } [Fact] public void Full() { AssertRoutingKey("andnowforsomethingcompletelydifferent", typeof(FullAttributeTestMessage)); } // ReSharper disable once ParameterOnlyUsedForPreconditionCheck.Local private static void AssertRoutingKey(string expected, Type messageType) { var routingKey = new TypeNameRoutingKeyStrategy().GetRoutingKey(messageType); routingKey.Should().Be(expected); } } // ReSharper restore InconsistentNaming }