예제 #1
0
        // helper method
        private ThingService CreateThingService()
        {
            var userId  = Guid.Parse(User.Identity.GetUserId());
            var service = new ThingService(userId);

            return(service);
        }
        public async void TestThingService_SendCreateThingCommandAsync_Success()
        {
            var provider = new ServiceCollection()
                           .AddMassTransitInMemoryTestHarness(cfg =>
            {
                cfg.AddConsumer <CreateThingConsumer>();
                cfg.AddConsumer <ThingCreatedConsumer>();

                cfg.AddConsumerTestHarness <CreateThingConsumer>();
                cfg.AddConsumerTestHarness <ThingCreatedConsumer>();
            })
                           .BuildServiceProvider(true);

            var harness = provider.GetRequiredService <InMemoryTestHarness>();

            var mockLoggerThingService         = new Mock <ILogger <ThingService> >();
            var mockLoggerCreateThingConsumer  = new Mock <ILogger <CreateThingConsumer> >();
            var mockLoggerThingCreatedConsumer = new Mock <ILogger <ThingCreatedConsumer> >();

            await harness.Start();

            var publishEndpoint      = (IPublishEndpoint)harness.BusControl;
            var sendEndpointProvider = (ISendEndpointProvider)harness.BusControl;

            var thingService = new ThingService(mockLoggerThingService.Object, sendEndpointProvider, publishEndpoint);

            var sendCommandConsumerHarness  = harness.Consumer <CreateThingConsumer>(() => new CreateThingConsumer(mockLoggerCreateThingConsumer.Object, thingService));
            var publishEventConsumerHarness = harness.Consumer <ThingCreatedConsumer>(() => new ThingCreatedConsumer(mockLoggerThingCreatedConsumer.Object));

            try
            {
                await thingService.SendCreateThingCommandAsync(new Domain.Entities.Thing
                {
                    Name = "New thing to create"
                });

                Thread.Sleep(3000);
            }
            finally
            {
                await harness.Stop();

                await provider.DisposeAsync();
            }

            Assert.True(await harness.Consumed.Any <ICreateThing>());

            Assert.False(await harness.Published.Any <Fault <ICreateThing> >());

            var sentCommand = harness.Sent.Select <ICreateThing>().ToList().FirstOrDefault();

            Assert.NotNull(sentCommand);
            Assert.Equal("New thing to create", sentCommand.Context.Message.Name);

            var publishedEvent = harness.Published.Select <IThingCreated>().ToList().FirstOrDefault();

            Assert.NotNull(publishedEvent);
            Assert.Equal("New thing to create", publishedEvent.Context.Message.Name);
        }
예제 #3
0
 public ThingController()
 {
     thingService = new ThingService();
 }