Files
enterprise-addons/account_online_synchronization/tests/common.py
T

120 lines
4.9 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from copy import deepcopy
from odoo import Command, fields
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
from odoo.tests import tagged
from unittest.mock import MagicMock
@tagged('post_install', '-at_install')
class AccountOnlineSynchronizationCommon(AccountTestInvoicingCommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.other_currency = cls.setup_other_currency('EUR')
cls.euro_bank_journal = cls.env['account.journal'].create({
'name': 'Euro Bank Journal',
'type': 'bank',
'code': 'EURB',
'currency_id': cls.other_currency.id,
})
cls.account_online_link = cls.env['account.online.link'].create({
'name': 'Test Bank',
'client_id': 'client_id_1',
'refresh_token': 'refresh_token',
'access_token': 'access_token',
})
cls.account_online_account = cls.env['account.online.account'].create({
'name': 'MyBankAccount',
'account_online_link_id': cls.account_online_link.id,
'journal_ids': [Command.set(cls.euro_bank_journal.id)]
})
cls.BankStatementLine = cls.env['account.bank.statement.line']
def setUp(self):
super().setUp()
self.transaction_id = 1
self.account_online_account.balance = 0.0
def _create_one_online_transaction(self, transaction_identifier=None, date=None, payment_ref=None, amount=10.0, partner_name=None, foreign_currency_code=None, amount_currency=8.0, end_to_end_uuid=None, transaction_details=False):
""" This method allows to create an online transaction granularly
:param transaction_identifier: Online identifier of the transaction, by default transaction_id from the
setUp. If used, transaction_id is not incremented.
:param date: Date of the transaction, by default the date of today
:param payment_ref: Label of the transaction
:param amount: Amount of the transaction, by default equals 10.0
:param foreign_currency_code: Code of transaction's foreign currency
:param amount_currency: Amount of transaction in foreign currency, update transaction only if foreign_currency_code is given, by default equals 8.0
:param end_to_end_uuid: Unique identifier of the transaction.
:param transaction_details: Whether the transaction details should be included or not, by default False
:return: A dictionnary representing an online transaction (not formatted)
"""
transaction_identifier = transaction_identifier if transaction_identifier is not None else self.transaction_id
if date:
date = date if isinstance(date, str) else fields.Date.to_string(date)
else:
date = fields.Date.to_string(fields.Date.today())
payment_ref = payment_ref or f'transaction_{transaction_identifier}'
transaction = {
'online_transaction_identifier': str(transaction_identifier),
'date': date,
'payment_ref': payment_ref,
'amount': amount,
'partner_name': partner_name,
}
if foreign_currency_code:
transaction.update({
'foreign_currency_code': foreign_currency_code,
'amount_currency': amount_currency
})
if end_to_end_uuid:
transaction['end_to_end_uuid'] = end_to_end_uuid
if transaction_details:
transaction['transaction_details'] = deepcopy(transaction)
return transaction
def _create_online_transactions(self, dates):
""" This method returns a list of transactions with the
given dates.
All amounts equals 10.0
:param dates: A list of dates, one transaction is created for each given date.
:return: A formatted list of transactions
"""
transactions = []
for date in dates:
transactions.append(self._create_one_online_transaction(date=date))
self.transaction_id += 1
return self.account_online_account._format_transactions(transactions)
def _mock_odoofin_response(self, data=None):
if not data:
data = {}
mock_response = MagicMock()
mock_response.status_code = 200
mock_response.json.return_value = {
'result': data,
}
return mock_response
def _mock_odoofin_error_response(self, code=0, message='Default', data=None):
if not data:
data = {}
mock_response = MagicMock()
mock_response.status_code = 200
mock_response.json.return_value = {
'error': {
'code': code,
'message': message,
'data': data,
},
}
return mock_response