You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

conftest.py 1.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import os
  2. from unittest.mock import MagicMock, patch
  3. import pytest
  4. from flask import Flask
  5. # Getting the absolute path of the current file's directory
  6. ABS_PATH = os.path.dirname(os.path.abspath(__file__))
  7. # Getting the absolute path of the project's root directory
  8. PROJECT_DIR = os.path.abspath(os.path.join(ABS_PATH, os.pardir, os.pardir))
  9. CACHED_APP = Flask(__name__)
  10. # set global mock for Redis client
  11. redis_mock = MagicMock()
  12. redis_mock.get = MagicMock(return_value=None)
  13. redis_mock.setex = MagicMock()
  14. redis_mock.setnx = MagicMock()
  15. redis_mock.delete = MagicMock()
  16. redis_mock.lock = MagicMock()
  17. redis_mock.exists = MagicMock(return_value=False)
  18. redis_mock.set = MagicMock()
  19. redis_mock.expire = MagicMock()
  20. redis_mock.hgetall = MagicMock(return_value={})
  21. redis_mock.hdel = MagicMock()
  22. redis_mock.incr = MagicMock(return_value=1)
  23. # Add the API directory to Python path to ensure proper imports
  24. import sys
  25. sys.path.insert(0, PROJECT_DIR)
  26. # apply the mock to the Redis client in the Flask app
  27. from extensions import ext_redis
  28. redis_patcher = patch.object(ext_redis, "redis_client", redis_mock)
  29. redis_patcher.start()
  30. @pytest.fixture
  31. def app() -> Flask:
  32. return CACHED_APP
  33. @pytest.fixture(autouse=True)
  34. def _provide_app_context(app: Flask):
  35. with app.app_context():
  36. yield
  37. @pytest.fixture(autouse=True)
  38. def reset_redis_mock():
  39. """reset the Redis mock before each test"""
  40. redis_mock.reset_mock()
  41. redis_mock.get.return_value = None
  42. redis_mock.setex.return_value = None
  43. redis_mock.setnx.return_value = None
  44. redis_mock.delete.return_value = None
  45. redis_mock.exists.return_value = False
  46. redis_mock.set.return_value = None
  47. redis_mock.expire.return_value = None
  48. redis_mock.hgetall.return_value = {}
  49. redis_mock.hdel.return_value = None
  50. redis_mock.incr.return_value = 1