public void MicroserviceHostFindsQueueNameInAttribute()
    {
        var serviceMock = new SomeMicroserviceMock();

        using (var host = new MicroserviceHost <SomeMicroserviceMock>(serviceMock))
        {
            Assert.Equal(1, host.ServiceModel.QueueNames.Count());
            Assert.True(host.ServiceModel.QueueNames.Contains("microserviceQueue"));
        }
    }
    public void MicroserviceHostFindsHandlersInInstance()
    {
        var serviceMock = new SomeMicroserviceMock();

        using (var host = new MicroserviceHost <SomeMicroserviceMock>(serviceMock))
        {
            Assert.Equal(2, host.ServiceModel.Handlers.Count());
            Assert.True(host.ServiceModel.Handlers.Contains("InfoSupport.WSA.Infrastructure.Test.dummies.TestCommand"), "TestCommand is not recognized");
            Assert.True(host.ServiceModel.Handlers.Contains("InfoSupport.WSA.Infrastructure.Test.dummies.SomeCommand"), "SomeCommand is not recognized");
        }
    }
    public void MicroserviceHostFailsIfRabbitMQIsNotReachable()
    {
        var serviceMock = new SomeMicroserviceMock();
        var options     = new BusOptions {
            HostName = "NonExistingName"
        };
        MicroserviceConfigurationException ex =
            Assert.Throws <MicroserviceConfigurationException>(() =>
        {
            using (var host = new MicroserviceHost <SomeMicroserviceMock>(serviceMock, options))
            {
                host.Open();
            }
        });

        Assert.Equal("The Eventbus (RabbitMQ service) cannot be reached.", ex.Message);
    }
    public void MicroserviceHostSilentlyIgnoresUnknownCommands()
    {
        var serviceMock = new SomeMicroserviceMock();

        using (var host = new MicroserviceHost <SomeMicroserviceMock>(serviceMock))
        {
            var options = new BusOptions()
            {
                QueueName = "microserviceQueue"
            };
            var command = new KeyValuePair <string, int>("Test", 42);
            SendMessage(command, options);
            serviceMock.ReceivedFlag.WaitOne(500);

            Assert.False(serviceMock.SomeCommandHandlerHasBeenCalled);
            Assert.False(serviceMock.TestCommandHandlerHasBeenCalled);
        }
    }
    public void MicroserviceHostReceivesCommands()
    {
        var serviceMock = new SomeMicroserviceMock();

        using (var host = new MicroserviceHost <SomeMicroserviceMock>(serviceMock))
        {
            var options = new BusOptions()
            {
                QueueName = "microserviceQueue"
            };

            host.Open();

            var command = new SomeCommand()
            {
                SomeValue = "teststring"
            };
            SendMessage(command, options);
            serviceMock.ReceivedFlag.WaitOne(500);

            Assert.True(serviceMock.SomeCommandHandlerHasBeenCalled);
            Assert.False(serviceMock.TestCommandHandlerHasBeenCalled);
        }
    }