Module pyracmon.testing
Expand source code
from datetime import datetime, date, time, timedelta
from .model import TestingMixin, truncate
from .util import default_test_config
__all__ = [
"TestingMixin",
"default_test_config",
"truncate",
#"near",
#"let",
#"one_of",
]
Sub-modules
pyracmon.testing.model
pyracmon.testing.util
Functions
def default_test_config() ‑> PyracmonConfiguration
-
Expand source code
def default_test_config() -> PyracmonConfiguration: return config.get()
def truncate(db: Connection, *models: type[TruncateMixin])
-
Truncate tables in order.
Args
db
- DB connection.
tables
- Models of tables to truncate.
Expand source code
def truncate(db: Connection, *models: type[TruncateMixin]): """ Truncate tables in order. Args: db: DB connection. tables: Models of tables to truncate. """ if len(models) == 0: raise ValueError(f"No tables are specified. Did you forget to pass DB connection at the first argument?") for m in models: m.truncate(db)
Classes
class TestingMixin
-
Mixin class for model types providing methods designed for testing.
Expand source code
class TestingMixin(TestingModel): """ Mixin class for model types providing methods designed for testing. """ @classmethod def by(cls, index: int) -> Self: """ Set current fixture index. Args: index: Fixture index. Returns: This type. """ TestingState.set_index(cls, index) return cls # type: ignore @overload @classmethod def fixture( cls, db: Optional[Connection], variable: None = None, index: Optional[int] = None, cfg: Optional[PyracmonConfiguration] = None, ) -> list[Self]: ... @overload @classmethod def fixture( cls, db: Optional[Connection], variable: int, index: Optional[int] = None, cfg: Optional[PyracmonConfiguration] = None, ) -> list[Self]: ... @overload @classmethod def fixture( cls, db: Optional[Connection], variable: Self, index: Optional[int] = None, cfg: Optional[PyracmonConfiguration] = None, ) -> Self: ... @overload @classmethod def fixture( cls, db: Optional[Connection], variable: dict[str, Any], index: Optional[int] = None, cfg: Optional[PyracmonConfiguration] = None, ) -> Self: ... @overload @classmethod def fixture( cls, db: Optional[Connection], variable: list[Self], index: Optional[int] = None, cfg: Optional[PyracmonConfiguration] = None, ) -> list[Self]: ... @overload @classmethod def fixture( cls, db: Optional[Connection], variable: list[dict[str, Any]], index: Optional[int] = None, cfg: Optional[PyracmonConfiguration] = None, ) -> list[Self]: ... @classmethod def fixture( cls, db: Optional[Connection], variable: Optional[Union[int, dict[str, Any], Self, list[dict[str, Any]], list[Self]]] = None, index: Optional[int] = None, cfg: Optional[PyracmonConfiguration] = None, ) -> Union[Self, list[Self]]: """ Inserts record(s) with auto-generated column values. Args: db: DB connection. If a value evaluated to be `False` in boolean context, generated model is not inserted and just returned. variable: When `int`, inserts records as many as the number. All of their column values are generated. When `dict`, model object or a list of them, inserts record(s) represented by them. Unspecified column values are generated. index: Use this to specify index used to generate column values explicitly. If set, indexing state is not updated. cfg: Configuration used to control the generation of fixuture values. This argument is prepared only for internal use and can be changed or removed in future version. Returns: Inserted model(s). """ if variable is None or isinstance(variable, int): num = variable or 1 index = TestingState.inc(cls, num) if index is None else index models = [_generate_model(cls, index+i, None, cfg) for i in range(num)] if db: cls.inserts(db, models) return models elif isinstance(variable, (cls, dict)): num = 1 index = TestingState.inc(cls, num) if index is None else index model = _generate_model(cls, index, variable, cfg) if db: cls.insert(db, model) return model elif isinstance(variable, list): num = len(variable) index = TestingState.inc(cls, num) if index is None else index models = [_generate_model(cls, index+i, v, cfg) for i, v in enumerate(variable)] if db: cls.inserts(db, models) return models else: raise ValueError(f"Second argument of fixture() must be an int, dict, model or list of dict or model but {type(variable)} is passed.") def match(self, **expected: Union[Matcher, Any]) -> bool: """ Tests columns values matches to expected values. .. warning:: This method will be replaced in different implementation. Args: expected: Expected values. Returns Matches or not. """ for k, v in expected.items(): actual = getattr(self, k) if isinstance(v, Matcher): if not v.match(actual): return False else: if v != actual: return False return True
Ancestors
Static methods
def by(index: int) ‑> typing_extensions.Self
-
Set current fixture index.
Args
index
- Fixture index.
Returns
This type.
Expand source code
@classmethod def by(cls, index: int) -> Self: """ Set current fixture index. Args: index: Fixture index. Returns: This type. """ TestingState.set_index(cls, index) return cls # type: ignore
def fixture(db: Optional[Connection], variable: Union[int, dict[str, Any], typing_extensions.Self, list[dict[str, Any]], list[typing_extensions.Self], ForwardRef(None)] = None, index: Optional[int] = None, cfg: Optional[PyracmonConfiguration] = None) ‑> Union[typing_extensions.Self, list[typing_extensions.Self]]
-
Inserts record(s) with auto-generated column values.
Args
db
- DB connection. If a value evaluated to be
False
in boolean context, generated model is not inserted and just returned. variable
- When
int
, inserts records as many as the number. All of their column values are generated. Whendict
, model object or a list of them, inserts record(s) represented by them. Unspecified column values are generated. index
- Use this to specify index used to generate column values explicitly. If set, indexing state is not updated.
cfg
- Configuration used to control the generation of fixuture values. This argument is prepared only for internal use and can be changed or removed in future version.
Returns
Inserted model(s).
Expand source code
@classmethod def fixture( cls, db: Optional[Connection], variable: Optional[Union[int, dict[str, Any], Self, list[dict[str, Any]], list[Self]]] = None, index: Optional[int] = None, cfg: Optional[PyracmonConfiguration] = None, ) -> Union[Self, list[Self]]: """ Inserts record(s) with auto-generated column values. Args: db: DB connection. If a value evaluated to be `False` in boolean context, generated model is not inserted and just returned. variable: When `int`, inserts records as many as the number. All of their column values are generated. When `dict`, model object or a list of them, inserts record(s) represented by them. Unspecified column values are generated. index: Use this to specify index used to generate column values explicitly. If set, indexing state is not updated. cfg: Configuration used to control the generation of fixuture values. This argument is prepared only for internal use and can be changed or removed in future version. Returns: Inserted model(s). """ if variable is None or isinstance(variable, int): num = variable or 1 index = TestingState.inc(cls, num) if index is None else index models = [_generate_model(cls, index+i, None, cfg) for i in range(num)] if db: cls.inserts(db, models) return models elif isinstance(variable, (cls, dict)): num = 1 index = TestingState.inc(cls, num) if index is None else index model = _generate_model(cls, index, variable, cfg) if db: cls.insert(db, model) return model elif isinstance(variable, list): num = len(variable) index = TestingState.inc(cls, num) if index is None else index models = [_generate_model(cls, index+i, v, cfg) for i, v in enumerate(variable)] if db: cls.inserts(db, models) return models else: raise ValueError(f"Second argument of fixture() must be an int, dict, model or list of dict or model but {type(variable)} is passed.")
Methods
def match(self, **expected: Union[Matcher, Any]) ‑> bool
-
Tests columns values matches to expected values.
Warning
This method will be replaced in different implementation.
Args
expected
- Expected values.
Returns Matches or not.
Expand source code
def match(self, **expected: Union[Matcher, Any]) -> bool: """ Tests columns values matches to expected values. .. warning:: This method will be replaced in different implementation. Args: expected: Expected values. Returns Matches or not. """ for k, v in expected.items(): actual = getattr(self, k) if isinstance(v, Matcher): if not v.match(actual): return False else: if v != actual: return False return True