def test_transfer_comparison():
    dict = {
        'trs_id': uuid.uuid4(),
        'trs_timestamp': '2019-01-21 09:00:00',
        'trs_from': acc1.to_dict(),
        'trs_to': acc2.to_dict(),
        'trs_amount': 100.00
    }
    trs1 = Transfer.from_dict(dict)
    trs2 = Transfer.from_dict(dict)

    assert trs1 == trs2
def test_transfer_entity_init():
    id = uuid.uuid4()
    trs = Transfer(trs_id=id,
                   trs_timestamp='2019-01-21 00:00:00',
                   trs_from=acc1,
                   trs_to=acc2,
                   trs_amount=45.30)

    assert trs.trs_id == id
    assert trs.trs_timestamp == '2019-01-21 00:00:00'
    assert trs.trs_from == acc1
    assert trs.trs_to == acc2
    assert trs.trs_amount == 45.30
Esempio n. 3
0
    def list(self, filters=None):
        if not filters:
            result = self._entries
        else:
            result = []
            result.extend(self._entries)

            for key, value in filters.items():
                result = [
                    e for e in result if self._apply_filter(e, key, value)
                ]

        return [Transfer.from_dict(r) for r in result]
def transfer_domain_entities():
    test_trs1 = Transfer(trs_id=uuid.uuid4(),
                         trs_timestamp="2019-01-22 09:00:00",
                         trs_from=Account("1234567890F", 1000),
                         trs_to=Account("3333333333A", 1000),
                         trs_amount=321.00)
    test_trs2 = Transfer(trs_id=uuid.uuid4(),
                         trs_timestamp="2019-01-22 09:10:20",
                         trs_from=Account("4444444444C", 2000),
                         trs_to=Account("7765432255B", 1000),
                         trs_amount=1234.50)
    test_trs3 = Transfer(trs_id=uuid.uuid4(),
                         trs_timestamp="2019-01-23 15:05:04",
                         trs_from=Account("5555555555E", 1000),
                         trs_to=Account("6666666666V", 1000),
                         trs_amount=400.00)
    test_trs4 = Transfer(trs_id=uuid.uuid4(),
                         trs_timestamp="2019-01-24 14:00:59",
                         trs_from=Account("7777777777A", 1000),
                         trs_to=Account("1111188888B", 1000),
                         trs_amount=492.50)

    return [test_trs1, test_trs2, test_trs3, test_trs4]
def test_transfer_from_dict():
    id = uuid.uuid4()
    dict = {
        'trs_id': id,
        'trs_timestamp': '2019-01-21 09:00:00',
        'trs_from': acc1.to_dict(),
        'trs_to': acc2.to_dict(),
        'trs_amount': 100.00
    }
    trs = Transfer.from_dict(dict)

    assert trs.trs_id == id
    assert trs.trs_timestamp == '2019-01-21 09:00:00'
    assert trs.trs_from == acc1
    assert trs.trs_to == acc2
    assert trs.trs_amount == 100.00
Esempio n. 6
0
    def execute(self, request):
        with self._uowm.start() as unit_of_work:
            try:
                if not request:
                    response = rs.ResponseFailure.from_invalid_request(request)

                elif len(request.errors) > 0:
                    response = rs.ResponseFailure.build_parameters_error(
                        'parameter not in the correct format')

                else:
                    _acc_from = unit_of_work.accounts.find_account(
                        account_code=request.transfer['from'])
                    _acc_to = unit_of_work.accounts.find_account(
                        account_code=request.transfer['to'])

                    if request.transfer['from'] == request.transfer['to']:
                        response = rs.ResponseFailure.build_parameters_error(
                            'payer account must be different than the payee')

                    elif _acc_from is None or _acc_to is None:
                        response = rs.ResponseFailure.build_parameters_error(
                            "account doesn't exist")

                    else:
                        _trs = Transfer(request.transfer['id'],
                                        request.transfer['timestamp'],
                                        _acc_from, _acc_to,
                                        request.transfer['amount'])

                        unit_of_work.accounts.account_withdraw(
                            account=_acc_from, amount=_trs.trs_amount)
                        unit_of_work.accounts.account_deposit(
                            account=_acc_to, amount=_trs.trs_amount)
                        unit_of_work.transfers.add_transfer(trs=_trs)
                        unit_of_work.commit()
                        response = rs.ResponseSuccess()

            except Exception as e:
                unit_of_work.rollback()
                response = rs.ResponseFailure.build_system_error(e)

        return response
