Source code for pi_portal.modules.tasks.task.utility.generic_task_test

"""A generic test suite for task modules."""

from types import ModuleType
from typing import TYPE_CHECKING, Any, Type

import pytest
from pi_portal.modules.tasks import enums, schema
from pi_portal.modules.tasks.config import ROUTING_MATRIX

if TYPE_CHECKING:  # pragma: no cover
  from pi_portal.modules.tasks.task.bases.task_args_base import TaskArgsBase


[docs]class GenericTaskModuleTest: """A generic test suite for task modules.""" expected_api_enabled: bool expected_arg_class: "Type[TaskArgsBase]" expected_return_type: Any expected_type: "enums.TaskType" mock_args: "TaskArgsBase" module: "ModuleType" def test_import__module__attributes(self) -> None: assert isinstance(self.module, schema.TaskModule) assert self.module.ApiEnabled == self.expected_api_enabled assert self.module.Args == self.expected_arg_class assert self.module.ReturnType == self.expected_return_type assert self.module.Task == self.module.Task assert self.module.TaskType == self.expected_type def test_import__task__defaults__attributes(self) -> None: instance = self.module.Task(self.mock_args) assert instance.args == self.mock_args assert instance.retry_after == 0 assert instance.routing_label == ROUTING_MATRIX[self.expected_type] assert instance.type == self.expected_type @pytest.mark.parametrize("retry_after", [0, 1]) def test_import__task__vary_retry_after__attributes( self, retry_after: int, ) -> None: instance = self.module.Task( self.mock_args, retry_after=retry_after, ) assert instance.args == self.mock_args assert instance.type == self.expected_type assert instance.retry_after == retry_after assert instance.routing_label == ROUTING_MATRIX[self.expected_type] @pytest.mark.parametrize("routing_label", list(enums.RoutingLabel)) def test_import__task__vary_routing_label__attributes( self, routing_label: enums.RoutingLabel ) -> None: instance = self.module.Task( self.mock_args, routing_label=routing_label, ) assert instance.args == self.mock_args assert instance.type == self.expected_type assert instance.retry_after == 0 assert instance.routing_label == routing_label