diff --git a/tests/test_defaults.py b/tests/test_defaults.py index 68674440..eec67ef3 100644 --- a/tests/test_defaults.py +++ b/tests/test_defaults.py @@ -67,6 +67,7 @@ def global_test_2(): assert global_test_2.cache_dpath() is not None +@pytest.mark.mongo def test_mongetter_default_param(): cachier.set_default_params(mongetter=_test_mongetter) diff --git a/tests/test_general.py b/tests/test_general.py index f1aa6888..f0d110ce 100644 --- a/tests/test_general.py +++ b/tests/test_general.py @@ -154,7 +154,8 @@ def _calls_wait_for_calc_timeout_slow(res_queue): @pytest.mark.parametrize( 'mongetter,backend', [ - (_test_mongetter, 'mongo'), + # (_test_mongetter, 'mongo'), # Please do NOT test the mongo backend + # here. It is tested in test_mongo_core.py (None, 'memory'), (None, 'pickle'), ] @@ -182,7 +183,8 @@ def func(arg_1, arg_2): @pytest.mark.parametrize( 'mongetter,backend', [ - (_test_mongetter, 'mongo'), + # (_test_mongetter, 'mongo'), # Please do NOT test the mongo backend + # here. It is tested in test_mongo_core.py (None, 'memory'), (None, 'pickle'), ] diff --git a/tests/test_mongo_core.py b/tests/test_mongo_core.py index a6458355..2174d734 100644 --- a/tests/test_mongo_core.py +++ b/tests/test_mongo_core.py @@ -8,7 +8,7 @@ import threading from datetime import timedelta from random import random -from time import sleep +from time import sleep, time from urllib.parse import quote_plus from birch import Birch # type: ignore[import-not-found] @@ -25,8 +25,6 @@ # === Enables testing vs a real MongoDB instance === -CFG = Birch("cachier") - class CfgKey(): HOST = "TEST_HOST" @@ -36,6 +34,14 @@ class CfgKey(): TEST_VS_LIVE_MONGO = "TEST_VS_LIVE_MONGO" +CFG = Birch( + namespace="cachier", + defaults={ + CfgKey.TEST_VS_LIVE_MONGO: False, + }, +) + + URI_TEMPLATE = ( "mongodb+srv://{uname}:{pwd}@{host}/{db}?retrywrites=true&w=majority") @@ -114,6 +120,50 @@ def _test_mongo_caching(arg_1, arg_2): assert val6 == val5 +@pytest.mark.mongo +def test_mongo_precache_value(): + + @cachier(backend='mongo', mongetter=_test_mongetter) + def func(arg_1, arg_2): + """Some function.""" + return arg_1 + arg_2 + + result = func.precache_value(2, 2, value_to_cache=5) + assert result == 5 + result = func(2, 2) + assert result == 5 + func.clear_cache() + result = func(2, 2) + assert result == 4 + result = func.precache_value(2, arg_2=2, value_to_cache=5) + assert result == 5 + result = func(2, arg_2=2) + assert result == 5 + + +@pytest.mark.mongo +def test_mongo_ignore_self_in_methods(): + + class TestClass(): + @cachier(backend='mongo', mongetter=_test_mongetter) + def takes_2_seconds(self, arg_1, arg_2): + """Some function.""" + sleep(2) + return arg_1 + arg_2 + + test_object_1 = TestClass() + test_object_2 = TestClass() + test_object_1.takes_2_seconds.clear_cache() + test_object_2.takes_2_seconds.clear_cache() + result_1 = test_object_1.takes_2_seconds(1, 2) + assert result_1 == 3 + start = time() + result_2 = test_object_2.takes_2_seconds(1, 2) + end = time() + assert result_2 == 3 + assert end - start < 1 + + @pytest.mark.mongo def test_mongo_core_keywords(): """Basic Mongo core functionality with keyword arguments."""