public IHttpActionResult Get()
        {
            EventMessageService eventMessageService = CreateEventMessageService();
            var eventMessage = eventMessageService.GetEventMessages();

            return(Ok(eventMessage));
        }
Example #2
0
        public async Task EventMessageServiceCreateAsyncReturnsAlreadyReportedWhenAlreadyExists()
        {
            // arrange
            var existingContentPageModel = A.Fake <ContentPageModel>();
            var contentPageModel         = A.Fake <ContentPageModel>();

            contentPageModel.PageLocations = new List <PageLocationModel>
            {
                new PageLocationModel(),
            };

            var expectedResult = HttpStatusCode.AlreadyReported;

            A.CallTo(() => fakeContentPageService.GetByIdAsync(A <Guid> .Ignored, A <string> .Ignored)).Returns(existingContentPageModel);

            var eventMessageService = new EventMessageService <ContentPageModel>(fakeLogger, fakeContentPageService);

            // act
            var result = await eventMessageService.CreateAsync(contentPageModel).ConfigureAwait(false);

            // assert
            A.CallTo(() => fakeContentPageService.GetByIdAsync(A <Guid> .Ignored, A <string> .Ignored)).MustHaveHappenedOnceExactly();
            A.CallTo(() => fakeContentPageService.UpsertAsync(A <ContentPageModel> .Ignored)).MustNotHaveHappened();
            A.Equals(result, expectedResult);
        }
        private EventMessageService CreateEventMessageService()
        {
            var userId = Guid.Parse(User.Identity.GetUserId());
            var eventMessageService = new EventMessageService(userId);

            return(eventMessageService);
        }
Example #4
0
        public void ShouldRegisterAChannelAddASubscriptionAndPublishAnEvent()
        {
            //Arrange
            AddSubscription(out var channel, out var subscriptionService);

            var eventMessageService = new EventMessageService(new EventRepository(subscriptionService.Repository.ChannelRepository, "ECommerce.Data.FileStore",
                                                                                  new ConnectionOptions
            {
                Provider         = "FileDb",
                ConnectionString = new FileInfo($"data\\data_{Guid.NewGuid()}.json").FullName
            },
                                                                                  _loggerFactory, new MyDiagnosticSource()));

            //Act
            var resultPublish = eventMessageService.PublishAsync(new EventMessage
            {
                Channel         = channel,
                Key             = Guid.NewGuid().ToString(),
                PublishDateTime = DateTime.Now
            }).Result;

            //Assert
            resultPublish.Should().NotBeNull();
            resultPublish.IsSuccessful.Should().BeTrue();
        }
Example #5
0
        public async Task EventMessageServiceUpdateAsyncReturnsSuccessForDifferentPartitionKeyDeleteError()
        {
            // arrange
            var existingContentPageModel = A.Fake <ContentPageModel>();
            var contentPageModel         = A.Fake <ContentPageModel>();
            var expectedResult           = HttpStatusCode.Created;

            existingContentPageModel.Version = Guid.NewGuid();
            contentPageModel.Version         = Guid.NewGuid();
            contentPageModel.PartitionKey    = "a-partition-key";
            contentPageModel.PageLocations   = new List <PageLocationModel>
            {
                new PageLocationModel(),
            };

            existingContentPageModel.PartitionKey = "a-different-partition-key";

            A.CallTo(() => fakeContentPageService.GetByIdAsync(A <Guid> .Ignored, A <string> .Ignored)).Returns(existingContentPageModel);
            A.CallTo(() => fakeContentPageService.DeleteAsync(A <Guid> .Ignored)).Returns(false);
            A.CallTo(() => fakeContentPageService.UpsertAsync(A <ContentPageModel> .Ignored)).Returns(expectedResult);

            var eventMessageService = new EventMessageService <ContentPageModel>(fakeLogger, fakeContentPageService);

            // act
            var result = await eventMessageService.UpdateAsync(contentPageModel).ConfigureAwait(false);

            // assert
            A.CallTo(() => fakeContentPageService.GetByIdAsync(A <Guid> .Ignored, A <string> .Ignored)).MustHaveHappenedOnceExactly();
            A.CallTo(() => fakeContentPageService.DeleteAsync(A <Guid> .Ignored)).MustHaveHappenedOnceExactly();
            A.CallTo(() => fakeContentPageService.UpsertAsync(A <ContentPageModel> .Ignored)).MustNotHaveHappened();
            A.Equals(result, expectedResult);
        }
