Пример #1
0
        public listing_cards_on_customer()
        {
            var customerService    = new StripeCustomerService(Cache.ApiKey);
            var bankAccountService = new BankAccountService(Cache.ApiKey);
            var cardService        = new StripeCardService(Cache.ApiKey);

            var CustomerCreateOptions = new StripeCustomerCreateOptions
            {
                Email       = "*****@*****.**",
                SourceToken = "tok_visa",
            };
            var Customer = customerService.Create(CustomerCreateOptions);

            var BankAccountCreateOptions = new BankAccountCreateOptions
            {
                SourceBankAccount = new SourceBankAccount()
                {
                    RoutingNumber     = "110000000",
                    AccountNumber     = "000123456789",
                    Country           = "US",
                    Currency          = "usd",
                    AccountHolderName = "Jenny Rosen",
                    AccountHolderType = BankAccountHolderType.Individual,
                }
            };
            var BankAccount = bankAccountService.Create(Customer.Id, BankAccountCreateOptions);

            ListCards = cardService.List(Customer.Id);
        }
Пример #2
0
        public void Add_Should_Add_BankAccount()
        {
            var dbName             = DataBaseHelper.Instance.NewDataBase();
            var user               = DataBaseHelper.Instance.UseNewUser(dbName);
            var bankAccountType    = DataBaseHelper.Instance.UseNewBankAccountType(dbName);
            var bankAccountService = new BankAccountService();

            var bankAccountWording = "test bank account";
            var initialBalance     = 120.50m;

            using (var context = DataBaseHelper.Instance.CreateContext(dbName))
            {
                bankAccountService.Create(context, user.UserName, new CreateBankAccountDto()
                {
                    BankAccountTypeId = bankAccountType.Id,
                    Wording           = bankAccountWording,
                    InitialBalance    = initialBalance,
                    OperationsTypes   = new List <string>()
                    {
                        "operation type est 1",
                        "operation type est 2",
                        "operation type est 3"
                    }
                });
            }

            using (var context = DataBaseHelper.Instance.CreateContext(dbName))
            {
                var bankAccountFromDb = context.BankAccounts.SingleOrDefault(ba => ba.Wording.Equals(bankAccountWording));

                Assert.NotNull(bankAccountFromDb);

                Assert.Equal(initialBalance, bankAccountFromDb.Balance);
                Assert.Equal(initialBalance, bankAccountFromDb.OpeningBalance);
                Assert.Equal(initialBalance, bankAccountFromDb.ActualBalance);
                Assert.Equal(bankAccountType.Id, bankAccountFromDb.BankAccountTypeId);

                var userBankAccountFromDb = context.UserBankAccounts.SingleOrDefault(uba => uba.BankAccountId.Equals(bankAccountFromDb.Id));

                Assert.NotNull(userBankAccountFromDb);
                Assert.Equal(user.Id, userBankAccountFromDb.UserId);
                Assert.True(userBankAccountFromDb.IsOwner);
                Assert.False(userBankAccountFromDb.IsReadOnly);

                var operationsTypes = context.OperationTypes.Select(ot => ot.BankAccountId.Equals(bankAccountFromDb.Id));

                Assert.NotEmpty(operationsTypes);
                Assert.Equal(3, operationsTypes.Count());
            }
        }
        public void BankAccountService_Create_Without_InitialCredit()
        {
            // Arrange
            _dbContext.Customers.Add(new Customer
            {
                Name        = Guid.NewGuid().ToString(),
                Surname     = Guid.NewGuid().ToString(),
                DateCreated = DateTime.UtcNow
            });
            _dbContext.SaveChanges();

            var bankAccountService = new BankAccountService(new BankAccountRepository(_dbContext), new TransactionRepository(_dbContext));

            // Act
            var result = bankAccountService.Create(1, 0).GetAwaiter().GetResult();

            // Assert
            Assert.True(result);
        }
        public async void Create_NoErrors()
        {
            var mock  = new ServiceMockFacade <IBankAccountRepository>();
            var model = new ApiBankAccountServerRequestModel();

            mock.RepositoryMock.Setup(x => x.Create(It.IsAny <BankAccount>())).Returns(Task.FromResult(new BankAccount()));
            var service = new BankAccountService(mock.LoggerMock.Object,
                                                 mock.MediatorMock.Object,
                                                 mock.RepositoryMock.Object,
                                                 mock.ModelValidatorMockFactory.BankAccountModelValidatorMock.Object,
                                                 mock.DALMapperMockFactory.DALBankAccountMapperMock);

            CreateResponse <ApiBankAccountServerResponseModel> response = await service.Create(model);

            response.Should().NotBeNull();
            response.Success.Should().BeTrue();
            mock.ModelValidatorMockFactory.BankAccountModelValidatorMock.Verify(x => x.ValidateCreateAsync(It.IsAny <ApiBankAccountServerRequestModel>()));
            mock.RepositoryMock.Verify(x => x.Create(It.IsAny <BankAccount>()));
            mock.MediatorMock.Verify(x => x.Publish(It.IsAny <BankAccountCreatedNotification>(), It.IsAny <CancellationToken>()));
        }
