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
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
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
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)