changeset 5820bea48b39 in modules/account_payment_sepa:default
details: 
https://hg.tryton.org/modules/account_payment_sepa?cmd=changeset&node=5820bea48b39
description:
        Replace test setuptools command by unittest discover

        issue9215
        review389851002
diffstat:

 setup.py                           |    6 +-
 tests/__init__.py                  |    8 +-
 tests/test_account_payment_sepa.py |  437 -------------------------------------
 tests/test_module.py               |  431 ++++++++++++++++++++++++++++++++++++
 tox.ini                            |    3 +-
 5 files changed, 438 insertions(+), 447 deletions(-)

diffs (926 lines):

diff -r 7c59bc82e0f7 -r 5820bea48b39 setup.py
--- a/setup.py  Sat Apr 16 11:31:51 2022 +0200
+++ b/setup.py  Sat Apr 16 18:30:16 2022 +0200
@@ -141,13 +141,13 @@
     license='GPL-3',
     python_requires='>=3.7',
     install_requires=requires,
+    extras_require={
+        'test': tests_require,
+        },
     dependency_links=dependency_links,
     zip_safe=False,
     entry_points="""
     [trytond.modules]
     account_payment_sepa = trytond.modules.account_payment_sepa
     """,
-    test_suite='tests',
-    test_loader='trytond.test_loader:Loader',
-    tests_require=tests_require,
     )
diff -r 7c59bc82e0f7 -r 5820bea48b39 tests/__init__.py
--- a/tests/__init__.py Sat Apr 16 11:31:51 2022 +0200
+++ b/tests/__init__.py Sat Apr 16 18:30:16 2022 +0200
@@ -1,10 +1,6 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 
-try:
-    from trytond.modules.account_payment_sepa.tests.test_account_payment_sepa 
import (  # noqa: E501
-        suite, validate_file)
-except ImportError:
-    from .test_account_payment_sepa import suite, validate_file
+from .test_module import validate_file
 