Пример #5
0
        public void Add_With_Unknow_User_Should_Throw_DaGet_Unauthorized_Exception()
        {
            var dbName             = DataBaseHelper.Instance.NewDataBase();
            var bankAccountType    = DataBaseHelper.Instance.UseNewBankAccountType(dbName);
            var bankAccountService = new BankAccountService();

            using (var context = DataBaseHelper.Instance.CreateContext(dbName))
            {
                Assert.Throws <DaGetUnauthorizedException>(() => bankAccountService.Create(context, Guid.NewGuid().ToString(), new CreateBankAccountDto()
                {
                    BankAccountTypeId = bankAccountType.Id,
                    Wording           = Guid.NewGuid().ToString(),
                    InitialBalance    = 0m,
                    OperationsTypes   = new List <string>()
                    {
                        Guid.NewGuid().ToString(),
                        Guid.NewGuid().ToString(),
                        Guid.NewGuid().ToString()
                    }
                }));
            }
        }
        public async void Create_Errors()
        {
            var mock          = new ServiceMockFacade <IBankAccountRepository>();
            var model         = new ApiBankAccountServerRequestModel();
            var validatorMock = new Mock <IApiBankAccountServerRequestModelValidator>();

            validatorMock.Setup(x => x.ValidateCreateAsync(It.IsAny <ApiBankAccountServerRequestModel>())).Returns(Task.FromResult(new FluentValidation.Results.ValidationResult(new List <ValidationFailure>()
            {
                new ValidationFailure("text", "test")
            })));
            var service = new BankAccountService(mock.LoggerMock.Object,
                                                 mock.MediatorMock.Object,
                                                 mock.RepositoryMock.Object,
                                                 validatorMock.Object,
                                                 mock.DALMapperMockFactory.DALBankAccountMapperMock);

            CreateResponse <ApiBankAccountServerResponseModel> response = await service.Create(model);

            response.Should().NotBeNull();
            response.Success.Should().BeFalse();
            validatorMock.Verify(x => x.ValidateCreateAsync(It.IsAny <ApiBankAccountServerRequestModel>()));
            mock.MediatorMock.Verify(x => x.Publish(It.IsAny <BankAccountCreatedNotification>(), It.IsAny <CancellationToken>()), Times.Never());
        }
Пример #7
0
        public ActionResult RegisterBankAccount([FromBody] dynamic body)
        {
            try
            {
                string account  = body.account ?? body.Account ?? body.account_name ?? body.accountName ?? body.AccountName;
                string currency = body.currency;
                int?   userId   = ((string)(body.user_id ?? body.userId ?? body.user)).ParseToInt();
                string email    = body.user_email ?? body.userEmail ?? body.email ?? body.user;

                var id = userId.HasValue
                    ? BankAccountService.Create(account, currency, userId.Value)
                    : BankAccountService.Create(account, currency, email);
                return(Ok(new { account = id }));
            }
            catch (Exception ex) when(ex is ArgumentException || ex is BusinessException)
            {
                return(BadRequest(ex.Message));
            }
            catch (Exception ex)
            {
                Logger.LogError("Error while registering new bank account: " + ex.Message, ex);
                return(StatusCode(StatusCodes.Status500InternalServerError, ex));
            }
        }
Пример #8
0
        public AccountPaymentMethod CreateBankAccountPaymentMethod(string accountHolderName, string accountHolderType, string routingNumber, string accountNumber, byte usedFor)
        {
            try
            {
                var tokenOptions = new TokenCreateOptions
                {
                    BankAccount = new BankAccountOptions
                    {
                        Country           = "US",
                        Currency          = "usd",
                        AccountHolderName = accountHolderName,
                        AccountHolderType = accountHolderType,
                        RoutingNumber     = routingNumber,
                        AccountNumber     = accountNumber
                    }
                };

                var   tokenService = new TokenService();
                Token token        = tokenService.Create(tokenOptions);

                var stripeCustomer = GetStripeCustomer();

                var bankAccountOptions = new BankAccountCreateOptions
                {
                    Source = token.Id,
                };

                var         bankAccountService = new BankAccountService();
                BankAccount bankAccount        = bankAccountService.Create(stripeCustomer.Id, bankAccountOptions);

                using (FlyJetsDbContext dbContext = new FlyJetsDbContext(_config))
                {
                    var paymentMehtod = new AccountPaymentMethod()
                    {
                        Id                       = Guid.NewGuid(),
                        AccountId                = _accountId,
                        PaymentMethod            = (byte)PaymentMethods.BankTransfer,
                        TokenId                  = token.Id,
                        BankName                 = token.BankAccount.BankName,
                        RoutingNumber            = token.BankAccount.RoutingNumber,
                        HolderName               = token.BankAccount.AccountHolderName,
                        AccountLast4             = token.BankAccount.Last4,
                        UsedFor                  = usedFor,
                        ReferencePaymentMethodId = bankAccount.Id,
                        CreatedOn                = DateTime.UtcNow
                    };

                    dbContext.AccountPaymentMethods.Add(paymentMehtod);
                    dbContext.SaveChanges();

                    return(paymentMehtod);
                }
            }
            catch (StripeException e)
            {
                switch (e.StripeError.ErrorType)
                {
                case "card_error":
                    break;

                case "api_connection_error":
                    break;

                case "api_error":
                    break;

                case "authentication_error":
                    break;

                case "invalid_request_error":
                    break;

                case "rate_limit_error":
                    break;

                case "validation_error":
                    break;

                default:
                    break;
                }

                return(null);
            }
        }
