public void when_amount_spent_attained_then_promotion_unlocked()
        {
            var accountId = Guid.NewGuid();
            var orderId1  = Guid.NewGuid();
            var orderId2  = Guid.NewGuid();

            var newOrderStatus = new OrderStatusChanged
            {
                IsCompleted = true,
                Status      = new OrderStatusDetail {
                    AccountId = accountId, Status = OrderStatus.Completed
                }
            };

            var newPaymentInit = new CreditCardPaymentInitiated
            {
                Meter = (decimal)15.31
            };

            var newPayment = new CreditCardPaymentCaptured_V2
            {
                FeeType           = FeeTypes.None,
                Meter             = (decimal)15.31,
                AuthorizationCode = Guid.NewGuid().ToString(),
                AccountId         = accountId
            };

            _orderCreatedCommand.AccountId = accountId;

            _orderCreatedCommand.SourceId = orderId1;
            newOrderStatus.SourceId       = orderId1;
            newPaymentInit.SourceId       = orderId1;
            newPaymentInit.OrderId        = orderId1;
            newPayment.SourceId           = orderId1;
            newPayment.OrderId            = orderId1;

            OrderGenerator.Handle(_orderCreatedCommand);
            OrderGenerator.Handle(newOrderStatus);
            CreditCardGenerator.Handle(newPaymentInit);
            CreditCardGenerator.Handle(newPayment);
            TriggerSut.Handle(newPayment);

            _orderCreatedCommand.SourceId = orderId2;
            newOrderStatus.SourceId       = orderId2;
            newPaymentInit.SourceId       = orderId2;
            newPaymentInit.OrderId        = orderId2;
            newPayment.SourceId           = orderId2;
            newPayment.OrderId            = orderId2;

            OrderGenerator.Handle(_orderCreatedCommand);
            OrderGenerator.Handle(newOrderStatus);
            CreditCardGenerator.Handle(newPaymentInit);
            CreditCardGenerator.Handle(newPayment);
            TriggerSut.Handle(newPayment);

            var commands = Commands.OfType <AddUserToPromotionWhiteList>().Where(c => c.AccountIds.Contains(accountId)).ToArray();

            Assert.AreEqual(1, commands.Count());
            Assert.AreEqual(30.62, commands[0].LastTriggeredAmount);
        }
        public void Handle(CreditCardPaymentInitiated @event)
        {
            Action handling = () =>
            {
                using (var context = _contextFactory.Invoke())
                {
                    var existingReport = context.Find <OrderReportDetail>(@event.OrderId);
                    var orderReport    = existingReport ?? new OrderReportDetail {
                        Id = @event.OrderId
                    };
                    var creditCard = context.Query <CreditCardDetails>().FirstOrDefault(x => x.Token == @event.CardToken);

                    orderReport.Payment.PaymentId                 = @event.SourceId;
                    orderReport.Payment.PreAuthorizedAmount       = @event.Amount;
                    orderReport.Payment.FirstPreAuthTransactionId = @event.TransactionId.ToSafeString().IsNullOrEmpty() ? "" : "Auth: " + @event.TransactionId;
                    orderReport.Payment.TransactionId             = @event.TransactionId.ToSafeString().IsNullOrEmpty() ? "" : "Auth: " + @event.TransactionId;
                    orderReport.Payment.CardToken                 = @event.CardToken;
                    orderReport.Payment.Last4Digits               = creditCard != null ? creditCard.Last4Digits : "";
                    orderReport.Payment.Type     = @event.Provider == PaymentProvider.PayPal ? PaymentType.PayPal : PaymentType.CreditCard;
                    orderReport.Payment.Provider = @event.Provider;

                    context.Save(orderReport);
                }
            };

            WrapWithSqlPrimaryKeyHandling(handling);
        }
Exemple #3
0
 private void OnCreditCardPaymentInitiated(CreditCardPaymentInitiated obj)
 {
     _orderId       = obj.OrderId;
     _transactionId = obj.TransactionId;
 }