예제 #1
0
        public void Factory_Should_Return_BackupAccountDataStore_When_DataStoreTypeIsBackup()
        {
            _appSettings
            .Setup(x => x.GetDataStoreTypeConfigValue(Key))
            .Returns("Backup");

            var dataStore = _sut.Create();

            Assert.That(dataStore, Is.InstanceOf <BackupAccountDataStore>());
            _appSettings.Verify(x => x.GetDataStoreTypeConfigValue(Key));
        }
        public void WhenUseBackupDataStore_IsTrue_Factory_Returns_BackupAccountDataStore()
        {
            //arrange
            _dataStoreConfigMock.Setup(c => c.UseBackupDataStore).Returns(true);

            //act
            var accountDataStore = _accountDataStoreFactory.Create();

            //assert
            accountDataStore.Should().NotBeNull();
            accountDataStore.Should().BeOfType(typeof(BackupAccountDataStore));
        }
예제 #3
0
        public MakePaymentResult MakePayment(MakePaymentRequest request)
        {
            var result           = new MakePaymentResult();
            var dataStoreType    = ConfigurationManager.AppSettings["DataStoreType"] ?? String.Empty;
            var accountDataStore = _accountDataStoreFactory.Create(dataStoreType);
            var account          = accountDataStore.GetAccount(request.DebtorAccountNumber);

            if (account == null)
            {
                return(result);
            }

            var paymentRule = _paymentRuleFactory.Create(request.PaymentScheme);

            if (paymentRule.IsPaymentAllowed(account, request.Amount))
            {
                account.Balance -= request.Amount;
                accountDataStore.UpdateAccount(account);
                //Have incorporated unit of work so account check and update can be atomic
                accountDataStore.Commit();
                result.Success = true;
            }

            return(result);
        }
예제 #4
0
        public MakePaymentResult MakePayment(MakePaymentRequest request)
        {
            var dataStore = _dataStoreFactory.Create();
            var account   = dataStore.GetAccount(request.DebtorAccountNumber);

            if (CanMakePayment(request, account))
            {
                account.Balance -= request.Amount;
                dataStore.UpdateAccount(account);

                return(MakePaymentResult.CreateSuccess());
            }

            return(MakePaymentResult.CreateFail());
        }
        public MakePaymentResult MakePayment(MakePaymentRequest request)
        {
            var accountDataStore = _accountDataStoreFactory.Create();

            var account = accountDataStore.GetAccount(request.DebtorAccountNumber);

            var result = new MakePaymentResult
            {
                Success = _paymentRules.Any(rule => rule.Apply(account, request))
            };

            if (result.Success)
            {
                account.Withdraw(request.Amount);

                accountDataStore.UpdateAccount(account);
            }

            return(result);
        }
예제 #6
0
 public PaymentService(IAccountDataStoreFactory accountDataStoreFactory,
                       IPaymentAccountStateValidator accountStateValidator)
 {
     _accountStateValidator = accountStateValidator;
     _accountDataStore      = accountDataStoreFactory.Create();
 }