-
Notifications
You must be signed in to change notification settings - Fork 41
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Giorgio Salluzzo
committed
Jan 29, 2017
1 parent
d2a27f7
commit 04c0c84
Showing
7 changed files
with
116 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
try: # pook not available on Python 2.6 | ||
from pook.engine import MockEngine | ||
from pook.interceptors.base import BaseInterceptor | ||
|
||
from mocket.mocket import Mocket | ||
from mocket.mockhttp import Entry, Response | ||
|
||
|
||
class MocketPookEntry(Entry): | ||
pook_request = None | ||
pook_engine = None | ||
|
||
def can_handle(self, data): | ||
can_handle = super(MocketPookEntry, self).can_handle(data) | ||
|
||
if can_handle: | ||
self.pook_engine.match(self.pook_request) | ||
return can_handle | ||
|
||
@classmethod | ||
def single_register(cls, method, uri, body='', status=200, headers=None): | ||
entry = cls(uri, method, Response(body=body, status=status, headers=headers)) | ||
Mocket.register(entry) | ||
return entry | ||
|
||
|
||
class MocketInterceptor(BaseInterceptor): | ||
def activate(self): | ||
Mocket.disable() | ||
Mocket.enable() | ||
|
||
def disable(self): | ||
Mocket.disable() | ||
|
||
|
||
class MocketEngine(MockEngine): | ||
|
||
def __init__(self, engine): | ||
# Store plugins engine | ||
self.engine = engine | ||
# Store HTTP client interceptors | ||
self.interceptors = [] | ||
# Self-register MocketInterceptor | ||
self.add_interceptor(MocketInterceptor) | ||
|
||
def activate(self): | ||
for mock in self.engine.mocks: | ||
|
||
request = mock._request | ||
method = request.method | ||
url = request.rawurl | ||
|
||
response = mock._response | ||
body = response._body | ||
status = response._status | ||
headers = response._headers | ||
|
||
entry = MocketPookEntry.single_register(method, url, body, status, headers) | ||
entry.pook_engine = self.engine | ||
entry.pook_request = request | ||
|
||
super(MocketEngine, self).activate() | ||
|
||
except ImportError: | ||
pass |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,4 +4,4 @@ pytest | |
pytest-cov | ||
mock | ||
requests | ||
redis | ||
redis |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
import requests | ||
|
||
from mocket.plugins.mocket_pook import MocketEngine | ||
|
||
|
||
def test_pook_engine(): | ||
import pook | ||
pook.activate() | ||
|
||
pook.set_mock_engine(MocketEngine) | ||
mock = pook.get( | ||
'http://twitter.com/api/1/foobar', | ||
body='{"a": 1}', | ||
headers={'content-type': 'application/json'}, | ||
reply=404, | ||
response_json={'error': 'foo'}, | ||
) | ||
mock.persist() | ||
|
||
requests.get('http://twitter.com/api/1/foobar') | ||
assert mock.calls == 1 | ||
|
||
resp = requests.get('http://twitter.com/api/1/foobar') | ||
assert resp.status_code == 404 | ||
assert resp.json() == {'error': 'foo'} | ||
assert mock.calls == 2 | ||
|
||
pook.disable() |