forked from Mapan/odoo17e
110 lines
4.5 KiB
Python
110 lines
4.5 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
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, chart_template_ref=None):
|
|
super().setUpClass(chart_template_ref=chart_template_ref)
|
|
|
|
cls.gold_bank_journal = cls.env['account.journal'].create({
|
|
'name': 'Gold Bank Journal',
|
|
'type': 'bank',
|
|
'code': 'GOLB',
|
|
'currency_id': cls.currency_data['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.gold_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):
|
|
""" 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
|
|
: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': 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
|
|
})
|
|
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=200, 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
|