118 lines
4.1 KiB
Python
118 lines
4.1 KiB
Python
# This file is part of Tradon. The COPYRIGHT file at the top level of
|
|
# this repository contains the full copyright notices and license terms.
|
|
|
|
from datetime import date
|
|
from decimal import Decimal
|
|
|
|
from trytond.exceptions import UserError
|
|
from trytond.modules.currency.tests import create_currency
|
|
from trytond.pool import Pool
|
|
from trytond.tests.test_tryton import ModuleTestCase, with_transaction
|
|
|
|
|
|
class TradeFinanceTestCase(ModuleTestCase):
|
|
'Test Trade Finance module'
|
|
module = 'trade_finance'
|
|
|
|
def create_facility(self):
|
|
pool = Pool()
|
|
Bank = pool.get('bank')
|
|
Facility = pool.get('trade_finance.facility')
|
|
Party = pool.get('party.party')
|
|
|
|
currency = create_currency('USD')
|
|
party = Party(name='Test Bank')
|
|
party.save()
|
|
bank = Bank(party=party)
|
|
bank.save()
|
|
facility = Facility(
|
|
name='Test Facility',
|
|
tfe=bank,
|
|
currency=currency,
|
|
commitment_status='committed',
|
|
date_from=date(2026, 1, 1),
|
|
date_to=date(2026, 12, 31))
|
|
facility.save()
|
|
return facility, currency
|
|
|
|
@with_transaction()
|
|
def test_sublimit_inherits_currency_and_dates(self):
|
|
'Test sublimit inherits currency and dates from parent'
|
|
pool = Pool()
|
|
Limit = pool.get('trade_finance.facility_limit')
|
|
|
|
facility, currency = self.create_facility()
|
|
root, = Limit.create([{
|
|
'facility': facility.id,
|
|
'name': 'Global limit',
|
|
'currency': currency.id,
|
|
'amount': Decimal('100.00'),
|
|
'date_from': date(2026, 1, 1),
|
|
'date_to': date(2026, 12, 31),
|
|
}])
|
|
child, = Limit.create([{
|
|
'parent': root.id,
|
|
'name': 'Trading limit',
|
|
'amount': Decimal('50.00'),
|
|
}])
|
|
|
|
self.assertEqual(child.facility, facility)
|
|
self.assertEqual(child.currency, currency)
|
|
self.assertEqual(child.date_from, root.date_from)
|
|
self.assertEqual(child.date_to, root.date_to)
|
|
|
|
@with_transaction()
|
|
def test_sublimit_dates_must_stay_within_parent(self):
|
|
'Test sublimit dates stay within parent dates'
|
|
pool = Pool()
|
|
Limit = pool.get('trade_finance.facility_limit')
|
|
|
|
facility, currency = self.create_facility()
|
|
root, = Limit.create([{
|
|
'facility': facility.id,
|
|
'name': 'Global limit',
|
|
'currency': currency.id,
|
|
'amount': Decimal('100.00'),
|
|
'date_from': date(2026, 1, 1),
|
|
'date_to': date(2026, 12, 31),
|
|
}])
|
|
|
|
with self.assertRaises(UserError):
|
|
Limit.create([{
|
|
'parent': root.id,
|
|
'name': 'Late limit',
|
|
'amount': Decimal('50.00'),
|
|
'date_from': date(2026, 1, 1),
|
|
'date_to': date(2027, 1, 1),
|
|
}])
|
|
|
|
@with_transaction()
|
|
def test_currency_change_cascades_to_sublimits(self):
|
|
'Test root currency changes cascade to sublimits'
|
|
pool = Pool()
|
|
Limit = pool.get('trade_finance.facility_limit')
|
|
|
|
facility, currency = self.create_facility()
|
|
other_currency = create_currency('EUR')
|
|
root, = Limit.create([{
|
|
'facility': facility.id,
|
|
'name': 'Global limit',
|
|
'currency': currency.id,
|
|
'amount': Decimal('100.00'),
|
|
'date_from': date(2026, 1, 1),
|
|
'date_to': date(2026, 12, 31),
|
|
}])
|
|
child, = Limit.create([{
|
|
'parent': root.id,
|
|
'name': 'Trading limit',
|
|
'amount': Decimal('50.00'),
|
|
}])
|
|
|
|
Limit.write([root], {'currency': other_currency.id})
|
|
child = Limit(child.id)
|
|
|
|
self.assertEqual(child.currency, other_currency)
|
|
|
|
|
|
del ModuleTestCase
|