changeset d837ddb269b5 in modules/party_relationship:default
details:
https://hg.tryton.org/modules/party_relationship?cmd=changeset&node=d837ddb269b5
description:
Replace test setuptools command by unittest discover
issue9215
review389851002
diffstat:
setup.py | 6 +-
tests/__init__.py | 8 -
tests/test_module.py | 295 ++++++++++++++++++++++++++++++++++++++
tests/test_party_relationship.py | 300 ---------------------------------------
tox.ini | 3 +-
5 files changed, 300 insertions(+), 312 deletions(-)
diffs (651 lines):
diff -r 3b2ce0d0cf6e -r d837ddb269b5 setup.py
--- a/setup.py Sun Apr 10 19:11:38 2022 +0200
+++ b/setup.py Sat Apr 16 18:30:17 2022 +0200
@@ -137,13 +137,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]
party_relationship = trytond.modules.party_relationship
""",
- test_suite='tests',
- test_loader='trytond.test_loader:Loader',
- tests_require=tests_require,
)
diff -r 3b2ce0d0cf6e -r d837ddb269b5 tests/__init__.py
--- a/tests/__init__.py Sun Apr 10 19:11:38 2022 +0200
+++ b/tests/__init__.py Sat Apr 16 18:30:17 2022 +0200
@@ -1,10 +1,2 @@
# 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.party_relationship.tests.test_party_relationship
import \
- suite # noqa: E501
-except ImportError:
- from .test_party_relationship import suite
-
-__all__ = ['suite']
diff -r 3b2ce0d0cf6e -r d837ddb269b5 tests/test_module.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test_module.py Sat Apr 16 18:30:17 2022 +0200
@@ -0,0 +1,295 @@
+# 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 sys
+import unittest
+
+from trytond import backend
+from trytond.pool import Pool
+from trytond.tests.test_tryton import ModuleTestCase, with_transaction
+from trytond.transaction import Transaction
+
+
+class TestCase(ModuleTestCase):
+ 'Test Party relationship module'
+ module = 'party_relationship'
+
+ @with_transaction()
+ def test_reverse_relationship(self):
+ 'Test reverse relationship'
+ pool = Pool()
+ Party = pool.get('party.party')
+ RelationType = pool.get('party.relation.type')
+ Relation = pool.get('party.relation')
+
+ employee_of, = RelationType.create([{
+ 'name': 'Employee of',
+ }])
+ works_for, = RelationType.create([{
+ 'name': 'Works for',
+ 'reverse': employee_of.id,
+ }])
+ RelationType.write([employee_of], {
+ 'reverse': works_for.id,
+ })
+
+ company, employee = Party.create([{
+ 'name': 'Company',
+ }, {
+ 'name': 'Employee',
+ }])
+
+ Relation.create([{
+ 'from_': company.id,
+ 'to': employee.id,
+ 'type': employee_of.id
+ }])
+ company_relation, = company.relations
+ employee_relation, = employee.relations
+ self.assertEqual(company_relation.type, employee_of)
+ self.assertEqual(company_relation.to, employee)
+ self.assertEqual(employee_relation.type, works_for)
+ self.assertEqual(employee_relation.to, company)
+
+ @with_transaction()
+ def test_without_reverse_relationship(self):
+ 'Test without reverse relationship'
+ pool = Pool()
+ Party = pool.get('party.party')
+ RelationType = pool.get('party.relation.type')
+ Relation = pool.get('party.relation')
+
+ employee_of, = RelationType.create([{
+ 'name': 'Employee of',
+ }])
+ works_for, = RelationType.create([{
+ 'name': 'Works for',
+ }])
+
+ company, employee = Party.create([{
+ 'name': 'Company',
+ }, {
+ 'name': 'Employee',
+ }])
+
+ Relation.create([{
+ 'from_': company.id,
+ 'to': employee.id,
+ 'type': employee_of.id
+ }])
+ company_relation, = company.relations
+ self.assertEqual(len(employee.relations), 0)
+ self.assertEqual(company_relation.type, employee_of)
+ self.assertEqual(company_relation.to, employee)
+
+ @with_transaction()
+ def test_relation_all(self):
+ 'Test relation all'
+ pool = Pool()
+ Party = pool.get('party.party')
+ RelationType = pool.get('party.relation.type')
+ RelationAll = pool.get('party.relation.all')
+
+ relation_type, reverse_relation_type = RelationType.create([{
+ 'name': 'Relation',
+ }, {
+ 'name': 'Reverse',
+ }])
+ relation_type.reverse = reverse_relation_type
+ relation_type.save()
+ reverse_relation_type.reverse = relation_type
+ reverse_relation_type.save()
+
+ party1, party2, party3 = Party.create([{
+ 'name': 'Party 1',
+ }, {
+ 'name': 'Party 2',
+ }, {
+ 'name': 'Party 3',
+ }])
+
+ relation, = RelationAll.create([{
+ 'from_': party1.id,
+ 'to': party2.id,
+ 'type': relation_type.id,
+ }])
+ self.assertFalse(relation.id % 2)
+ reverse_relation, = RelationAll.search([
+ ('id', '!=', relation.id),
+ ])
+ self.assertTrue(reverse_relation.id % 2)
+ self.assertEqual(relation.reverse_id, reverse_relation.id)
+ self.assertEqual(reverse_relation.from_, party2)
+ self.assertEqual(reverse_relation.to, party1)
+
+ reverse_relation.from_ = party3
+ reverse_relation.save()
+ relation.save() # clear cache
+ self.assertEqual(reverse_relation.from_, party3)
+ self.assertEqual(reverse_relation.to, party1)
+ self.assertEqual(relation.from_, party1)
+ self.assertEqual(relation.to, party3)
+
+ reverse_relation.type = reverse_relation_type
+ reverse_relation.save()
+ self.assertEqual(reverse_relation.from_, party3)
+ self.assertEqual(reverse_relation.to, party1)
+ self.assertEqual(reverse_relation.type, reverse_relation_type)
+ self.assertEqual(relation.from_, party1)
+ self.assertEqual(relation.to, party3)
+ self.assertEqual(relation.type, relation_type)
+
+ relation.type = relation_type
+ relation.save()
+ self.assertEqual(reverse_relation.from_, party3)
+ self.assertEqual(reverse_relation.to, party1)
+ self.assertEqual(reverse_relation.type, reverse_relation_type)
+ self.assertEqual(relation.from_, party1)
+ self.assertEqual(relation.to, party3)
+ self.assertEqual(relation.type, relation_type)
+
+ reverse_relation.to = party2
+ reverse_relation.save()
+ relation.save() # clear cache
+ self.assertEqual(reverse_relation.from_, party3)
+ self.assertEqual(reverse_relation.to, party2)
+ self.assertEqual(relation.from_, party2)
+ self.assertEqual(relation.to, party3)
+
+ reverse_relation.from_ = party2
+ reverse_relation.to = party1
+ reverse_relation.save()
+ relation.save() # clear cache
+ self.assertEqual(reverse_relation.from_, party2)
+ self.assertEqual(reverse_relation.to, party1)
+ self.assertEqual(relation.from_, party1)
+ self.assertEqual(relation.to, party2)
+
+ relation.from_ = party2
+ relation.to = party1
+ relation.save()
+ reverse_relation.save() # clear cache
+ self.assertEqual(relation.from_, party2)
+ self.assertEqual(relation.to, party1)
+ self.assertEqual(reverse_relation.from_, party1)
+ self.assertEqual(reverse_relation.to, party2)
+
+ RelationAll.delete([reverse_relation])
+ self.assertEqual(RelationAll.search([]), [])
+
+ @unittest.skipIf(
+ backend.name == 'sqlite' and sys.version_info < (3, 6),
+ "Executing distance query prevents complete rollback")
+ @with_transaction()
+ def test_party_distance(self):
+ "Test party distance"
+ pool = Pool()
+ Party = pool.get('party.party')
+ RelationType = pool.get('party.relation.type')
+ Relation = pool.get('party.relation')
+
+ usages = RelationType.usages.selection
+ self.addCleanup(setattr, RelationType.usages, 'selection', usages)
+ RelationType.usages.selection = usages + [('test', "Test")]
+
+ relation, reverse = RelationType.create([{
+ 'name': 'Relation',
+ }, {
+ 'name': 'Reverse',
+ }])
+ relation.reverse = reverse
+ relation.save()
+ reverse.reverse = relation
+ reverse.save()
+
+ A, B, C, D = Party.create([{
+ 'name': 'A',
+ }, {
+ 'name': 'B',
+ }, {
+ 'name': 'C',
+ }, {
+ 'name': 'D'
+ }])
+ Relation.create([{
+ 'from_': A.id,
+ 'to': C.id,
+ 'type': relation.id,
+ }, {
+ 'from_': C.id,
+ 'to': D.id,
+ 'type': relation.id,
+ }])
+
+ parties = Party.search([])
+ self.assertEqual([p.distance for p in parties], [None] * 4)
+
+ with Transaction().set_context(related_party=A.id):
+ parties = Party.search([])
+ self.assertEqual(
+ [(p.name, p.distance) for p in parties],
+ [('A', 0), ('C', 1), ('D', 2), ('B', None)])
+
+ another_relation, = RelationType.create([{
+ 'name': 'Another Relation',
+ 'usages': ['test'],
+ }])
+ Relation.create([{
+ 'from_': A.id,
+ 'to': B.id,
+ 'type': another_relation.id,
+ }])
+
+ with Transaction().set_context(
+ related_party=A.id, relation_usages=['test']):
+ parties = Party.search([])
+ self.assertEqual(
+ [(p.name, p.distance) for p in parties],
+ [('A', 0), ('B', 1), ('C', None), ('D', None)])
+
+ with Transaction().set_context(related_party=A.id):
+ parties = Party.search([])
+ self.assertEqual(
+ [(p.name, p.distance) for p in parties],
+ [('A', 0), ('B', 1), ('C', 1), ('D', 2)])
+
+ @with_transaction()
+ def test_contact_mechanism_distance(self):
+ "Test relation distance"
+ pool = Pool()
+ Party = pool.get('party.party')
+ ContactMechanism = pool.get('party.contact_mechanism')
+ RelationType = pool.get('party.relation.type')
+ Relation = pool.get('party.relation')
+
+ relation, = RelationType.create([{
+ 'name': 'Relation',
+ }])
+
+ A, B, C = Party.create([{
+ 'name': "A",
+ 'contact_mechanisms': [
+ ('create', [{'value': "A", 'type': 'other'}])],
+ }, {
+ 'name': "B",
+ 'contact_mechanisms': [
+ ('create', [{'value': "B", 'type': 'other'}])],
+ }, {
+ 'name': "C",
+ 'contact_mechanisms': [
+ ('create', [{'value': "C", 'type': 'other'}])],
+ }])
+
+ Relation.create([{
+ 'from_': A.id,
+ 'to': C.id,
+ 'type': relation.id,
+ }])
+
+ with Transaction().set_context(related_party=A.id):
+ contact_mechanisms = ContactMechanism.search([])
+ self.assertEqual(
+ [c.value for c in contact_mechanisms],
+ ['A', 'C', 'B'])
+
+
+del ModuleTestCase
diff -r 3b2ce0d0cf6e -r d837ddb269b5 tests/test_party_relationship.py
--- a/tests/test_party_relationship.py Sun Apr 10 19:11:38 2022 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,300 +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 sys
-import unittest
-
-from trytond import backend
-from trytond.pool import Pool
-from trytond.tests.test_tryton import ModuleTestCase
-from trytond.tests.test_tryton import suite as tryton_suite
-from trytond.tests.test_tryton import with_transaction
-from trytond.transaction import Transaction
-
-
-class TestCase(ModuleTestCase):
- 'Test Party relationship module'
- module = 'party_relationship'
-
- @with_transaction()
- def test_reverse_relationship(self):
- 'Test reverse relationship'
- pool = Pool()
- Party = pool.get('party.party')
- RelationType = pool.get('party.relation.type')
- Relation = pool.get('party.relation')
-
- employee_of, = RelationType.create([{
- 'name': 'Employee of',
- }])
- works_for, = RelationType.create([{
- 'name': 'Works for',
- 'reverse': employee_of.id,
- }])
- RelationType.write([employee_of], {
- 'reverse': works_for.id,
- })
-
- company, employee = Party.create([{
- 'name': 'Company',
- }, {
- 'name': 'Employee',
- }])
-
- Relation.create([{
- 'from_': company.id,
- 'to': employee.id,
- 'type': employee_of.id
- }])
- company_relation, = company.relations
- employee_relation, = employee.relations
- self.assertEqual(company_relation.type, employee_of)
- self.assertEqual(company_relation.to, employee)
- self.assertEqual(employee_relation.type, works_for)
- self.assertEqual(employee_relation.to, company)
-
- @with_transaction()
- def test_without_reverse_relationship(self):
- 'Test without reverse relationship'
- pool = Pool()
- Party = pool.get('party.party')
- RelationType = pool.get('party.relation.type')
- Relation = pool.get('party.relation')
-
- employee_of, = RelationType.create([{
- 'name': 'Employee of',
- }])
- works_for, = RelationType.create([{
- 'name': 'Works for',
- }])
-
- company, employee = Party.create([{
- 'name': 'Company',
- }, {
- 'name': 'Employee',
- }])
-
- Relation.create([{
- 'from_': company.id,
- 'to': employee.id,
- 'type': employee_of.id
- }])
- company_relation, = company.relations
- self.assertEqual(len(employee.relations), 0)
- self.assertEqual(company_relation.type, employee_of)
- self.assertEqual(company_relation.to, employee)
-
- @with_transaction()
- def test_relation_all(self):
- 'Test relation all'
- pool = Pool()
- Party = pool.get('party.party')
- RelationType = pool.get('party.relation.type')
- RelationAll = pool.get('party.relation.all')
-
- relation_type, reverse_relation_type = RelationType.create([{
- 'name': 'Relation',
- }, {
- 'name': 'Reverse',
- }])
- relation_type.reverse = reverse_relation_type
- relation_type.save()
- reverse_relation_type.reverse = relation_type
- reverse_relation_type.save()
-
- party1, party2, party3 = Party.create([{
- 'name': 'Party 1',
- }, {
- 'name': 'Party 2',
- }, {
- 'name': 'Party 3',
- }])
-
- relation, = RelationAll.create([{
- 'from_': party1.id,
- 'to': party2.id,
- 'type': relation_type.id,
- }])
- self.assertFalse(relation.id % 2)
- reverse_relation, = RelationAll.search([
- ('id', '!=', relation.id),
- ])
- self.assertTrue(reverse_relation.id % 2)
- self.assertEqual(relation.reverse_id, reverse_relation.id)
- self.assertEqual(reverse_relation.from_, party2)
- self.assertEqual(reverse_relation.to, party1)
-
- reverse_relation.from_ = party3
- reverse_relation.save()
- relation.save() # clear cache
- self.assertEqual(reverse_relation.from_, party3)
- self.assertEqual(reverse_relation.to, party1)
- self.assertEqual(relation.from_, party1)
- self.assertEqual(relation.to, party3)
-
- reverse_relation.type = reverse_relation_type
- reverse_relation.save()
- self.assertEqual(reverse_relation.from_, party3)
- self.assertEqual(reverse_relation.to, party1)
- self.assertEqual(reverse_relation.type, reverse_relation_type)
- self.assertEqual(relation.from_, party1)
- self.assertEqual(relation.to, party3)
- self.assertEqual(relation.type, relation_type)
-
- relation.type = relation_type
- relation.save()
- self.assertEqual(reverse_relation.from_, party3)
- self.assertEqual(reverse_relation.to, party1)
- self.assertEqual(reverse_relation.type, reverse_relation_type)
- self.assertEqual(relation.from_, party1)
- self.assertEqual(relation.to, party3)
- self.assertEqual(relation.type, relation_type)
-
- reverse_relation.to = party2
- reverse_relation.save()
- relation.save() # clear cache
- self.assertEqual(reverse_relation.from_, party3)
- self.assertEqual(reverse_relation.to, party2)
- self.assertEqual(relation.from_, party2)
- self.assertEqual(relation.to, party3)
-
- reverse_relation.from_ = party2
- reverse_relation.to = party1
- reverse_relation.save()
- relation.save() # clear cache
- self.assertEqual(reverse_relation.from_, party2)
- self.assertEqual(reverse_relation.to, party1)
- self.assertEqual(relation.from_, party1)
- self.assertEqual(relation.to, party2)
-
- relation.from_ = party2
- relation.to = party1
- relation.save()
- reverse_relation.save() # clear cache
- self.assertEqual(relation.from_, party2)
- self.assertEqual(relation.to, party1)
- self.assertEqual(reverse_relation.from_, party1)
- self.assertEqual(reverse_relation.to, party2)
-
- RelationAll.delete([reverse_relation])
- self.assertEqual(RelationAll.search([]), [])
-
- @unittest.skipIf(
- backend.name == 'sqlite' and sys.version_info < (3, 6),
- "Executing distance query prevents complete rollback")
- @with_transaction()
- def test_party_distance(self):
- "Test party distance"
- pool = Pool()
- Party = pool.get('party.party')
- RelationType = pool.get('party.relation.type')
- Relation = pool.get('party.relation')
-
- usages = RelationType.usages.selection
- self.addCleanup(setattr, RelationType.usages, 'selection', usages)
- RelationType.usages.selection = usages + [('test', "Test")]
-
- relation, reverse = RelationType.create([{
- 'name': 'Relation',
- }, {
- 'name': 'Reverse',
- }])
- relation.reverse = reverse
- relation.save()
- reverse.reverse = relation
- reverse.save()
-
- A, B, C, D = Party.create([{
- 'name': 'A',
- }, {
- 'name': 'B',
- }, {
- 'name': 'C',
- }, {
- 'name': 'D'
- }])
- Relation.create([{
- 'from_': A.id,
- 'to': C.id,
- 'type': relation.id,
- }, {
- 'from_': C.id,
- 'to': D.id,
- 'type': relation.id,
- }])
-
- parties = Party.search([])
- self.assertEqual([p.distance for p in parties], [None] * 4)
-
- with Transaction().set_context(related_party=A.id):
- parties = Party.search([])
- self.assertEqual(
- [(p.name, p.distance) for p in parties],
- [('A', 0), ('C', 1), ('D', 2), ('B', None)])
-
- another_relation, = RelationType.create([{
- 'name': 'Another Relation',
- 'usages': ['test'],
- }])
- Relation.create([{
- 'from_': A.id,
- 'to': B.id,
- 'type': another_relation.id,
- }])
-
- with Transaction().set_context(
- related_party=A.id, relation_usages=['test']):
- parties = Party.search([])
- self.assertEqual(
- [(p.name, p.distance) for p in parties],
- [('A', 0), ('B', 1), ('C', None), ('D', None)])
-
- with Transaction().set_context(related_party=A.id):
- parties = Party.search([])
- self.assertEqual(
- [(p.name, p.distance) for p in parties],
- [('A', 0), ('B', 1), ('C', 1), ('D', 2)])
-
- @with_transaction()
- def test_contact_mechanism_distance(self):
- "Test relation distance"
- pool = Pool()
- Party = pool.get('party.party')
- ContactMechanism = pool.get('party.contact_mechanism')
- RelationType = pool.get('party.relation.type')
- Relation = pool.get('party.relation')
-
- relation, = RelationType.create([{
- 'name': 'Relation',
- }])
-
- A, B, C = Party.create([{
- 'name': "A",
- 'contact_mechanisms': [
- ('create', [{'value': "A", 'type': 'other'}])],
- }, {
- 'name': "B",
- 'contact_mechanisms': [
- ('create', [{'value': "B", 'type': 'other'}])],
- }, {
- 'name': "C",
- 'contact_mechanisms': [
- ('create', [{'value': "C", 'type': 'other'}])],
- }])
-
- Relation.create([{
- 'from_': A.id,
- 'to': C.id,
- 'type': relation.id,
- }])
-
- with Transaction().set_context(related_party=A.id):
- contact_mechanisms = ContactMechanism.search([])
- self.assertEqual(
- [c.value for c in contact_mechanisms],
- ['A', 'C', 'B'])
-
-
-def suite():
- suite = tryton_suite()
- suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestCase))
- return suite
diff -r 3b2ce0d0cf6e -r d837ddb269b5 tox.ini
--- a/tox.ini Sun Apr 10 19:11:38 2022 +0200
+++ b/tox.ini Sat Apr 16 18:30:17 2022 +0200
@@ -2,8 +2,9 @@
envlist = {py37,py38,py39,py310}-{sqlite,postgresql}
[testenv]
+extras = test
commands =
- coverage run --include=.*/party_relationship/* setup.py test
+ coverage run --include=.*/party_relationship/* -m unittest discover -s
tests
coverage report --include=.*/party_relationship/* --omit=*/tests/*
deps =
coverage