/// <summary> /// Messages the send to recipient failure. /// </summary> /// <param name="providerRequestReference">The provider request reference.</param> /// <param name="providerEmailReference">The provider email reference.</param> public void ReceiveResponseFromProvider(String providerRequestReference, String providerEmailReference) { ResponseReceivedFromEmailProviderEvent responseReceivedFromProviderEvent = new ResponseReceivedFromEmailProviderEvent(this.AggregateId, providerRequestReference, providerEmailReference); this.ApplyAndAppend(responseReceivedFromProviderEvent); }
public void ResponseReceivedFromEmailProviderEvent_CanBeCreated_IsCreated() { ResponseReceivedFromEmailProviderEvent requestSentToProviderEvent = new ResponseReceivedFromEmailProviderEvent(TestData.MessageId, TestData.ProviderRequestReference, TestData.ProviderEmailReference); requestSentToProviderEvent.ShouldNotBeNull(); requestSentToProviderEvent.AggregateId.ShouldBe(TestData.MessageId); requestSentToProviderEvent.EventId.ShouldNotBe(Guid.Empty); requestSentToProviderEvent.MessageId.ShouldBe(TestData.MessageId); requestSentToProviderEvent.ProviderRequestReference.ShouldBe(TestData.ProviderRequestReference); requestSentToProviderEvent.ProviderEmailReference.ShouldBe(TestData.ProviderEmailReference); }
public void DomainEventHandlerResolver_GetDomainEventHandlers_ResponseReceivedFromProviderEvent_NoHandlersConfigured_EventHandlersReturned() { Dictionary <String, String[]> eventHandlerConfiguration = new Dictionary <String, String[]>(); ResponseReceivedFromEmailProviderEvent responseReceivedFromProviderEvent = TestData.ResponseReceivedFromEmailProviderEvent; Mock <IDomainEventHandler> domainEventHandler = new Mock <IDomainEventHandler>(); Func <Type, IDomainEventHandler> createDomainEventHandlerFunc = (type) => { return(domainEventHandler.Object); }; DomainEventHandlerResolver resolver = new DomainEventHandlerResolver(eventHandlerConfiguration, createDomainEventHandlerFunc); List <IDomainEventHandler> handlers = resolver.GetDomainEventHandlers(responseReceivedFromProviderEvent); handlers.ShouldBeNull(); }
public void DomainEventHandlerResolver_GetDomainEventHandlers_ResponseReceivedFromProviderEvent_EventNotConfigured_EventHandlersReturned() { String handlerTypeName = "MessagingService.BusinessLogic.EventHandling.EmailDomainEventHandler, MessagingService.BusinessLogic"; Dictionary <String, String[]> eventHandlerConfiguration = new Dictionary <String, String[]>(); ResponseReceivedFromEmailProviderEvent responseReceivedFromProviderEvent = TestData.ResponseReceivedFromEmailProviderEvent; eventHandlerConfiguration.Add("RandomEvent", new String[] { handlerTypeName }); Mock <IDomainEventHandler> domainEventHandler = new Mock <IDomainEventHandler>(); Func <Type, IDomainEventHandler> createDomainEventHandlerFunc = (type) => { return(domainEventHandler.Object); }; DomainEventHandlerResolver resolver = new DomainEventHandlerResolver(eventHandlerConfiguration, createDomainEventHandlerFunc); List <IDomainEventHandler> handlers = resolver.GetDomainEventHandlers(responseReceivedFromProviderEvent); handlers.ShouldBeNull(); }
/// <summary> /// Handles the specific domain event. /// </summary> /// <param name="domainEvent">The domain event.</param> /// <param name="cancellationToken">The cancellation token.</param> private async Task HandleSpecificDomainEvent(ResponseReceivedFromEmailProviderEvent domainEvent, CancellationToken cancellationToken) { EmailAggregate emailAggregate = await this.AggregateRepository.GetLatestVersion(domainEvent.MessageId, cancellationToken); // Update the aggregate with the status request information // Get the message status from the provider MessageStatusResponse messageStatus = await this.EmailServiceProxy.GetMessageStatus(domainEvent.ProviderEmailReference, domainEvent.EventTimestamp.DateTime, domainEvent.EventTimestamp.DateTime, cancellationToken); // Update the aggregate with the response switch (messageStatus.MessageStatus) { case MessageStatus.Failed: emailAggregate.MarkMessageAsFailed(messageStatus.ProviderStatusDescription, messageStatus.Timestamp); break; case MessageStatus.Rejected: emailAggregate.MarkMessageAsRejected(messageStatus.ProviderStatusDescription, messageStatus.Timestamp); break; case MessageStatus.Bounced: emailAggregate.MarkMessageAsBounced(messageStatus.ProviderStatusDescription, messageStatus.Timestamp); break; case MessageStatus.Spam: emailAggregate.MarkMessageAsSpam(messageStatus.ProviderStatusDescription, messageStatus.Timestamp); break; case MessageStatus.Delivered: emailAggregate.MarkMessageAsDelivered(messageStatus.ProviderStatusDescription, messageStatus.Timestamp); break; case MessageStatus.Unknown: break; } // Save the changes await this.AggregateRepository.SaveChanges(emailAggregate, cancellationToken); }
/// <summary> /// Plays the event. /// </summary> /// <param name="domainEvent">The domain event.</param> private void PlayEvent(ResponseReceivedFromEmailProviderEvent domainEvent) { this.ProviderEmailReference = domainEvent.ProviderEmailReference; this.ProviderRequestReference = domainEvent.ProviderRequestReference; this.MessageStatus = MessageStatus.Sent; }