Files
tradon/modules/bank/tests/test_module.py
2026-03-14 09:42:12 +00:00

234 lines
7.2 KiB
Python

# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import unittest
try:
import schwifty
except ImportError:
schwifty = None
from trytond.model.exceptions import SQLConstraintError
from trytond.modules.bank.exceptions import InvalidBIC
from trytond.modules.currency.tests import create_currency
from trytond.modules.party.tests import PartyCheckReplaceMixin
from trytond.pool import Pool
from trytond.tests.test_tryton import ModuleTestCase, with_transaction
class BankTestCase(PartyCheckReplaceMixin, ModuleTestCase):
'Test Bank module'
module = 'bank'
@with_transaction()
def test_bic_validation(self):
"Test BIC validation"
pool = Pool()
Party = pool.get('party.party')
Bank = pool.get('bank')
party = Party(name='Test')
party.save()
bank = Bank(party=party)
bank.save()
bank.bic = 'ABNA BE 2A'
bank.bic = bank.on_change_with_bic()
self.assertEqual(bank.bic, 'ABNABE2A')
bank.save()
with self.assertRaises(InvalidBIC):
bank.bic = 'foo'
bank.save()
@with_transaction()
def test_iban_format(self):
'Test IBAN format'
pool = Pool()
Party = pool.get('party.party')
Bank = pool.get('bank')
Account = pool.get('bank.account')
Number = pool.get('bank.account.number')
party = Party(name='Test')
party.save()
bank = Bank(party=party)
bank.save()
account, = Account.create([{
'bank': bank.id,
'numbers': [('create', [{
'type': 'iban',
'number': 'BE82068896274468',
}, {
'type': 'other',
'number': 'not IBAN',
}])],
}])
iban_number, other_number = account.numbers
self.assertEqual(iban_number.type, 'iban')
self.assertEqual(other_number.type, 'other')
# Test format on create
self.assertEqual(iban_number.number, 'BE82 0688 9627 4468')
self.assertEqual(other_number.number, 'not IBAN')
# Test format on write
iban_number.number = 'BE82068896274468'
iban_number.type = 'iban'
iban_number.save()
self.assertEqual(iban_number.number, 'BE82 0688 9627 4468')
other_number.number = 'still not IBAN'
other_number.save()
self.assertEqual(other_number.number, 'still not IBAN')
Number.write([iban_number, other_number], {
'number': 'BE82068896274468',
})
self.assertEqual(iban_number.number, 'BE82 0688 9627 4468')
self.assertEqual(other_number.number, 'BE82068896274468')
@with_transaction()
def test_account_rec_name_without_number(self):
"Test account record name without number"
pool = Pool()
Account = pool.get('bank.account')
account = Account()
account.save()
self.assertEqual(account.rec_name, "(%s)" % account.id)
@with_transaction()
def test_account_rec_name_with_number(self):
"Test account record name with number"
pool = Pool()
Account = pool.get('bank.account')
Number = pool.get('bank.account.number')
account = Account(numbers=[
Number(type='other', number="1234")])
account.save()
self.assertEqual(account.rec_name, "1234")
@with_transaction()
def test_account_rec_name_with_bank(self):
"Test account record name with bank"
pool = Pool()
Account = pool.get('bank.account')
Bank = pool.get('bank')
Number = pool.get('bank.account.number')
Party = pool.get('party.party')
party = Party(name="Bank")
party.save()
bank = Bank(party=party)
bank.save()
account = Account(
numbers=[Number(type='other', number="1234")],
bank=bank)
account.save()
self.assertEqual(account.rec_name, "1234 @ Bank")
@with_transaction()
def test_account_rec_name_with_currency(self):
"Test account record name with currency"
pool = Pool()
Account = pool.get('bank.account')
Number = pool.get('bank.account.number')
currency = create_currency("USD")
account = Account(
numbers=[Number(type='other', number="1234")],
currency=currency)
account.save()
self.assertEqual(account.rec_name, "1234 [USD]")
@with_transaction()
def test_number_single_iban(self):
"Test number has single IBAN"
pool = Pool()
Account = pool.get('bank.account')
Number = pool.get('bank.account.number')
account = Account(numbers=[
Number(type='iban', number="BE82 0688 9627 4468"),
Number(type='iban', number="BE67 0682 4952 8887"),
])
with self.assertRaises(SQLConstraintError):
account.save()
@with_transaction()
def test_number_iban_unique(self):
"Test number has single IBAN"
pool = Pool()
Account = pool.get('bank.account')
Number = pool.get('bank.account.number')
account = Account(numbers=[
Number(type='iban', number="BE82 0688 9627 4468"),
])
account.save()
account = Account(numbers=[
Number(type='iban', number="BE82 0688 9627 4468"),
])
with self.assertRaises(SQLConstraintError):
account.save()
@unittest.skipIf(schwifty is None, "requires schwifty")
@with_transaction()
def test_guess_new_bank(self):
"Test guess new bank"
pool = Pool()
Account = pool.get('bank.account')
Number = pool.get('bank.account.number')
account = Account(numbers=[
Number(type='iban', number="BE82 0688 9627 4468")])
account.save()
self.assertTrue(account.bank)
self.assertEqual(account.bank.bic, 'GKCCBEBB')
self.assertEqual(account.bank.party.name, "BELFIUS BANK")
@unittest.skipIf(schwifty is None, "requires schwifty")
@with_transaction()
def test_guess_existing_bank(self):
"Test guess existing bank"
pool = Pool()
Account = pool.get('bank.account')
Bank = pool.get('bank')
Number = pool.get('bank.account.number')
account1 = Account(numbers=[
Number(type='iban', number="BE82 0688 9627 4468")])
account1.save()
account2 = Account(numbers=[
Number(type='iban', number="BE67 0682 4952 8887")])
account2.save()
self.assertEqual(len(Bank.search([])), 1)
@with_transaction()
def test_guess_bank_without_iban(self):
"Test guess bank without IBAN"
pool = Pool()
Account = pool.get('bank.account')
Number = pool.get('bank.account.number')
account = Account(numbers=[
Number(type='other', number="123456")])
account.save()
self.assertIsNone(account.bank)
del ModuleTestCase