-__all__ = ['suite', 'validate_file']
+__all__ = ['validate_file']
diff -r 7c59bc82e0f7 -r 5820bea48b39 tests/test_account_payment_sepa.py
--- a/tests/test_account_payment_sepa.py        Sat Apr 16 11:31:51 2022 +0200
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,437 +0,0 @@
-# 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 os
-import unittest
-from decimal import Decimal
-from io import BytesIO, open
-from unittest.mock import Mock, patch
-
-from lxml import etree
-
-import trytond.tests.test_tryton
-from trytond.exceptions import UserError
-from trytond.modules.account.tests import create_chart
-from trytond.modules.account_payment_sepa.payment import CAMT054
-from trytond.modules.company.tests import (
-    CompanyTestMixin, create_company, set_company)
-from trytond.modules.currency.tests import create_currency
-from trytond.pool import Pool
-from trytond.tests.test_tryton import ModuleTestCase, with_transaction
-from trytond.transaction import Transaction
-
-
-def setup_environment():
-    pool = Pool()
-    Address = pool.get('party.address')
-    Party = pool.get('party.party')
-    Bank = pool.get('bank')
-    Identifier = pool.get('party.identifier')
-
-    currency = create_currency('EUR')
-    company = create_company(currency=currency)
-    sepa = Identifier(party=company.party, code='ES23ZZZ47690558N',
-        type='eu_at_02')
-    sepa.save()
-    bank_party = Party(name='European Bank')
-    bank_party.save()
-    bank = Bank(party=bank_party, bic='BICODEBBXXX')
-    bank.save()
-    customer = Party(name='Customer')
-    address = Address(street='street', postal_code='1234', city='City')
-    customer.addresses = [address]
-    customer.save()
-    return {
-        'company': company,
-        'bank': bank,
-        'customer': customer,
-        }
-
-
-def setup_accounts(bank, company, customer):
-    pool = Pool()
-    Account = pool.get('bank.account')
-    return Account.create([{
-                'bank': bank,
-                'owners': [('add', [company.party])],
-                'currency': company.currency.id,
-                'numbers': [('create', [{
-                                'type': 'iban',
-                                'number': 'ES8200000000000000000000',
-                                }])]}, {
-                'bank': bank,
-                'owners': [('add', [customer])],
-                'currency': company.currency.id,
-                'numbers': [('create', [{
-                                'type': 'iban',
-                                'number': 'ES3600000000050000000001',
-                                }])]}])
-
-
-def setup_mandate(company, customer, account):
-    pool = Pool()
-    Mandate = pool.get('account.payment.sepa.mandate')
-    Date = pool.get('ir.date')
-    return Mandate.create([{
-                'company': company,
-                'party': customer,
-                'account_number': account.numbers[0],
-                'identification': 'MANDATE',
-                'type': 'recurrent',
-                'sequence_type_rcur': False,
-                'signature_date': Date.today(),
-                'state': 'validated',
-                }])[0]
-
-
-def setup_journal(flavor, kind, company, account):
-    pool = Pool()
-    Journal = pool.get('account.payment.journal')
-    journal = Journal()
-    journal.name = flavor
-    journal.company = company
-    journal.currency = company.currency
-    journal.process_method = 'sepa'
-    journal.sepa_bank_account_number = account.numbers[0]
-    journal.sepa_payable_flavor = 'pain.001.001.03'
-    journal.sepa_receivable_flavor = 'pain.008.001.02'
-    setattr(journal, 'sepa_%s_flavor' % kind, flavor)
-    journal.save()
-    return journal
-
-
-def validate_file(flavor, kind, xsd=None):
-    'Test generated files are valid'
-    pool = Pool()
-    Payment = pool.get('account.payment')
-    PaymentGroup = pool.get('account.payment.group')
-    Date = pool.get('ir.date')
-    ProcessPayment = pool.get('account.payment.process', type='wizard')
-
-    if xsd is None:
-        xsd = flavor
-
-    environment = setup_environment()
-    company = environment['company']
-    bank = environment['bank']
-    customer = environment['customer']
-    with set_company(company):
-        company_account, customer_account = setup_accounts(
-            bank, company, customer)
-        setup_mandate(company, customer, customer_account)
-        journal = setup_journal(flavor, kind, company, company_account)
-
-        payment, = Payment.create([{
-                    'company': company,
-                    'party': customer,
-                    'journal': journal,
-                    'kind': kind,
-                    'amount': Decimal('1000.0'),
-                    'state': 'approved' if kind == 'payable' else 'submitted',
-                    'description': 'PAYMENT',
-                    'date': Date.today(),
-                    }])
-
-        session_id, _, _ = ProcessPayment.create()
-        process_payment = ProcessPayment(session_id)
-        with Transaction().set_context(
-                active_model=Payment.__name__, active_ids=[payment.id]):
-            _, data = process_payment.do_process(None)
-        group, = PaymentGroup.browse(data['res_id'])
-        message, = group.sepa_messages
-        assert message.type == 'out', message.type
-        assert message.state == 'waiting', message.state
-        sepa_string = bytes(message.message)
-        sepa_xml = etree.fromstring(sepa_string)
-        schema_file = os.path.join(os.path.dirname(__file__),
-            '%s.xsd' % xsd)
-        schema = etree.XMLSchema(etree.parse(schema_file))
-        schema.assertValid(sepa_xml)
-
-
-class AccountPaymentSepaTestCase(CompanyTestMixin, ModuleTestCase):
-    'Test Account Payment SEPA module'
-    module = 'account_payment_sepa'
-
-    @with_transaction()
-    def test_pain001_001_03(self):
-        'Test pain001.001.03 xsd validation'
-        validate_file('pain.001.001.03', 'payable')
-
-    @with_transaction()
-    def test_pain001_001_05(self):
-        'Test pain001.001.05 xsd validation'
-        validate_file('pain.001.001.05', 'payable')
-
-    @with_transaction()
-    def test_pain001_003_03(self):
-        'Test pain001.003.03 xsd validation'
-        validate_file('pain.001.003.03', 'payable')
-
-    @with_transaction()
-    def test_pain008_001_02(self):
-        'Test pain008.001.02 xsd validation'
-        validate_file('pain.008.001.02', 'receivable')
-
-    @with_transaction()
-    def test_pain008_001_04(self):
-        'Test pain008.001.04 xsd validation'
-        validate_file('pain.008.001.04', 'receivable')
-
-    @with_transaction()
-    def test_pain008_003_02(self):
-        'Test pain008.003.02 xsd validation'
-        validate_file('pain.008.003.02', 'receivable')
-
-    @with_transaction()
-    def test_sepa_mandate_sequence(self):
-        'Test SEPA mandate sequence'
-        pool = Pool()
-        Configuration = pool.get('account.configuration')
-        Sequence = pool.get('ir.sequence')
-        SequenceType = pool.get('ir.sequence.type')
-        Party = pool.get('party.party')
-        Mandate = pool.get('account.payment.sepa.mandate')
-
-        party = Party(name='Test')
-        party.save()
-
-        company = create_company()
-        with set_company(company):
-            mandate = Mandate(party=party)
-            mandate.save()
-            self.assertFalse(mandate.identification)
-
-            sequence_type, = SequenceType.search([
-                    ('name', '=', "SEPA Mandate"),
-                    ], limit=1)
-            sequence = Sequence(name="Test", sequence_type=sequence_type)
-            sequence.save()
-            config = Configuration(1)
-            config.sepa_mandate_sequence = sequence
-            config.save()
-
-            mandate = Mandate(party=party)
-            mandate.save()
-            self.assertTrue(mandate.identification)
-
-    @with_transaction()
-    def test_identification_unique(self):
-        'Test unique identification constraint'
-        pool = Pool()
-        Party = pool.get('party.party')
-        Mandate = pool.get('account.payment.sepa.mandate')
-
-        same_id = '1'
-
-        party = Party(name='Test')
-        party.save()
-
-        company = create_company()
-        with set_company(company):
-            mandate = Mandate(party=party, identification=same_id)
-            mandate.save()
-
-            for i in range(2):
-                mandate = Mandate(party=party)
-                mandate.save()
-
-            mandate = Mandate(party=party, identification='')
-            mandate.save()
-            self.assertEqual(mandate.identification, None)
-
-            Mandate.write([mandate], {
-                    'identification': '',
-                    })
-            self.assertEqual(mandate.identification, None)
-
-            self.assertRaises(UserError, Mandate.create, [{
-                        'party': party.id,
-                        'identification': same_id,
-                        }])
-
-    @with_transaction()
-    def test_payment_sepa_bank_account_number(self):
-        'Test Payment.sepa_bank_account_number'
-        pool = Pool()
-        Payment = pool.get('account.payment')
-        Mandate = pool.get('account.payment.sepa.mandate')
-        AccountNumber = pool.get('bank.account.number')
-        Party = pool.get('party.party')
-        BankAccount = pool.get('bank.account')
-
-        company = create_company()
-        with set_company(company):
-            create_chart(company)
-            account_number = AccountNumber()
-            mandate = Mandate(account_number=account_number)
-            payment = Payment(kind='receivable', sepa_mandate=mandate)
-
-            self.assertEqual(id(payment.sepa_bank_account_number),
-                id(account_number))
-
-            other_account_number = AccountNumber(type='other')
-            iban_account_number = AccountNumber(type='iban')
-            bank_account = BankAccount(
-                numbers=[other_account_number, iban_account_number])
-            party = Party(
-                bank_accounts=[bank_account])
-            payment = Payment(kind='payable', party=party)
-
-            self.assertEqual(id(payment.sepa_bank_account_number),
-                id(iban_account_number))
-
-    @with_transaction()
-    def test_payment_sequence_type(self):
-        'Test payment sequence type'
-        pool = Pool()
-        Date = pool.get('ir.date')
-        Payment = pool.get('account.payment')
-        ProcessPayment = pool.get('account.payment.process', type='wizard')
-
-        environment = setup_environment()
-        company = environment['company']
-        bank = environment['bank']
-        customer = environment['customer']
-        with set_company(company):
-            company_account, customer_account = setup_accounts(
-                bank, company, customer)
-            mandate = setup_mandate(company, customer, customer_account)
-            journal = setup_journal('pain.008.001.02', 'receivable',
-                company, company_account)
-
-            self.assertFalse(mandate.has_payments)
-            self.assertEqual(mandate.sequence_type, 'FRST')
-            mandate.sequence_type_rcur = True
-            self.assertEqual(mandate.sequence_type, 'RCUR')
-            mandate.sequence_type_rcur = False
-
-            payment, = Payment.create([{
-                        'company': company,
-                        'party': customer,
-                        'journal': journal,
-                        'kind': 'receivable',
-                        'amount': Decimal('1000.0'),
-                        'state': 'submitted',
-                        'description': 'PAYMENT',
-                        'date': Date.today(),
-                        }])
-
-            session_id, _, _ = ProcessPayment.create()
-            process_payment = ProcessPayment(session_id)
-            with Transaction().set_context(
-                    active_model=Payment.__name__, active_ids=[payment.id]):
-                _, data = process_payment.do_process(None)
-
-            self.assertEqual(payment.sepa_mandate_sequence_type, 'FRST')
-            self.assertTrue(payment.sepa_mandate.has_payments)
-
-            payments = Payment.create([{
-                        'company': company,
-                        'party': customer,
-                        'journal': journal,
-                        'kind': 'receivable',
-                        'amount': Decimal('2000.0'),
-                        'state': 'submitted',
-                        'description': 'PAYMENT',
-                        'date': Date.today(),
-                        }, {
-                        'company': company,
-                        'party': customer,
-                        'journal': journal,
-                        'kind': 'receivable',
-                        'amount': Decimal('3000.0'),
-                        'state': 'submitted',
-                        'description': 'PAYMENT',
-                        'date': Date.today(),
-                        },
-                    ])
-
-            session_id, _, _ = ProcessPayment.create()
-            process_payment = ProcessPayment(session_id)
-            payment_ids = [p.id for p in payments]
-            with Transaction().set_context(
-                    active_model=Payment.__name__, active_ids=payment_ids):
-                _, data = process_payment.do_process(None)
-
-            for payment in payments:
-                self.assertEqual(payment.sepa_mandate_sequence_type, 'RCUR')
-                self.assertTrue(payment.sepa_info_id)
-            self.assertIsNotNone(payment.group.sepa_id)
-
-    @with_transaction()
-    def handle_camt054(self, flavor):
-        'Handle camt.054'
-        pool = Pool()
-        Message = pool.get('account.payment.sepa.message')
-
-        message_file = os.path.join(os.path.dirname(__file__),
-            '%s.xml' % flavor)
-        with open(message_file, 'rb') as fp:
-            message = fp.read()
-        namespace = Message.get_namespace(message)
-        self.assertEqual(namespace,
-            'urn:iso:std:iso:20022:tech:xsd:%s' % flavor)
-
-        payment = Mock()
-        Payment = Mock()
-        Payment.search.return_value = [payment]
-
-        handler = CAMT054(BytesIO(message), Payment)
-
-        self.assertEqual(handler.msg_id, 'AAAASESS-FP-00001')
-        Payment.search.assert_called_with([
-                ('sepa_end_to_end_id', '=', 'MUELL/FINP/RA12345'),
-                ('kind', '=', 'payable'),
-                ])
-        Payment.succeed.assert_called_with([payment])
-
-        payment.reset_mock()
-        Payment.reset_mock()
-        with patch.object(CAMT054, 'is_returned') as is_returned:
-            is_returned.return_value = True
-            handler = CAMT054(BytesIO(message), Payment)
-
-            Payment.save.assert_called_with([payment])
-            Payment.fail.assert_called_with([payment])
-
-    def test_camt054_001_01(self):
-        'Test camt.054.001.01 handling'
-        self.handle_camt054('camt.054.001.01')
-
-    def test_camt054_001_02(self):
-        'Test camt.054.001.02 handling'
-        self.handle_camt054('camt.054.001.02')
-
-    def test_camt054_001_03(self):
-        'Test camt.054.001.03 handling'
-        self.handle_camt054('camt.054.001.03')
-
-    def test_camt054_001_04(self):
-        'Test camt.054.001.04 handling'
-        self.handle_camt054('camt.054.001.04')
-
-    @with_transaction()
-    def test_sepa_mandate_report(self):
-        'Test sepa mandate report'
-        pool = Pool()
-        Report = pool.get('account.payment.sepa.mandate', type='report')
-
-        environment = setup_environment()
-        company = environment['company']
-        bank = environment['bank']
-        customer = environment['customer']
-        with set_company(company):
-            company_account, customer_account = setup_accounts(
-                bank, company, customer)
-            mandate = setup_mandate(company, customer, customer_account)
-
-            oext, content, _, _ = Report.execute([mandate.id], {})
-            self.assertEqual(oext, 'odt')
-            self.assertTrue(content)
-
-
-def suite():
-    suite = trytond.tests.test_tryton.suite()
-    suite.addTests(unittest.TestLoader().loadTestsFromTestCase(
-            AccountPaymentSepaTestCase))
-    return suite
diff -r 7c59bc82e0f7 -r 5820bea48b39 tests/test_module.py
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test_module.py      Sat Apr 16 18:30:16 2022 +0200
@@ -0,0 +1,431 @@
+# 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 os
+from decimal import Decimal
+from io import BytesIO, open
+from unittest.mock import Mock, patch
+
+from lxml import etree
+
+from trytond.exceptions import UserError
+from trytond.modules.account.tests import create_chart
+from trytond.modules.account_payment_sepa.payment import CAMT054
+from trytond.modules.company.tests import (
+    CompanyTestMixin, create_company, set_company)
+from trytond.modules.currency.tests import create_currency
+from trytond.pool import Pool
+from trytond.tests.test_tryton import ModuleTestCase, with_transaction
+from trytond.transaction import Transaction
+
+
+def setup_environment():
+    pool = Pool()
+    Address = pool.get('party.address')
+    Party = pool.get('party.party')
+    Bank = pool.get('bank')
+    Identifier = pool.get('party.identifier')
+
+    currency = create_currency('EUR')
+    company = create_company(currency=currency)
+    sepa = Identifier(party=company.party, code='ES23ZZZ47690558N',
+        type='eu_at_02')
+    sepa.save()
+    bank_party = Party(name='European Bank')
+    bank_party.save()
+    bank = Bank(party=bank_party, bic='BICODEBBXXX')
+    bank.save()
+    customer = Party(name='Customer')
+    address = Address(street='street', postal_code='1234', city='City')
+    customer.addresses = [address]
+    customer.save()
+    return {
+        'company': company,
+        'bank': bank,
+        'customer': customer,
+        }
+
+
+def setup_accounts(bank, company, customer):
+    pool = Pool()
+    Account = pool.get('bank.account')
+    return Account.create([{
+                'bank': bank,
+                'owners': [('add', [company.party])],
+                'currency': company.currency.id,
+                'numbers': [('create', [{
+                                'type': 'iban',
+                                'number': 'ES8200000000000000000000',
+                                }])]}, {
+                'bank': bank,
+                'owners': [('add', [customer])],
+                'currency': company.currency.id,
+                'numbers': [('create', [{
+                                'type': 'iban',
+                                'number': 'ES3600000000050000000001',
+                                }])]}])
+
+
+def setup_mandate(company, customer, account):
+    pool = Pool()
+    Mandate = pool.get('account.payment.sepa.mandate')
+    Date = pool.get('ir.date')
+    return Mandate.create([{
+                'company': company,
+                'party': customer,
+                'account_number': account.numbers[0],
+                'identification': 'MANDATE',
+                'type': 'recurrent',
+                'sequence_type_rcur': False,
+                'signature_date': Date.today(),
+                'state': 'validated',
+                }])[0]
+
+
+def setup_journal(flavor, kind, company, account):
+    pool = Pool()
+    Journal = pool.get('account.payment.journal')
+    journal = Journal()
+    journal.name = flavor
+    journal.company = company
+    journal.currency = company.currency
+    journal.process_method = 'sepa'
+    journal.sepa_bank_account_number = account.numbers[0]
+    journal.sepa_payable_flavor = 'pain.001.001.03'
+    journal.sepa_receivable_flavor = 'pain.008.001.02'
+    setattr(journal, 'sepa_%s_flavor' % kind, flavor)
+    journal.save()
+    return journal
+
+
+def validate_file(flavor, kind, xsd=None):
+    'Test generated files are valid'
+    pool = Pool()
+    Payment = pool.get('account.payment')
+    PaymentGroup = pool.get('account.payment.group')
+    Date = pool.get('ir.date')
+    ProcessPayment = pool.get('account.payment.process', type='wizard')
+
+    if xsd is None:
+        xsd = flavor
+
+    environment = setup_environment()
+    company = environment['company']
+    bank = environment['bank']
+    customer = environment['customer']
+    with set_company(company):
+        company_account, customer_account = setup_accounts(
+            bank, company, customer)
+        setup_mandate(company, customer, customer_account)
+        journal = setup_journal(flavor, kind, company, company_account)
+
+        payment, = Payment.create([{
+                    'company': company,
+                    'party': customer,
+                    'journal': journal,
+                    'kind': kind,
+                    'amount': Decimal('1000.0'),
+                    'state': 'approved' if kind == 'payable' else 'submitted',
+                    'description': 'PAYMENT',
+                    'date': Date.today(),
+                    }])
+
+        session_id, _, _ = ProcessPayment.create()
+        process_payment = ProcessPayment(session_id)
+        with Transaction().set_context(
+                active_model=Payment.__name__, active_ids=[payment.id]):
+            _, data = process_payment.do_process(None)
+        group, = PaymentGroup.browse(data['res_id'])
+        message, = group.sepa_messages
+        assert message.type == 'out', message.type
+        assert message.state == 'waiting', message.state
+        sepa_string = bytes(message.message)
+        sepa_xml = etree.fromstring(sepa_string)
+        schema_file = os.path.join(os.path.dirname(__file__),
+            '%s.xsd' % xsd)
+        schema = etree.XMLSchema(etree.parse(schema_file))
+        schema.assertValid(sepa_xml)
+
+
+class AccountPaymentSepaTestCase(CompanyTestMixin, ModuleTestCase):
+    'Test Account Payment SEPA module'
+    module = 'account_payment_sepa'
+
+    @with_transaction()
+    def test_pain001_001_03(self):
+        'Test pain001.001.03 xsd validation'
+        validate_file('pain.001.001.03', 'payable')
+
+    @with_transaction()
+    def test_pain001_001_05(self):
+        'Test pain001.001.05 xsd validation'
+        validate_file('pain.001.001.05', 'payable')
+
+    @with_transaction()
+    def test_pain001_003_03(self):
+        'Test pain001.003.03 xsd validation'
+        validate_file('pain.001.003.03', 'payable')
+
+    @with_transaction()
+    def test_pain008_001_02(self):
+        'Test pain008.001.02 xsd validation'
+        validate_file('pain.008.001.02', 'receivable')
+
+    @with_transaction()
+    def test_pain008_001_04(self):
+        'Test pain008.001.04 xsd validation'
+        validate_file('pain.008.001.04', 'receivable')
+
+    @with_transaction()
+    def test_pain008_003_02(self):
+        'Test pain008.003.02 xsd validation'
+        validate_file('pain.008.003.02', 'receivable')
+
+    @with_transaction()
+    def test_sepa_mandate_sequence(self):
+        'Test SEPA mandate sequence'
+        pool = Pool()
+        Configuration = pool.get('account.configuration')
+        Sequence = pool.get('ir.sequence')
+        SequenceType = pool.get('ir.sequence.type')
+        Party = pool.get('party.party')
+        Mandate = pool.get('account.payment.sepa.mandate')
+
+        party = Party(name='Test')
+        party.save()
+
+        company = create_company()
+        with set_company(company):
+            mandate = Mandate(party=party)
+            mandate.save()
+            self.assertFalse(mandate.identification)
+
+            sequence_type, = SequenceType.search([
+                    ('name', '=', "SEPA Mandate"),
+                    ], limit=1)
+            sequence = Sequence(name="Test", sequence_type=sequence_type)
+            sequence.save()
+            config = Configuration(1)
+            config.sepa_mandate_sequence = sequence
+            config.save()
+
+            mandate = Mandate(party=party)
+            mandate.save()
+            self.assertTrue(mandate.identification)
+
+    @with_transaction()
+    def test_identification_unique(self):
+        'Test unique identification constraint'
+        pool = Pool()
+        Party = pool.get('party.party')
+        Mandate = pool.get('account.payment.sepa.mandate')
+
+        same_id = '1'
+
+        party = Party(name='Test')
+        party.save()
+
+        company = create_company()
+        with set_company(company):
+            mandate = Mandate(party=party, identification=same_id)
+            mandate.save()
+
+            for i in range(2):
+                mandate = Mandate(party=party)
+                mandate.save()
+
+            mandate = Mandate(party=party, identification='')
+            mandate.save()
+            self.assertEqual(mandate.identification, None)
+
+            Mandate.write([mandate], {
+                    'identification': '',
+                    })
+            self.assertEqual(mandate.identification, None)
+
+            self.assertRaises(UserError, Mandate.create, [{
+                        'party': party.id,
+                        'identification': same_id,
+                        }])
+
+    @with_transaction()
+    def test_payment_sepa_bank_account_number(self):
+        'Test Payment.sepa_bank_account_number'
+        pool = Pool()
+        Payment = pool.get('account.payment')
+        Mandate = pool.get('account.payment.sepa.mandate')
+        AccountNumber = pool.get('bank.account.number')
+        Party = pool.get('party.party')
+        BankAccount = pool.get('bank.account')
+
+        company = create_company()
+        with set_company(company):
+            create_chart(company)
+            account_number = AccountNumber()
+            mandate = Mandate(account_number=account_number)
+            payment = Payment(kind='receivable', sepa_mandate=mandate)
+
+            self.assertEqual(id(payment.sepa_bank_account_number),
+                id(account_number))
+
+            other_account_number = AccountNumber(type='other')
+            iban_account_number = AccountNumber(type='iban')
+            bank_account = BankAccount(
+                numbers=[other_account_number, iban_account_number])
+            party = Party(
+                bank_accounts=[bank_account])
+            payment = Payment(kind='payable', party=party)
+
+            self.assertEqual(id(payment.sepa_bank_account_number),
+                id(iban_account_number))
+
+    @with_transaction()
+    def test_payment_sequence_type(self):
+        'Test payment sequence type'
+        pool = Pool()
+        Date = pool.get('ir.date')
+        Payment = pool.get('account.payment')
+        ProcessPayment = pool.get('account.payment.process', type='wizard')
+
+        environment = setup_environment()
+        company = environment['company']
+        bank = environment['bank']
+        customer = environment['customer']
+        with set_company(company):
+            company_account, customer_account = setup_accounts(
+                bank, company, customer)
+            mandate = setup_mandate(company, customer, customer_account)
+            journal = setup_journal('pain.008.001.02', 'receivable',
+                company, company_account)
+
+            self.assertFalse(mandate.has_payments)
+            self.assertEqual(mandate.sequence_type, 'FRST')
+            mandate.sequence_type_rcur = True
+            self.assertEqual(mandate.sequence_type, 'RCUR')
+            mandate.sequence_type_rcur = False
+
+            payment, = Payment.create([{
+                        'company': company,
+                        'party': customer,
+                        'journal': journal,
+                        'kind': 'receivable',
+                        'amount': Decimal('1000.0'),
+                        'state': 'submitted',
+                        'description': 'PAYMENT',
+                        'date': Date.today(),
+                        }])
+
+            session_id, _, _ = ProcessPayment.create()
+            process_payment = ProcessPayment(session_id)
+            with Transaction().set_context(
+                    active_model=Payment.__name__, active_ids=[payment.id]):
+                _, data = process_payment.do_process(None)
+
+            self.assertEqual(payment.sepa_mandate_sequence_type, 'FRST')
+            self.assertTrue(payment.sepa_mandate.has_payments)
+
+            payments = Payment.create([{
+                        'company': company,
+                        'party': customer,
+                        'journal': journal,
+                        'kind': 'receivable',
+                        'amount': Decimal('2000.0'),
+                        'state': 'submitted',
+                        'description': 'PAYMENT',
+                        'date': Date.today(),
+                        }, {
+                        'company': company,
+                        'party': customer,
+                        'journal': journal,
+                        'kind': 'receivable',
+                        'amount': Decimal('3000.0'),
+                        'state': 'submitted',
+                        'description': 'PAYMENT',
+                        'date': Date.today(),
+                        },
+                    ])
+
+            session_id, _, _ = ProcessPayment.create()
+            process_payment = ProcessPayment(session_id)
+            payment_ids = [p.id for p in payments]
+            with Transaction().set_context(
+                    active_model=Payment.__name__, active_ids=payment_ids):
+                _, data = process_payment.do_process(None)
+
+            for payment in payments:
+                self.assertEqual(payment.sepa_mandate_sequence_type, 'RCUR')
+                self.assertTrue(payment.sepa_info_id)
+            self.assertIsNotNone(payment.group.sepa_id)
+
+    @with_transaction()
+    def handle_camt054(self, flavor):
+        'Handle camt.054'
+        pool = Pool()
+        Message = pool.get('account.payment.sepa.message')
+
+        message_file = os.path.join(os.path.dirname(__file__),
+            '%s.xml' % flavor)
+        with open(message_file, 'rb') as fp:
+            message = fp.read()
+        namespace = Message.get_namespace(message)
+        self.assertEqual(namespace,
+            'urn:iso:std:iso:20022:tech:xsd:%s' % flavor)
+
+        payment = Mock()
+        Payment = Mock()
+        Payment.search.return_value = [payment]
+
+        handler = CAMT054(BytesIO(message), Payment)
+
+        self.assertEqual(handler.msg_id, 'AAAASESS-FP-00001')
+        Payment.search.assert_called_with([
+                ('sepa_end_to_end_id', '=', 'MUELL/FINP/RA12345'),
+                ('kind', '=', 'payable'),
+                ])
+        Payment.succeed.assert_called_with([payment])
+
+        payment.reset_mock()
+        Payment.reset_mock()
+        with patch.object(CAMT054, 'is_returned') as is_returned:
+            is_returned.return_value = True
+            handler = CAMT054(BytesIO(message), Payment)
+
+            Payment.save.assert_called_with([payment])
+            Payment.fail.assert_called_with([payment])
+
+    def test_camt054_001_01(self):
+        'Test camt.054.001.01 handling'
+        self.handle_camt054('camt.054.001.01')
+
+    def test_camt054_001_02(self):
+        'Test camt.054.001.02 handling'
+        self.handle_camt054('camt.054.001.02')
+
+    def test_camt054_001_03(self):
+        'Test camt.054.001.03 handling'
+        self.handle_camt054('camt.054.001.03')
+
+    def test_camt054_001_04(self):
+        'Test camt.054.001.04 handling'
+        self.handle_camt054('camt.054.001.04')
+
+    @with_transaction()
+    def test_sepa_mandate_report(self):
+        'Test sepa mandate report'
+        pool = Pool()
+        Report = pool.get('account.payment.sepa.mandate', type='report')
+
+        environment = setup_environment()
+        company = environment['company']
+        bank = environment['bank']
+        customer = environment['customer']
+        with set_company(company):
+            company_account, customer_account = setup_accounts(
+                bank, company, customer)
+            mandate = setup_mandate(company, customer, customer_account)
+
+            oext, content, _, _ = Report.execute([mandate.id], {})
+            self.assertEqual(oext, 'odt')
+            self.assertTrue(content)
+
+
+del ModuleTestCase
diff -r 7c59bc82e0f7 -r 5820bea48b39 tox.ini
--- a/tox.ini   Sat Apr 16 11:31:51 2022 +0200
+++ b/tox.ini   Sat Apr 16 18:30:16 2022 +0200
@@ -2,8 +2,9 @@
 envlist = {py37,py38,py39,py310}-{sqlite,postgresql}
 
 [testenv]
+extras = test
 commands =
-    coverage run --include=.*/account_payment_sepa/* setup.py test
+    coverage run --include=.*/account_payment_sepa/* -m unittest discover -s 
tests
     coverage report --include=.*/account_payment_sepa/* --omit=*/tests/*
 deps =
     coverage

Reply via email to