59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
"""Tests for heurams.kernel.algorithms.base.BaseAlgorithm"""
|
|
|
|
from copy import deepcopy
|
|
|
|
import pytest
|
|
|
|
from heurams.kernel.algorithms import BaseAlgorithm
|
|
from heurams.services import timer
|
|
|
|
|
|
class TestBaseAlgorithmDefaults:
|
|
def test_defaults_have_required_keys(self):
|
|
required = {
|
|
"real_rept",
|
|
"rept",
|
|
"interval",
|
|
"last_date",
|
|
"next_date",
|
|
"is_activated",
|
|
"last_modify",
|
|
}
|
|
assert required.issubset(BaseAlgorithm.defaults.keys())
|
|
|
|
def test_defaults_last_modify_is_reasonable(self):
|
|
# defaults is evaluated at module import, not test time
|
|
ts = BaseAlgorithm.defaults["last_modify"]
|
|
assert isinstance(ts, float)
|
|
assert ts > 1e9 # reasonable UNIX timestamp
|
|
|
|
|
|
class TestBaseAlgorithmMethods:
|
|
def test_revisor_does_nothing(self):
|
|
d = {"SM-2": {"rept": 0}}
|
|
BaseAlgorithm.revisor(d, feedback=5)
|
|
# Base.revisor is a no-op — dict unchanged
|
|
assert d["SM-2"]["rept"] == 0
|
|
|
|
def test_is_due_returns_one(self):
|
|
assert BaseAlgorithm.is_due({}) == 1
|
|
|
|
def test_get_rating_returns_empty(self):
|
|
assert BaseAlgorithm.get_rating({}) == ""
|
|
|
|
def test_nextdate_returns_negative_one(self):
|
|
assert BaseAlgorithm.nextdate({}) == -1
|
|
|
|
|
|
class TestBaseAlgorithmIntegrity:
|
|
def test_check_integrity_valid(self, sample_algodata_sm2):
|
|
# BaseAlgorithm.algo_name is "BaseAlgorithm", not "SM-2"
|
|
data = {"BaseAlgorithm": sample_algodata_sm2["SM-2"]}
|
|
assert BaseAlgorithm.check_integrity(data) == 1
|
|
|
|
def test_check_integrity_invalid(self):
|
|
assert BaseAlgorithm.check_integrity({"SM-2": {}}) == 0
|
|
|
|
def test_check_integrity_missing_key(self):
|
|
assert BaseAlgorithm.check_integrity({}) == 0
|