def create_app():
# Set up framework and service classes
    app = Flask(__name__)
    app.config.SWAGGER_UI_DOC_EXPANSION = 'list'
    api = Api(app, title='My Banking API',
            description='A simple banking API for learning Test-Driven-Development')
    bank = Bank()

    # Custom API documentation
    add_money = api.model("Add", {
        'name': fields.String,
        'amount': fields.Integer
    })


    @api.route('/accounts/<string:name>')
    class AccountResource(Resource):
        def post(self, name):
            """Create a new named Account"""
            try:
                return bank.create_account(name).to_dict()
            except Exception as e:
                abort(400, str(e))

        def get(self, name):
            """Get an Account"""
            try:
                return bank.get_account(name).to_dict()
            except Exception:
                abort(404, 'Account not found')


    @api.route('/money')
    class MoneyResource(Resource):
        @api.expect(add_money)
        def post(self):
            """Add funds to an account"""
            parser = reqparse.RequestParser()
            parser.add_argument('name', type=str, help='Account name')
            parser.add_argument('amount', type=int, help='Transfer amount (pence)')
            args = parser.parse_args()
            return bank.add_funds(**args)

    return app
def bank() -> Bank:
    return Bank()
Exemple #3
0
def test_get_account_raises_error_if_no_account_matches(bank: Bank):
    bank.create_account('Name 1')

    # This means: assert an exception is raised during the following block
    with pytest.raises(ValueError):
        bank.get_account('Name 2')
Exemple #4
0
def test_can_create_and_get_account(bank: Bank):
    bank.create_account('Test')
    account = bank.get_account('Test')

    assert len(bank.accounts) == 1
    assert account.name == 'Test'
Exemple #5
0
def test_create_account_raises_error_if_name_blank(bank: Bank):
    # This means: assert an exception is raised during the following block
    with pytest.raises(Exception):
        bank.create_account('')
Exemple #6
0
from dataclasses import asdict

from flask import Flask
from flask_restx import Api, Resource, reqparse, fields, abort

from bank_api.bank import Bank

# Set up framework and service classes

app = Flask(__name__)
api = Api(
    app,
    title='My Banking API',
    description='A simple banking API for learning Test-Driven-Development')
bank = Bank()

# Custom API documentation
add_money = api.model("Add", {'name': fields.String, 'amount': fields.Integer})


@api.route('/accounts/<string:name>')
class AccountResource(Resource):
    def post(self, name):
        """Create a new named Account"""
        try:
            return asdict(bank.create_account(name))
        except Exception as e:
            abort(400, str(e))

    def get(self, name):
        """Get an Account"""
Exemple #7
0
def bank() -> Bank:
    bank = Bank()
    bank.create_account(account_name)
    return bank