public void Should_update_account_balance_if_validation_is_successful()
        {
            const string accountNumber          = "12312312ABC";
            const int    initialAccountBalance  = 224;
            const int    expectedAccountBalance = 102;
            var          request = new MakePaymentRequest
            {
                PaymentScheme       = PaymentScheme.Bacs,
                DebtorAccountNumber = accountNumber,
                Amount = 122
            };
            var account = accountBuilder
                          .WithAccountNumberAs(accountNumber)
                          .WithBalanceAs(initialAccountBalance)
                          .Build();

            config.DataStoreType.Returns(DataStoreType.Account);
            accountDataStore.GetAccount(accountNumber).Returns(account);
            bacsValidator.Validate(account, request)
            .Returns(MakePaymentResult.Ok);
            var paymentService = CreateService();

            paymentService.MakePayment(request);

            account.Balance.Should().Be(expectedAccountBalance);
        }
        public PaymentServiceTests()
        {
            accountBuilder = new AccountBuilder();

            config = Substitute.For <IConfiguration>();

            accountDataStores      = Substitute.For <IIndex <DataStoreType, IProvideAccountData> >();
            accountDataStore       = Substitute.For <IProvideAccountData>();
            backupAccountDataStore = Substitute.For <IProvideAccountData>();
            accountDataStores[DataStoreType.Account].Returns(accountDataStore);
            accountDataStores[DataStoreType.BackupAccount].Returns(backupAccountDataStore);

            accountValidators = Substitute.For <IIndex <PaymentScheme, IValidatePaymentRequest> >();
            bacsValidator     = Substitute.For <IValidatePaymentRequest>();
            accountValidators[PaymentScheme.Bacs].Returns(bacsValidator);
            bacsValidator.Validate(Arg.Any <Account>(), Arg.Any <MakePaymentRequest>())
            .Returns(MakePaymentResult.Failure);
        }