Example #6
0
        public void EventMessageServiceExtractPageLocationReturnsnullForMissingContentItems()
        {
            // arrange
            var contentPageModel = new ContentPageModel();

            var eventMessageService = new EventMessageService <ContentPageModel>(fakeLogger, fakeContentPageService);

            // act
            var result = eventMessageService.ExtractPageLocation(contentPageModel);

            // assert
            Assert.Null(result);
        }
Example #7
0
        public void EventMessageServiceExtractPageLocationReturnsSuccess()
        {
            // arrange
            var          contentPageModel = BuildContentPageModelWithPageLocations();
            const string expectedResult   = "/a/b/c";

            var eventMessageService = new EventMessageService <ContentPageModel>(fakeLogger, fakeContentPageService);

            // act
            var result = eventMessageService.ExtractPageLocation(contentPageModel);

            // assert
            Assert.Equal(expectedResult, result);
        }
        public async Task EventMessageServiceGetAllCachedItemsReturnsSuccess()
        {
            // arrange
            var expectedResult = A.CollectionOfFake <CmsApiSharedContentModel>(2);

            A.CallTo(() => fakeDcoumentService.GetAllAsync(A <string> .Ignored)).Returns(expectedResult);

            var eventMessageService = new EventMessageService <CmsApiSharedContentModel>(fakeLogger, fakeDcoumentService);

            // act
            var result = await eventMessageService.GetAllCachedItemsAsync().ConfigureAwait(false);

            // assert
            A.CallTo(() => fakeDcoumentService.GetAllAsync(A <string> .Ignored)).MustHaveHappenedOnceExactly();
            A.Equals(result, expectedResult);
        }
        public async Task EventMessageServiceCreateAsyncReturnsBadRequestWhenNullSupplied()
        {
            // arrange
            CmsApiSharedContentModel?contentPageModel = null;
            var expectedResult = HttpStatusCode.BadRequest;

            var eventMessageService = new EventMessageService <CmsApiSharedContentModel>(fakeLogger, fakeDcoumentService);

            // act
            var result = await eventMessageService.CreateAsync(contentPageModel).ConfigureAwait(false);

            // assert
            A.CallTo(() => fakeDcoumentService.GetByIdAsync(A <Guid> .Ignored, A <string> .Ignored)).MustNotHaveHappened();
            A.CallTo(() => fakeDcoumentService.UpsertAsync(A <CmsApiSharedContentModel> .Ignored)).MustNotHaveHappened();
            A.Equals(result, expectedResult);
        }
        public async Task EventMessageServiceDeleteAsyncReturnsNotFound()
        {
            // arrange
            var expectedResult = HttpStatusCode.NotFound;

            A.CallTo(() => fakeDcoumentService.DeleteAsync(A <Guid> .Ignored)).Returns(false);

            var eventMessageService = new EventMessageService <CmsApiSharedContentModel>(fakeLogger, fakeDcoumentService);

            // act
            var result = await eventMessageService.DeleteAsync(Guid.NewGuid()).ConfigureAwait(false);

            // assert
            A.CallTo(() => fakeDcoumentService.DeleteAsync(A <Guid> .Ignored)).MustHaveHappenedOnceExactly();
            A.Equals(result, expectedResult);
        }
Example #11
0
        public void ShouldReturnTheListOfMessageExpiredWithoutProcessing()
        {
            AddChannel(out var eventChannelRepository, out var channel, 1);

            var eventMessageService = new EventMessageService(new EventRepository(eventChannelRepository,
                                                                                  "ECommerce.Data.FileStore",
                                                                                  new ConnectionOptions
            {
                Provider         = "FileDb",
                ConnectionString = new FileInfo($"data\\data_{Guid.NewGuid()}.json").FullName
            },
                                                                                  _loggerFactory, new MyDiagnosticSource()));

            //Act
            var resultPublish = eventMessageService.PublishAsync(new EventMessage
            {
                Channel         = channel,
                Key             = Guid.NewGuid().ToString(),
                PublishDateTime = DateTime.Now
            }).Result;

            //Assert
            resultPublish.Should().NotBeNull();
            resultPublish.IsSuccessful.Should().BeTrue();

            var searchResult = eventMessageService.GetEventsByChannelAsync(channel).Result;

            searchResult.Should().NotBeNull();
            searchResult.IsSuccessful.Should().BeTrue();

            var message = searchResult.Result?.FirstOrDefault();

            message.Should().NotBeNull();

            // Assert
            message?.IsProcessing.Should().BeFalse();

            Task.Delay(1000).Wait();

            var revokeResult = eventMessageService.RevokeExpiredMessageAsync(channel).Result;

            revokeResult.Should().NotBeNull();
            revokeResult.IsSuccessful.Should().BeTrue();

            revokeResult.Result.Should().HaveCountGreaterOrEqualTo(1);
        }
