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)); }
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); }
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); }
public PaymentService(IAccountDataStoreFactory accountDataStoreFactory, IPaymentAccountStateValidator accountStateValidator) { _accountStateValidator = accountStateValidator; _accountDataStore = accountDataStoreFactory.Create(); }