Skip to content

Commit

Permalink
Test the plugin for pook separately (#256)
Browse files Browse the repository at this point in the history
* Test the plugin for `pook` separately.
* Better Makefile.
  • Loading branch information
mindflayer authored Oct 19, 2024
1 parent e7e8172 commit 17fd151
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 52 deletions.
4 changes: 3 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@ types:

test: types
@echo "Running Python tests"
uv pip uninstall pook || true
export VIRTUAL_ENV=.venv; .venv/bin/wait-for-it --service httpbin.local:443 --service localhost:6379 --timeout 5 -- .venv/bin/pytest
uv pip install pook && .venv/bin/pytest tests/test_pook.py && uv pip uninstall pook
@echo ""

safetest:
Expand All @@ -41,7 +43,7 @@ publish: clean install-test-requirements
uv run twine upload --repository mocket dist/*.tar.gz

clean:
rm -rf *.egg-info dist/ requirements.txt uv.lock || true
rm -rf .coverage *.egg-info dist/ requirements.txt uv.lock || true
find . -type d -name __pycache__ -exec rm -rf {} \; || true

.PHONY: clean publish safetest test setup develop lint-python test-python _services-up
Expand Down
12 changes: 0 additions & 12 deletions mocket/mocket.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,14 +48,6 @@
except ImportError:
pyopenssl_override = False

try: # pragma: no cover
from aiohttp import TCPConnector

aiohttp_make_ssl_context_cache_clear = TCPConnector._make_ssl_context.cache_clear
except (ImportError, AttributeError):
aiohttp_make_ssl_context_cache_clear = None


true_socket = socket.socket
true_create_connection = socket.create_connection
true_gethostbyname = socket.gethostbyname
Expand Down Expand Up @@ -566,8 +558,6 @@ def enable(namespace=None, truesocket_recording_dir=None):
if pyopenssl_override: # pragma: no cover
# Take out the pyopenssl version - use the default implementation
extract_from_urllib3()
if aiohttp_make_ssl_context_cache_clear: # pragma: no cover
aiohttp_make_ssl_context_cache_clear()

@staticmethod
def disable():
Expand Down Expand Up @@ -604,8 +594,6 @@ def disable():
if pyopenssl_override: # pragma: no cover
# Put the pyopenssl version back in place
inject_into_urllib3()
if aiohttp_make_ssl_context_cache_clear: # pragma: no cover
aiohttp_make_ssl_context_cache_clear()

@classmethod
def get_namespace(cls):
Expand Down
29 changes: 16 additions & 13 deletions mocket/plugins/pook_mock_engine.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from pook.engine import MockEngine
from pook.interceptors.base import BaseInterceptor
try:
from pook.engine import MockEngine
except ModuleNotFoundError:
MockEngine = object

from mocket.mocket import Mocket
from mocket.mockhttp import Entry, Response
Expand Down Expand Up @@ -37,17 +39,6 @@ def single_register(
return entry


class MocketInterceptor(BaseInterceptor):
@staticmethod
def activate():
Mocket.disable()
Mocket.enable()

@staticmethod
def disable():
Mocket.disable()


class MocketEngine(MockEngine):
def __init__(self, engine):
def mocket_mock_fun(*args, **kwargs):
Expand All @@ -68,6 +59,18 @@ def mocket_mock_fun(*args, **kwargs):

return mock

from pook.interceptors.base import BaseInterceptor

class MocketInterceptor(BaseInterceptor):
@staticmethod
def activate():
Mocket.disable()
Mocket.enable()

@staticmethod
def disable():
Mocket.disable()

# Store plugins engine
self.engine = engine
# Store HTTP client interceptors
Expand Down
5 changes: 2 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -46,15 +46,14 @@ test = [
"redis",
"gevent",
"sure",
"pook",
"flake8>5",
"xxhash",
"httpx",
"pipfile",
"build",
"twine",
"fastapi",
"aiohttp<3.10.6",
"aiohttp",
"wait-for-it",
"mypy",
"types-decorator",
Expand Down Expand Up @@ -89,7 +88,7 @@ exclude = [
testpaths = [
"tests", "mocket",
]
addopts = "--doctest-modules --cov=mocket --cov-report=term-missing -v -x"
addopts = "--doctest-modules --cov=mocket --cov-report=term-missing --cov-append -v -x"

[tool.ruff]
src = ["mocket", "tests"]
Expand Down
3 changes: 2 additions & 1 deletion tests/test_asyncio.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import socket
import tempfile

import aiohttp
import pytest

from mocket import Mocketizer, async_mocketize
Expand Down Expand Up @@ -46,6 +45,8 @@ async def test_asyncio_connection():
@pytest.mark.asyncio
@async_mocketize
async def test_aiohttp():
import aiohttp

url = "https://bar.foo/"
data = {"message": "Hello"}

Expand Down
46 changes: 24 additions & 22 deletions tests/test_pook.py
Original file line number Diff line number Diff line change
@@ -1,29 +1,31 @@
import pook
import requests
import contextlib

from mocket.plugins.pook_mock_engine import MocketEngine
with contextlib.suppress(ModuleNotFoundError):
import pook
import requests

pook.set_mock_engine(MocketEngine)
from mocket.plugins.pook_mock_engine import MocketEngine

pook.set_mock_engine(MocketEngine)

@pook.on
def test_pook_engine():
url = "http://twitter.com/api/1/foobar"
status = 404
response_json = {"error": "foo"}
@pook.on
def test_pook_engine():
url = "http://twitter.com/api/1/foobar"
status = 404
response_json = {"error": "foo"}

mock = pook.get(
url,
headers={"content-type": "application/json"},
reply=status,
response_json=response_json,
)
mock.persist()
mock = pook.get(
url,
headers={"content-type": "application/json"},
reply=status,
response_json=response_json,
)
mock.persist()

requests.get(url)
assert mock.calls == 1
requests.get(url)
assert mock.calls == 1

resp = requests.get(url)
assert resp.status_code == status
assert resp.json() == response_json
assert mock.calls == 2
resp = requests.get(url)
assert resp.status_code == status
assert resp.json() == response_json
assert mock.calls == 2

0 comments on commit 17fd151

Please sign in to comment.