Example #12
0
        public void ShouldAddTheMessageAndPassItDirectlyToTheSubscriber()
        {
            var subscription = AddSubscription(out var channel, out var eventSubscriptionService);

            var eventMessageService = new EventMessageService(new EventRepository(eventSubscriptionService.Repository.ChannelRepository,
                                                                                  "ECommerce.Data.FileStore",
                                                                                  new ConnectionOptions
            {
                Provider         = "FileDb",
                ConnectionString = new FileInfo($"data\\data_{Guid.NewGuid()}.json").FullName
            },
                                                                                  _loggerFactory, new MyDiagnosticSource()));

            //Act
            var resultPublish = eventMessageService.PublishAsync(new EventMessage
            {
                Channel         = channel,
                Key             = Guid.NewGuid().ToString(),
                PublishDateTime = DateTime.Now
            }).Result;

            //Assert
            resultPublish.Should().NotBeNull();
            resultPublish.IsSuccessful.Should().BeTrue();

            var resultGetMessage = eventMessageService.GetMessageBySubscriberAsync(subscription).Result;

            resultGetMessage.Should().NotBeNull();
            resultGetMessage.IsSuccessful.Should().BeTrue();

            Task.Delay(100).Wait();

            var searchResult = eventMessageService.GetEventsByChannelAsync(channel).Result;

            searchResult.Should().NotBeNull();
            searchResult.IsSuccessful.Should().BeTrue();

            var message = searchResult.Result?.FirstOrDefault();

            message.Should().NotBeNull();

            // Assert
            message?.IsProcessing.Should().BeTrue();
        }
Example #13
0
        public void ShouldRegisterAChannelAddASubscriptionAndPublishAnEventThrowInvalideOperation()
        {
            //Arrange
            AddSubscription(out var _, out var subscriptionService);

            var eventMessageService = new EventMessageService(new EventRepository(subscriptionService.Repository.ChannelRepository, "ECommerce.Data.FileStore",
                                                                                  new ConnectionOptions
            {
                Provider         = "FileDb",
                ConnectionString = new FileInfo($"data\\data_{Guid.NewGuid()}.json").FullName
            },
                                                                                  _loggerFactory, new MyDiagnosticSource()));

            //Act
            Action comparison = () =>
            {
                try
                {
                    var resultPublish = eventMessageService.PublishAsync(new EventMessage
                    {
                        Channel = new EventChannel
                        {
                            IsFifo                = true,
                            Key                   = Guid.NewGuid().ToString(),
                            MaxLifeTimeMessage    = 30,
                            Name                  = "Test",
                            MaxLifeTimeSubscriber = 30
                        },
                        Key             = Guid.NewGuid().ToString(),
                        PublishDateTime = DateTime.Now
                    }).Result;

                    resultPublish.Should().NotBeNull();
                    resultPublish.IsSuccessful.Should().BeTrue();
                }
                catch (AggregateException ex)
                {
                    ex.Handle((x) => throw x);
                }
            };

            //Assert
            comparison.Should().Throw <InvalidOperationException>();
        }
        public async Task EventMessageServiceUpdateAsyncReturnsNotFoundWhenNotExists()
        {
            // arrange
            CmsApiSharedContentModel?existingContentPageModel = null;
            var contentPageModel = A.Fake <CmsApiSharedContentModel>();
            var expectedResult   = HttpStatusCode.NotFound;

            A.CallTo(() => fakeDcoumentService.GetByIdAsync(A <Guid> .Ignored, A <string> .Ignored)).Returns(existingContentPageModel);

            var eventMessageService = new EventMessageService <CmsApiSharedContentModel>(fakeLogger, fakeDcoumentService);

            // act
            var result = await eventMessageService.UpdateAsync(contentPageModel).ConfigureAwait(false);

            // assert
            A.CallTo(() => fakeDcoumentService.GetByIdAsync(A <Guid> .Ignored, A <string> .Ignored)).MustHaveHappenedOnceExactly();
            A.CallTo(() => fakeDcoumentService.UpsertAsync(A <CmsApiSharedContentModel> .Ignored)).MustNotHaveHappened();
            A.Equals(result, expectedResult);
        }
