2024-04-08 18:51:46 +08:00
|
|
|
import os
|
2025-06-23 09:49:13 +08:00
|
|
|
from unittest.mock import MagicMock, patch
|
2024-04-08 18:51:46 +08:00
|
|
|
|
2024-09-10 15:23:16 +08:00
|
|
|
import pytest
|
|
|
|
from flask import Flask
|
|
|
|
|
2024-04-08 18:51:46 +08:00
|
|
|
# Getting the absolute path of the current file's directory
|
|
|
|
ABS_PATH = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
|
|
|
|
# Getting the absolute path of the project's root directory
|
|
|
|
PROJECT_DIR = os.path.abspath(os.path.join(ABS_PATH, os.pardir, os.pardir))
|
2024-09-10 15:23:16 +08:00
|
|
|
|
|
|
|
CACHED_APP = Flask(__name__)
|
|
|
|
|
2025-06-23 09:49:13 +08:00
|
|
|
# set global mock for Redis client
|
|
|
|
redis_mock = MagicMock()
|
|
|
|
redis_mock.get = MagicMock(return_value=None)
|
|
|
|
redis_mock.setex = MagicMock()
|
|
|
|
redis_mock.setnx = MagicMock()
|
|
|
|
redis_mock.delete = MagicMock()
|
|
|
|
redis_mock.lock = MagicMock()
|
|
|
|
redis_mock.exists = MagicMock(return_value=False)
|
|
|
|
redis_mock.set = MagicMock()
|
|
|
|
redis_mock.expire = MagicMock()
|
|
|
|
redis_mock.hgetall = MagicMock(return_value={})
|
|
|
|
redis_mock.hdel = MagicMock()
|
|
|
|
redis_mock.incr = MagicMock(return_value=1)
|
|
|
|
|
|
|
|
# apply the mock to the Redis client in the Flask app
|
|
|
|
redis_patcher = patch("extensions.ext_redis.redis_client", redis_mock)
|
|
|
|
redis_patcher.start()
|
|
|
|
|
2024-09-10 15:23:16 +08:00
|
|
|
|
2024-09-12 18:09:16 +08:00
|
|
|
@pytest.fixture
|
2024-09-10 15:23:16 +08:00
|
|
|
def app() -> Flask:
|
|
|
|
return CACHED_APP
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
|
|
def _provide_app_context(app: Flask):
|
|
|
|
with app.app_context():
|
|
|
|
yield
|
2025-06-23 09:49:13 +08:00
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
|
|
def reset_redis_mock():
|
|
|
|
"""reset the Redis mock before each test"""
|
|
|
|
redis_mock.reset_mock()
|
|
|
|
redis_mock.get.return_value = None
|
|
|
|
redis_mock.setex.return_value = None
|
|
|
|
redis_mock.setnx.return_value = None
|
|
|
|
redis_mock.delete.return_value = None
|
|
|
|
redis_mock.exists.return_value = False
|
|
|
|
redis_mock.set.return_value = None
|
|
|
|
redis_mock.expire.return_value = None
|
|
|
|
redis_mock.hgetall.return_value = {}
|
|
|
|
redis_mock.hdel.return_value = None
|
|
|
|
redis_mock.incr.return_value = 1
|