예제 #1
0
 public OperationProcessingResult ProcessBankOperation(ProcessBankOperationCommand command)
 {
     try
     {
         var operation      = _deps.BankOperations.SurelyFind(command.BankOperationId);
         var appOperationId = Operation.Id;
         var events         = _deps.CentralProcessor.Process(new BankOperationProcessorCommand(appOperationId, operation));
         Commit();
         var operationModel = operation.ToModel <BankOperation, BankOperationModel>();
         return(new OperationProcessingResult(operationModel, events));
     }
     catch (Exception ex)
     {
         throw new ServiceException("Can't process bank operation.", ex);
     }
 }
예제 #2
0
 public OperationProcessingResult ProcessBankOperation(ProcessBankOperationCommand command)
 {
     try
     {
         var operation = _deps.BankOperations.SurelyFind(command.BankOperationId);
         var appOperationId = Operation.Id;
         var events = _deps.CentralProcessor.Process(new BankOperationProcessorCommand(appOperationId, operation));
         Commit();
         var operationModel = operation.ToModel<BankOperation, BankOperationModel>();
         return new OperationProcessingResult(operationModel, events);
     }
     catch (Exception ex)
     {
         throw new ServiceException("Can't process bank operation.", ex);
     }
 }
예제 #3
0
        public void Can_Submit_And_Process_Card_Transfer()
        {
            var user = AuthenticateTerminator();

            user.Profile.SmsConfirmationEnabled = false;
            var transferService    = Scope.Resolve <ICardTransferClientService>();
            var cardAccountService = Scope.Resolve <ICardAccountService>();
            var transferRepository = Scope.Resolve <IRepository <Transfer> >();
            var processingService  = Scope.Resolve <IProcessingService>();

            var cards = cardAccountService.GetUserCards(new CardQuery())
                        .Where(x => x.AccountNo != null)
                        .ToList();
            var command = new InterbankCardTransferCommand
            {
                FromCardId = cards.First(x => x.Owner.UserId == user.Id).CardId,
                ToCardNo   = cards.First(x => x.Owner.UserId != user.Id).CardNo,
                ToCardExpirationDateUtc = cards[1].ExpirationDateUtc,
                Amount = 10
            };

            var operation = transferService.Transfer(command);
            var command2  = new ProcessBankOperationCommand
            {
                BankOperationId = operation.Id
            };
            var nextState = processingService.ProcessBankOperation(command2);
            var transfer  = transferRepository.Find(command2.BankOperationId);

            processingService.ProcessTransaction(new ProcessTransactionCommand
            {
                OperationId   = command2.BankOperationId,
                TransactionId = transfer.Withdrawal.Id
            });
            nextState = processingService.ProcessBankOperation(command2);
            processingService.ProcessTransaction(new ProcessTransactionCommand
            {
                OperationId   = command2.BankOperationId,
                TransactionId = transfer.Deposit.Id
            });
            nextState = processingService.ProcessBankOperation(command2);
            transfer  = transferRepository.Find(command2.BankOperationId);
            Assert.AreEqual(ProcessStatus.Completed, transfer.Status);
        }
예제 #4
0
        public void Can_Submit_And_Process_Card_Transfer()
        {
            var user = AuthenticateTerminator();
            user.Profile.SmsConfirmationEnabled = false;
            var transferService = Scope.Resolve<ICardTransferClientService>();
            var cardAccountService = Scope.Resolve<ICardAccountService>();
            var transferRepository = Scope.Resolve<IRepository<Transfer>>();
            var processingService = Scope.Resolve<IProcessingService>();

            var cards = cardAccountService.GetUserCards(new CardQuery())
                .Where(x => x.AccountNo != null)
                .ToList();
            var command = new InterbankCardTransferCommand
            {
                FromCardId = cards.First(x => x.Owner.UserId == user.Id).CardId,
                ToCardNo = cards.First(x => x.Owner.UserId != user.Id).CardNo,
                ToCardExpirationDateUtc = cards[1].ExpirationDateUtc,
                Amount = 10
            };

            var operation = transferService.Transfer(command);
            var command2 = new ProcessBankOperationCommand
            {
                BankOperationId = operation.Id
            };
            var nextState = processingService.ProcessBankOperation(command2);
            var transfer = transferRepository.Find(command2.BankOperationId);
            processingService.ProcessTransaction(new ProcessTransactionCommand
            {
                OperationId = command2.BankOperationId,
                TransactionId = transfer.Withdrawal.Id
            });
            nextState = processingService.ProcessBankOperation(command2);
            processingService.ProcessTransaction(new ProcessTransactionCommand
            {
                OperationId = command2.BankOperationId,
                TransactionId = transfer.Deposit.Id
            });
            nextState = processingService.ProcessBankOperation(command2);
            transfer = transferRepository.Find(command2.BankOperationId);
            Assert.AreEqual(ProcessStatus.Completed, transfer.Status);
        }