From ab7e5ee85aa938f4aaf155e6e3c47ea2c1d907b0 Mon Sep 17 00:00:00 2001 From: Nils Hamerlinck Date: Sun, 3 Jan 2021 19:31:16 +0700 Subject: [PATCH 1/2] [FIX] run doctests as part of standard tests --- queue_job/tests/common.py | 38 +++++++++++++++++++++++++ queue_job/tests/test_runner_channels.py | 7 ++--- queue_job/tests/test_runner_runner.py | 7 ++--- 3 files changed, 42 insertions(+), 10 deletions(-) diff --git a/queue_job/tests/common.py b/queue_job/tests/common.py index 175e75a314..1391b10996 100644 --- a/queue_job/tests/common.py +++ b/queue_job/tests/common.py @@ -1,9 +1,13 @@ # Copyright 2019 Camptocamp # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +import doctest from contextlib import contextmanager import mock +from odoo.tests import BaseCase, tagged + +# pylint: disable=odoo-addons-relative-import from odoo.addons.queue_job.job import Job @@ -96,3 +100,37 @@ def test_export(self): delayable = mock.MagicMock(name="DelayableBinding") delayable_cls.return_value = delayable yield delayable_cls, delayable + + +@tagged("doctest") +class OdooDocTestCase(BaseCase): + """ + We need a custom DocTestCase class in order to: + - define test_tags to run as part of standard tests + - output a more meaningful test name than default "DocTestCase.runTest" + """ + + __qualname__ = "doctests for " + + def __init__(self, test): + self.__test = test + self.__name = test._dt_test.name + super().__init__(self.__name) + + def __getattr__(self, item): + if item == self.__name: + return self.__test + + +def load_doctests(module): + """ + Generates a tests loading method for the doctests of the given module + https://docs.python.org/3/library/unittest.html#load-tests-protocol + """ + + def load_tests(loader, tests, ignore): + for test in doctest.DocTestSuite(module): + tests.addTest(OdooDocTestCase(test)) + return tests + + return load_tests diff --git a/queue_job/tests/test_runner_channels.py b/queue_job/tests/test_runner_channels.py index 93333fa490..d323d00683 100644 --- a/queue_job/tests/test_runner_channels.py +++ b/queue_job/tests/test_runner_channels.py @@ -1,13 +1,10 @@ # Copyright 2015-2016 Camptocamp SA # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html) -import doctest - # pylint: disable=odoo-addons-relative-import # we are testing, we want to test as we were an external consumer of the API from odoo.addons.queue_job.jobrunner import channels +from .common import load_doctests -def load_tests(loader, tests, ignore): - tests.addTests(doctest.DocTestSuite(channels)) - return tests +load_tests = load_doctests(channels) diff --git a/queue_job/tests/test_runner_runner.py b/queue_job/tests/test_runner_runner.py index 817ac6396e..c6486e27ef 100644 --- a/queue_job/tests/test_runner_runner.py +++ b/queue_job/tests/test_runner_runner.py @@ -1,13 +1,10 @@ # Copyright 2015-2016 Camptocamp SA # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html) -import doctest - # pylint: disable=odoo-addons-relative-import # we are testing, we want to test as we were an external consumer of the API from odoo.addons.queue_job.jobrunner import runner +from .common import load_doctests -def load_tests(loader, tests, ignore): - tests.addTests(doctest.DocTestSuite(runner)) - return tests +load_tests = load_doctests(runner) From 199b86361b031dc2f48bd28696225db9a2c18a97 Mon Sep 17 00:00:00 2001 From: Pieter Paulussen Date: Tue, 20 Apr 2021 11:34:26 +0200 Subject: [PATCH 2/2] [ADD] [TEST] deliberately fail a doctest --- queue_job/jobrunner/channels.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/queue_job/jobrunner/channels.py b/queue_job/jobrunner/channels.py index 1f42a10cc9..756c957fd4 100644 --- a/queue_job/jobrunner/channels.py +++ b/queue_job/jobrunner/channels.py @@ -25,7 +25,7 @@ class PriorityQueue(object): >>> q.add(3) >>> q.add(3) >>> q.add(1) - >>> q[0] + >>> q[25] 1 >>> len(q) 3