Example #15
0
        public void ShouldRegisterAChannelAddASubscriptionAndPublishAnEventThrowArgumentNull()
        {
            //Arrange
            AddSubscription(out var _, out var subscriptionService);

            var eventMessageService = new EventMessageService(new EventRepository(subscriptionService.Repository.ChannelRepository, "ECommerce.Data.FileStore",
                                                                                  new ConnectionOptions
            {
                Provider         = "FileDb",
                ConnectionString = new FileInfo($"data\\data_{Guid.NewGuid()}.json").FullName
            },
                                                                                  _loggerFactory, new MyDiagnosticSource()));

            //Act
            Action comparison = () =>
            {
                eventMessageService.PublishAsync(null).Wait();
            };

            //Assert
            comparison.Should().Throw <ArgumentNullException>();
        }
Example #16
0
        public void ShouldPoolInWaitingQueeUntilASubscriberArrives()
        {
            AddChannel(out var eventChannelRepository, out var channel);

            var eventMessageService = new EventMessageService(new EventRepository(eventChannelRepository,
                                                                                  "ECommerce.Data.FileStore",
                                                                                  new ConnectionOptions
            {
                Provider         = "FileDb",
                ConnectionString = new FileInfo($"data\\data_{Guid.NewGuid()}.json").FullName
            },
                                                                                  _loggerFactory, new MyDiagnosticSource()));

            //Act
            var resultPublish = eventMessageService.PublishAsync(new EventMessage
            {
                Channel         = channel,
                Key             = Guid.NewGuid().ToString(),
                PublishDateTime = DateTime.Now
            }).Result;

            //Assert
            resultPublish.Should().NotBeNull();
            resultPublish.IsSuccessful.Should().BeTrue();

            var searchResult = eventMessageService.GetEventsByChannelAsync(channel).Result;

            searchResult.Should().NotBeNull();
            searchResult.IsSuccessful.Should().BeTrue();

            var message = searchResult.Result?.FirstOrDefault();

            message.Should().NotBeNull();

            // Assert
            message?.IsProcessing.Should().BeFalse();
        }
        public async Task EventMessageServiceUpdateAsyncReturnsSuccessForSamePartitionKey()
        {
            // arrange
            var existingContentPageModel = A.Fake <CmsApiSharedContentModel>();
            var contentPageModel         = A.Fake <CmsApiSharedContentModel>();
            var expectedResult           = HttpStatusCode.OK;

            contentPageModel.PartitionKey         = "a-partition-key";
            existingContentPageModel.PartitionKey = contentPageModel.PartitionKey;

            A.CallTo(() => fakeDcoumentService.GetByIdAsync(A <Guid> .Ignored, A <string> .Ignored)).Returns(existingContentPageModel);
            A.CallTo(() => fakeDcoumentService.UpsertAsync(A <CmsApiSharedContentModel> .Ignored)).Returns(expectedResult);

            var eventMessageService = new EventMessageService <CmsApiSharedContentModel>(fakeLogger, fakeDcoumentService);

            // act
            var result = await eventMessageService.UpdateAsync(contentPageModel).ConfigureAwait(false);

            // assert
            A.CallTo(() => fakeDcoumentService.GetByIdAsync(A <Guid> .Ignored, A <string> .Ignored)).MustHaveHappenedOnceExactly();
            A.CallTo(() => fakeDcoumentService.DeleteAsync(A <Guid> .Ignored)).MustNotHaveHappened();
            A.CallTo(() => fakeDcoumentService.UpsertAsync(A <CmsApiSharedContentModel> .Ignored)).MustHaveHappenedOnceExactly();
            A.Equals(result, expectedResult);
        }