changeset ca3d91b2b93d in modules/project:default
details: https://hg.tryton.org/modules/project?cmd=changeset&node=ca3d91b2b93d
description:
Replace test setuptools command by unittest discover
issue9215
review389851002
diffstat:
setup.py | 6 +-
tests/__init__.py | 7 -
tests/test_module.py | 185 +++++++++++++++++++++++++++++++++++++++++++++
tests/test_project.py | 198 -------------------------------------------------
tests/test_scenario.py | 22 +++++
tox.ini | 3 +-
6 files changed, 212 insertions(+), 209 deletions(-)
diffs (464 lines):
diff -r 3b92c40b90b6 -r ca3d91b2b93d setup.py
--- a/setup.py Sun Apr 10 19:11:39 2022 +0200
+++ b/setup.py Sat Apr 16 18:30:18 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]
project = trytond.modules.project
""",
- test_suite='tests',
- test_loader='trytond.test_loader:Loader',
- tests_require=tests_require,
)
diff -r 3b92c40b90b6 -r ca3d91b2b93d tests/__init__.py
--- a/tests/__init__.py Sun Apr 10 19:11:39 2022 +0200
+++ b/tests/__init__.py Sat Apr 16 18:30:18 2022 +0200
@@ -1,9 +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.project.tests.test_project import suite
-except ImportError:
- from .test_project import suite
-
-__all__ = ['suite']
diff -r 3b92c40b90b6 -r ca3d91b2b93d tests/test_module.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test_module.py Sat Apr 16 18:30:18 2022 +0200
@@ -0,0 +1,185 @@
+# 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 datetime
+
+from trytond.modules.company.tests import (
+ CompanyTestMixin, PartyCompanyCheckEraseMixin, create_company, set_company)
+from trytond.pool import Pool
+from trytond.tests.test_tryton import ModuleTestCase, with_transaction
+from trytond.transaction import Transaction
+
+
+class ProjectTestCase(
+ PartyCompanyCheckEraseMixin, CompanyTestMixin, ModuleTestCase):
+ 'Test Project module'
+ module = 'project'
+
+ @with_transaction()
+ def test_sum_tree(self):
+ 'Test sum_tree'
+ pool = Pool()
+ ProjectWork = pool.get('project.work')
+
+ company = create_company()
+ with set_company(company):
+ p_work_1, = ProjectWork.create([{
+ 'name': 'Work 1',
+ 'company': company.id,
+ 'effort_duration': datetime.timedelta(hours=1),
+ }])
+
+ p_work_1_1, = ProjectWork.create([{
+ 'name': 'Work 1 1',
+ 'company': company.id,
+ 'parent': p_work_1.id,
+ 'effort_duration': datetime.timedelta(hours=1),
+ }])
+
+ p_work_1_2, = ProjectWork.create([{
+ 'name': 'Work 1 2',
+ 'company': company.id,
+ 'parent': p_work_1.id,
+ 'effort_duration': datetime.timedelta(hours=1),
+ }])
+
+ p_work_1_1_1, = ProjectWork.create([{
+ 'name': 'Work 1 1 1',
+ 'company': company.id,
+ 'parent': p_work_1_1.id,
+ 'effort_duration': datetime.timedelta(hours=1),
+ }])
+
+ p_work_1_1_2, = ProjectWork.create([{
+ 'name': 'Work 1 1 2',
+ 'company': company.id,
+ 'parent': p_work_1_1.id,
+ 'effort_duration': datetime.timedelta(hours=1),
+ }])
+
+ p_work_1_1_3, = ProjectWork.create([{
+ 'name': 'Work 1 1 3',
+ 'company': company.id,
+ 'parent': p_work_1_1.id,
+ 'effort_duration': datetime.timedelta(hours=1),
+ }])
+
+ for work, total_effort in (
+ (p_work_1, 6),
+ (p_work_1_1, 4),
+ (p_work_1_2, 1),
+ (p_work_1_1_1, 1),
+ (p_work_1_1_2, 1),
+ (p_work_1_1_3, 1),
+ ):
+ self.assertEqual(work.total_effort,
+ datetime.timedelta(hours=total_effort))
+
+ @with_transaction()
+ def test_timesheet_available(self):
+ 'Test timesheet available'
+ pool = Pool()
+ ProjectWork = pool.get('project.work')
+
+ company = create_company()
+ with set_company(company):
+ p_work = ProjectWork()
+ p_work.name = 'Project Work'
+ p_work.save()
+
+ self.assertFalse(p_work.timesheet_works)
+
+ p_work.timesheet_available = True
+ p_work.save()
+
+ self.assertEqual(len(p_work.timesheet_works), 1)
+
+ p_work.timesheet_available = False
+ p_work.save()
+
+ self.assertFalse(p_work.timesheet_works)
+
+ @with_transaction(context={'_check_access': True})
+ def test_delete_access(self):
+ 'Test delete_access'
+ pool = Pool()
+ User = pool.get('res.user')
+ Group = pool.get('res.group')
+ ModelData = pool.get('ir.model.data')
+ ProjectWork = pool.get('project.work')
+ TimesheetWork = pool.get('timesheet.work')
+
+ company = create_company()
+ with set_company(company):
+ project_user = User()
+ project_user.login = 'project'
+ project_user.companies = [company]
+ project_user.company = company
+ project_group = Group(ModelData.get_id(
+ 'project', 'group_project_admin'))
+ project_user.groups = [project_group]
+ project_user.save()
+ with Transaction().set_user(project_user.id):
+ p_work = ProjectWork()
+ p_work.name = 'Project Work'
+ p_work.timesheet_available = True
+ p_work.save()
+
+ self.assertEqual(len(p_work.timesheet_works), 1)
+ ProjectWork.delete([p_work])
+ self.assertEqual(TimesheetWork.search([]), [])
+
+ @with_transaction()
+ def test_timesheet_default_work_empty(self):
+ "Test timesheet default work with no context"
+ pool = Pool()
+ ProjectWork = pool.get('project.work')
+ TimesheetLine = pool.get('timesheet.line')
+
+ company = create_company()
+ with set_company(company):
+ p_work = ProjectWork()
+ p_work.name = "Work"
+ p_work.timesheet_available = True
+ p_work.save()
+
+ self.assertFalse(TimesheetLine.default_work())
+
+ @with_transaction()
+ def test_timesheet_default_work_single(self):
+ "Test timesheet default work with 1 work in context"
+ pool = Pool()
+ ProjectWork = pool.get('project.work')
+ TimesheetLine = pool.get('timesheet.line')
+
+ company = create_company()
+ with set_company(company):
+ p_work = ProjectWork()
+ p_work.name = "Work"
+ p_work.timesheet_available = True
+ p_work.save()
+
+ with Transaction().set_context({'project.work': [p_work.id]}):
+ self.assertEqual(
+ TimesheetLine.default_work(),
+ p_work.timesheet_works[0].id)
+
+ @with_transaction()
+ def test_timesheet_default_work_multiple(self):
+ "Test timesheet default work with multiple work in context"
+ pool = Pool()
+ ProjectWork = pool.get('project.work')
+ TimesheetLine = pool.get('timesheet.line')
+
+ company = create_company()
+ with set_company(company):
+ works = ProjectWork.create([
+ {'name': "Work 1", 'timesheet_available': True},
+ {'name': "Work 2", 'timesheet_available': True},
+ ])
+
+ with Transaction().set_context(
+ {'project.work': map(int, works)}):
+ self.assertFalse(TimesheetLine.default_work())
+
+
+del ModuleTestCase
diff -r 3b92c40b90b6 -r ca3d91b2b93d tests/test_project.py
--- a/tests/test_project.py Sun Apr 10 19:11:39 2022 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,198 +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 datetime
-import doctest
-import unittest
-
-import trytond.tests.test_tryton
-from trytond.modules.company.tests import (
- CompanyTestMixin, PartyCompanyCheckEraseMixin, create_company, set_company)
-from trytond.pool import Pool
-from trytond.tests.test_tryton import (
- ModuleTestCase, doctest_checker, doctest_teardown, with_transaction)
-from trytond.transaction import Transaction
-
-
-class ProjectTestCase(
- PartyCompanyCheckEraseMixin, CompanyTestMixin, ModuleTestCase):
- 'Test Project module'
- module = 'project'
-
- @with_transaction()
- def test_sum_tree(self):
- 'Test sum_tree'
- pool = Pool()
- ProjectWork = pool.get('project.work')
-
- company = create_company()
- with set_company(company):
- p_work_1, = ProjectWork.create([{
- 'name': 'Work 1',
- 'company': company.id,
- 'effort_duration': datetime.timedelta(hours=1),
- }])
-
- p_work_1_1, = ProjectWork.create([{
- 'name': 'Work 1 1',
- 'company': company.id,
- 'parent': p_work_1.id,
- 'effort_duration': datetime.timedelta(hours=1),
- }])
-
- p_work_1_2, = ProjectWork.create([{
- 'name': 'Work 1 2',
- 'company': company.id,
- 'parent': p_work_1.id,
- 'effort_duration': datetime.timedelta(hours=1),
- }])
-
- p_work_1_1_1, = ProjectWork.create([{
- 'name': 'Work 1 1 1',
- 'company': company.id,
- 'parent': p_work_1_1.id,
- 'effort_duration': datetime.timedelta(hours=1),
- }])
-
- p_work_1_1_2, = ProjectWork.create([{
- 'name': 'Work 1 1 2',
- 'company': company.id,
- 'parent': p_work_1_1.id,
- 'effort_duration': datetime.timedelta(hours=1),
- }])
-
- p_work_1_1_3, = ProjectWork.create([{
- 'name': 'Work 1 1 3',
- 'company': company.id,
- 'parent': p_work_1_1.id,
- 'effort_duration': datetime.timedelta(hours=1),
- }])
-
- for work, total_effort in (
- (p_work_1, 6),
- (p_work_1_1, 4),
- (p_work_1_2, 1),
- (p_work_1_1_1, 1),
- (p_work_1_1_2, 1),
- (p_work_1_1_3, 1),
- ):
- self.assertEqual(work.total_effort,
- datetime.timedelta(hours=total_effort))
-
- @with_transaction()
- def test_timesheet_available(self):
- 'Test timesheet available'
- pool = Pool()
- ProjectWork = pool.get('project.work')
-
- company = create_company()
- with set_company(company):
- p_work = ProjectWork()
- p_work.name = 'Project Work'
- p_work.save()
-
- self.assertFalse(p_work.timesheet_works)
-
- p_work.timesheet_available = True
- p_work.save()
-
- self.assertEqual(len(p_work.timesheet_works), 1)
-
- p_work.timesheet_available = False
- p_work.save()
-
- self.assertFalse(p_work.timesheet_works)
-
- @with_transaction(context={'_check_access': True})
- def test_delete_access(self):
- 'Test delete_access'
- pool = Pool()
- User = pool.get('res.user')
- Group = pool.get('res.group')
- ModelData = pool.get('ir.model.data')
- ProjectWork = pool.get('project.work')
- TimesheetWork = pool.get('timesheet.work')
-
- company = create_company()
- with set_company(company):
- project_user = User()
- project_user.login = 'project'
- project_user.companies = [company]
- project_user.company = company
- project_group = Group(ModelData.get_id(
- 'project', 'group_project_admin'))
- project_user.groups = [project_group]
- project_user.save()
- with Transaction().set_user(project_user.id):
- p_work = ProjectWork()
- p_work.name = 'Project Work'
- p_work.timesheet_available = True
- p_work.save()
-
- self.assertEqual(len(p_work.timesheet_works), 1)
- ProjectWork.delete([p_work])
- self.assertEqual(TimesheetWork.search([]), [])
-
- @with_transaction()
- def test_timesheet_default_work_empty(self):
- "Test timesheet default work with no context"
- pool = Pool()
- ProjectWork = pool.get('project.work')
- TimesheetLine = pool.get('timesheet.line')
-
- company = create_company()
- with set_company(company):
- p_work = ProjectWork()
- p_work.name = "Work"
- p_work.timesheet_available = True
- p_work.save()
-
- self.assertFalse(TimesheetLine.default_work())
-
- @with_transaction()
- def test_timesheet_default_work_single(self):
- "Test timesheet default work with 1 work in context"
- pool = Pool()
- ProjectWork = pool.get('project.work')
- TimesheetLine = pool.get('timesheet.line')
-
- company = create_company()
- with set_company(company):
- p_work = ProjectWork()
- p_work.name = "Work"
- p_work.timesheet_available = True
- p_work.save()
-
- with Transaction().set_context({'project.work': [p_work.id]}):
- self.assertEqual(
- TimesheetLine.default_work(),
- p_work.timesheet_works[0].id)
-
- @with_transaction()
- def test_timesheet_default_work_multiple(self):
- "Test timesheet default work with multiple work in context"
- pool = Pool()
- ProjectWork = pool.get('project.work')
- TimesheetLine = pool.get('timesheet.line')
-
- company = create_company()
- with set_company(company):
- works = ProjectWork.create([
- {'name': "Work 1", 'timesheet_available': True},
- {'name': "Work 2", 'timesheet_available': True},
- ])
-
- with Transaction().set_context(
- {'project.work': map(int, works)}):
- self.assertFalse(TimesheetLine.default_work())
-
-
-def suite():
- suite = trytond.tests.test_tryton.suite()
- suite.addTests(unittest.TestLoader().loadTestsFromTestCase(
- ProjectTestCase))
- suite.addTests(doctest.DocFileSuite(
- 'scenario_project_status.rst',
- tearDown=doctest_teardown, encoding='utf-8',
- checker=doctest_checker,
- optionflags=doctest.REPORT_ONLY_FIRST_FAILURE))
- return suite
diff -r 3b92c40b90b6 -r ca3d91b2b93d tests/test_scenario.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test_scenario.py Sat Apr 16 18:30:18 2022 +0200
@@ -0,0 +1,22 @@
+# 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 doctest
+import glob
+import os
+
+from trytond.tests.test_tryton import doctest_checker, doctest_teardown
+
+
+def load_tests(loader, tests, pattern):
+ cwd = os.getcwd()
+ try:
+ os.chdir(os.path.dirname(__file__))
+ for scenario in glob.glob('*.rst'):
+ tests.addTests(doctest.DocFileSuite(
+ scenario, tearDown=doctest_teardown, encoding='utf-8',
+ checker=doctest_checker,
+ optionflags=doctest.REPORT_ONLY_FIRST_FAILURE))
+ finally:
+ os.chdir(cwd)
+ return tests
diff -r 3b92c40b90b6 -r ca3d91b2b93d tox.ini
--- a/tox.ini Sun Apr 10 19:11:39 2022 +0200
+++ b/tox.ini Sat Apr 16 18:30:18 2022 +0200
@@ -2,8 +2,9 @@
envlist = {py37,py38,py39,py310}-{sqlite,postgresql}
[testenv]
+extras = test
commands =
- coverage run --include=.*/project/* setup.py test
+ coverage run --include=.*/project/* -m unittest discover -s tests
coverage report --include=.*/project/* --omit=*/tests/*
deps =
coverage