/// <summary>
        /// Operators the added to estate event.
        /// </summary>
        /// <param name="domainEvent">The domain event.</param>
        private void PlayEvent(OperatorAddedToEstateEvent domainEvent)
        {
            Operator @operator = Operator.Create(domainEvent.OperatorId,
                                                 domainEvent.Name,
                                                 domainEvent.RequireCustomMerchantNumber,
                                                 domainEvent.RequireCustomMerchantNumber);

            this.Operators.Add(@operator);
        }
        public void EstateDomainEventHandler_OperatorAddedToEstateEvent_EventIsHandled()
        {
            OperatorAddedToEstateEvent operatorAddedToEstateEvent = TestData.OperatorAddedToEstateEvent;

            Mock <IEstateReportingRepository> estateReportingRepository = new Mock <IEstateReportingRepository>();

            EstateDomainEventHandler eventHandler = new EstateDomainEventHandler(estateReportingRepository.Object);

            Logger.Initialise(NullLogger.Instance);

            Should.NotThrow(async() => { await eventHandler.Handle(operatorAddedToEstateEvent, CancellationToken.None); });
        }
        /// <summary>
        /// Adds the operator.
        /// </summary>
        /// <param name="operatorId">The operator identifier.</param>
        /// <param name="operatorName">Name of the operator.</param>
        /// <param name="requireCustomMerchantNumber">if set to <c>true</c> [require custom merchant number].</param>
        /// <param name="requireCustomTerminalNumber">if set to <c>true</c> [require custom terminal number].</param>
        public void AddOperator(Guid operatorId,
                                String operatorName,
                                Boolean requireCustomMerchantNumber,
                                Boolean requireCustomTerminalNumber)
        {
            Guard.ThrowIfNullOrEmpty(operatorName, typeof(ArgumentNullException), "Operator name must be provided when adding a new operator");

            this.CheckEstateHasBeenCreated();
            this.CheckOperatorHasNotAlreadyBeenCreated(operatorId, operatorName);

            OperatorAddedToEstateEvent operatorAddedToEstateEvent =
                new OperatorAddedToEstateEvent(this.AggregateId, operatorId, operatorName, requireCustomMerchantNumber, requireCustomTerminalNumber);

            this.ApplyAndAppend(operatorAddedToEstateEvent);
        }
        public void OperatorAddedToEstateEvent_CanBeCreated_IsCreated()
        {
            OperatorAddedToEstateEvent operatorAddedToEstateEvent = new OperatorAddedToEstateEvent(TestData.EstateId,
                                                                                                   TestData.OperatorId,
                                                                                                   TestData.OperatorName,
                                                                                                   TestData.RequireCustomMerchantNumberFalse,
                                                                                                   TestData.RequireCustomTerminalNumberFalse);

            operatorAddedToEstateEvent.ShouldNotBeNull();
            operatorAddedToEstateEvent.AggregateId.ShouldBe(TestData.EstateId);
            operatorAddedToEstateEvent.EventId.ShouldNotBe(Guid.Empty);
            operatorAddedToEstateEvent.EstateId.ShouldBe(TestData.EstateId);
            operatorAddedToEstateEvent.OperatorId.ShouldBe(TestData.OperatorId);
            operatorAddedToEstateEvent.Name.ShouldBe(TestData.OperatorName);
            operatorAddedToEstateEvent.RequireCustomMerchantNumber.ShouldBe(TestData.RequireCustomMerchantNumberFalse);
            operatorAddedToEstateEvent.RequireCustomTerminalNumber.ShouldBe(TestData.RequireCustomTerminalNumberFalse);
        }
 /// <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(OperatorAddedToEstateEvent domainEvent,
                                              CancellationToken cancellationToken)
 {
     await this.EstateReportingRepository.AddEstateOperator(domainEvent, cancellationToken);
 }