Пример #9
0
        public async Task <int> PaymentAch(string bankToken, int amount,
                                           string account_number, string rounting_number)
        {
            try
            {
                // Create an ACH charge
                StripeConfiguration.SetApiKey(ep.GetStripeSecretKey());
                CustomerService customerService = new CustomerService();
                var             customerOptions = new CustomerCreateOptions
                {
                };
                Customer achCustomer = customerService.Create(customerOptions);

                // Create Bank Account
                var bankAccountOptions = new BankAccountCreateOptions
                {
                    SourceToken = bankToken
                };
                var         bankService = new BankAccountService();
                BankAccount bankAccount = bankService.Create(achCustomer.Id, bankAccountOptions);
                // Verify BankAccount
                List <long> Amounts = new List <long>();
                Amounts.Add(32);
                Amounts.Add(45);

                var verifyOptions = new BankAccountVerifyOptions
                {
                    Amounts = Amounts
                };

                bankAccount = bankService.Verify(achCustomer.Id, bankAccount.Id, verifyOptions);
                var chargeOptions = new ChargeCreateOptions
                {
                    Amount      = amount,
                    Currency    = "usd",
                    Description = "Charge for [email protected]",
                    CustomerId  = achCustomer.Id
                };
                var    chargeService = new ChargeService();
                Charge charge        = chargeService.Create(chargeOptions);
                // Payout from Stripe to Bank Account
                string bankAccountStr = account_number;  // "000123456789";
                string bankRoutingStr = rounting_number; // "110000000";

                // Get self account
                var accountOptions = new AccountCreateOptions
                {
                    Email               = "*****@*****.**",
                    Type                = AccountType.Custom,
                    Country             = "US",
                    ExternalBankAccount = new AccountBankAccountOptions()
                    {
                        Country           = "US",
                        Currency          = "usd",
                        AccountHolderName = "John Brown",//account_name
                        AccountHolderType = "individual",
                        RoutingNumber     = bankRoutingStr,
                        AccountNumber     = bankAccountStr
                    },
                    PayoutSchedule = new AccountPayoutScheduleOptions()
                    {
                        Interval = "daily"
                    },
                    TosAcceptance = new AccountTosAcceptanceOptions()
                    {
                        Date      = DateTime.Now.AddDays(-10),
                        Ip        = "202.47.115.80",
                        UserAgent = "Chrome"
                    },
                    LegalEntity = new AccountLegalEntityOptions()
                    {
                        Dob = new AccountDobOptions()
                        {
                            Day   = 1,
                            Month = 4,
                            Year  = 1991
                        },
                        FirstName = "John",
                        LastName  = "Brown",
                        Type      = "individual"
                    }
                };
                var     accountService = new AccountService();
                Account account        = await accountService.CreateAsync(accountOptions);

                StripeConfiguration.SetApiKey(ep.GetStripeSecretKey());

                var     service = new BalanceService();
                Balance balance = await service.GetAsync();

                var transOptions = new TransferCreateOptions
                {
                    Amount      = amount,
                    Currency    = "usd",
                    Destination = account.Id
                };

                var      transferService = new TransferService();
                Transfer Transfer        = transferService.Create(transOptions);

                var payoutOptions = new PayoutCreateOptions
                {
                    Amount              = amount,
                    Currency            = "usd",
                    Destination         = account.ExternalAccounts.First().Id,
                    SourceType          = "card",
                    StatementDescriptor = "PAYOUT",
                    //Method = "instant"
                };

                var requestOptions = new RequestOptions();
                requestOptions.ApiKey = ep.GetStripeSecretKey();
                requestOptions.StripeConnectAccountId = account.Id;
                var payoutService = new PayoutService();
                var payout        = await payoutService.CreateAsync(payoutOptions, requestOptions);

                return(1);
            }
            catch (Exception)
            {
                return(0);
            }
        }
        private void CreateBankAccountException()
        {
            var bankAccountService = new BankAccountService(new BankAccountRepository(_dbContext), new TransactionRepository(_dbContext));

            bankAccountService.Create(1, 0).GetAwaiter().GetResult();
        }
        public async Task <IActionResult> Create(BankAccountViewModel model)
        {
            var bankAccount = _bankAccountService.Create(model.Map());

            return(new JsonResult(bankAccount));
        }