public IHttpActionResult Get() { EventMessageService eventMessageService = CreateEventMessageService(); var eventMessage = eventMessageService.GetEventMessages(); return(Ok(eventMessage)); }
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); }
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(); }
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); }
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); }
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); }
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); }
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(); }
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); }
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>(); }
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); }