Esempio n. 7
0
def test_transfer_serielizer():
    _id = str(uuid.uuid4())
    test_trs = Transfer(trs_id=_id,
                        trs_timestamp="2019-01-22 09:00:00",
                        trs_from=Account.from_dict({
                            "code": "222222222M",
                            "balance": 1000
                        }),
                        trs_to=Account.from_dict({
                            "code": "1111111111V",
                            "balance": 1000
                        }),
                        trs_amount=321.45)
    expected = '''
            {
                "trs_id":"''' + _id + '''",
                "trs_timestamp":"2019-01-22 09:00:00",
                "trs_from":{"code":"222222222M", "balance":1000},
                "trs_to":{"code":"1111111111V", "balance":1000},
                "trs_amount":321.45
            }'''

    json_trs = json.dumps(test_trs, cls=TransferEncoder)
    assert json.loads(json_trs) == json.loads(expected)
    }
transfer_dict3 = {
        'trs_id':str(uuid.uuid4()),
        'trs_timestamp':"2019-01-23 15:05:04",
        'trs_from':{'code':"5555555555E", 'balance': 1000},
        'trs_to':{'code':"7765432255B", 'balance': 1000},
        'trs_amount':400.00
    }
transfer_dict4 = {
        'trs_id':str(uuid.uuid4()),
        'trs_timestamp':"2019-01-24 14:00:59",
        'trs_from':{'code':"7777777777A", 'balance': 1000},
        'trs_to':{'code':"1111188888B", 'balance': 1000},
        'trs_amount':492.50
    }
trs1 = Transfer.from_dict(transfer_dict1)
trs2 = Transfer.from_dict(transfer_dict2)
trs3 = Transfer.from_dict(transfer_dict3)
trs4 = Transfer.from_dict(transfer_dict4)

test_transfers = [trs1, trs2, trs3, trs4]


@mock.patch('bankaccount.usecases.transfer_usecases.TransferHistoryUseCase')
def test_get_transfers(mock_usecase, client):
    mock_usecase().execute.return_value = resp.ResponseSuccess(test_transfers)
    http_response = client.get('/transfers')

    assert json.loads(http_response.data.decode('UTF-8')) == [transfer_dict1, transfer_dict2, 
                                                            transfer_dict3, transfer_dict4]
    assert http_response.status_code == 200
import json
from unittest import mock

from bankaccount.usecases import response_objects as resp
from bankaccount.entities.transfer import Transfer
from bankaccount.entities.account import Account

test_trs = Transfer(trs_id=1,
                    trs_timestamp="2019-01-22 09:00:00",
                    trs_from=Account.from_dict({
                        'code': "1234567890F",
                        'balance': 1000
                    }),
                    trs_to=Account.from_dict({
                        'code': "3333333333A",
                        'balance': 1000
                    }),
                    trs_amount=321.00)

mimetype = 'application/json'
headers = {'Content-Type': mimetype, 'Accept': mimetype}
data = {'from': '1234567890F', 'to': '3333333333A', 'amount': 321.00}


@mock.patch('bankaccount.usecases.transfer_usecases.TransferAmountUseCase')
def test_post_transfer(mock_usecase, client):
    mock_usecase().execute.return_value = resp.ResponseSuccess(test_trs)
    http_response = client.post('/transfer',
                                data=json.dumps(data),
                                headers=headers)