Skip to content
This repository was archived by the owner on Aug 29, 2019. It is now read-only.

Commit b143223

Browse files
author
Dan Worth
committed
Replace dingus with mock
1 parent 4492251 commit b143223

File tree

5 files changed

+35
-18
lines changed

5 files changed

+35
-18
lines changed

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
'oauth2>=1.2',
3333
],
3434
tests_require=[
35-
'dingus',
35+
'mock',
3636
'coverage',
3737
],
3838
setup_requires=[

tests/mock_adapter.py

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import json
22
import os
3+
from urlparse import urlparse, parse_qs
4+
from urllib import quote
35

4-
import dingus
6+
import mock
57

68
from aweber_api import AWeberUser
79
from aweber_api import OAuthAdapter
@@ -15,9 +17,8 @@
1517
'/accounts/1': ({}, 'accounts/1'),
1618
'/accounts/1?ws.op=findSubscribers&' \
1719
'email=joe%40example.com': ({}, 'accounts/findSubscribers'),
18-
'/accounts/1?ws.op=findSubscribers&' \
19-
'email=joe%40example.com&' \
20-
'ws.show=total_size': ({}, 'accounts/findSubscribers_ts'),
20+
'/accounts/1?ws.show=total_size&ws.op=findSubscribers&' \
21+
'email=joe%40example.com': ({}, 'accounts/findSubscribers_ts'),
2122
'/accounts/1?ws.op=getWebForms': ({}, 'accounts/webForms'),
2223
'/accounts/1?ws.op=getWebFormSplitTests': ({}, 'accounts/webFormSplitTests'),
2324
'/accounts/1/lists': ({}, 'lists/page1'),
@@ -37,17 +38,16 @@
3738
'/accounts/1/lists/505454/subscribers/3': ({}, 'subscribers/3'),
3839
'/accounts/1/lists/303449/subscribers/1?ws.op=getActivity': (
3940
{}, 'subscribers/get_activity'),
40-
'/accounts/1/lists/303449/subscribers/1?ws.op=getActivity&ws.show=total_size': (
41+
'/accounts/1/lists/303449/subscribers/1?ws.show=total_size&ws.op=getActivity': (
4142
{}, 'subscribers/get_activity_ts'),
4243
'/accounts/1/lists/303449/subscribers?ws.op=find&name=joe': (
4344
{'status': '400'}, 'error'),
4445
'/accounts/1?ws.op=findSubscribers&name=bob': (
4546
{'status': '400'}, 'error'),
4647
'/accounts/1/lists/303449/subscribers?ws.op=find&' \
4748
'email=joe%40example.com': ({}, 'subscribers/find'),
48-
'/accounts/1/lists/303449/subscribers?ws.op=find&' \
49-
'email=joe%40example.com&' \
50-
'ws.show=total_size': ({}, 'subscribers/find_ts'),
49+
'/accounts/1/lists/303449/subscribers?ws.show=total_size&ws.op=find&' \
50+
'email=joe%40example.com': ({}, 'subscribers/find_ts'),
5151
},
5252
'POST' : {
5353
'/accounts/1/lists/303449/any_collection': ({
@@ -72,8 +72,24 @@
7272
}
7373
}
7474

75+
def _sort_qs_for_url(url):
76+
"""Sort query string parameters in desending order."""
77+
parsed = urlparse(url)
78+
79+
if len(parsed.query) == 0:
80+
return parsed.path
81+
82+
qs = parse_qs(parsed.query)
83+
params = []
84+
for key in reversed(sorted(qs.keys())):
85+
params.append("{0}={1}".format(key, quote(qs[key][0])))
86+
87+
return "{0}?{1}".format(parsed.path, "&".join(params))
88+
89+
7590
def request(self, url, method, **kwargs):
7691
"""Return a tuple to simulate calling oauth2.Client.request."""
92+
url = _sort_qs_for_url(url)
7793
(headers, file) = responses[method][url]
7894
if 'status' not in headers:
7995
# assume 200 OK if not otherwise specified
@@ -90,9 +106,10 @@ class MockAdapter(OAuthAdapter):
90106
"""Mocked OAuthAdapter."""
91107
requests = []
92108

93-
@dingus.patch('oauth2.Client.request', request)
109+
@mock.patch('oauth2.Client.request', request)
94110
def request(self, method, url, data={}, response='body'):
95111
"""Mock the oauth.Client.request method"""
112+
url = _sort_qs_for_url(url)
96113
req = super(MockAdapter, self).request(method, url, data, response)
97114
self.requests.append({'method' : method, 'url' : url, 'data' : data})
98115
return req

tests/test_aweber_api.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from unittest import TestCase
22
from mock_adapter import MockAdapter
3-
from dingus import Dingus
3+
from mock import Mock
44
from aweber_api import (AWeberAPI, AWeberUser, ACCESS_TOKEN_URL, AUTHORIZE_URL,
55
REQUEST_TOKEN_URL, AWeberEntry)
66

@@ -19,9 +19,9 @@ class WhenGettingARequestToken(AWeberAPITest):
1919
def setUp(self):
2020
AWeberAPITest.setUp(self)
2121
self.response = "oauth_token=1234&oauth_token_secret=abcd"
22-
self.aweber.adapter = Dingus()
22+
self.aweber.adapter = Mock()
2323
self.aweber.adapter.user = AWeberUser()
24-
self.aweber.adapter.request = Dingus(return_value=self.response)
24+
self.aweber.adapter.request = Mock(return_value=self.response)
2525

2626
def test_should_get_request_token(self):
2727
token, secret = self.aweber.get_request_token('http://localhost/demo')
@@ -57,9 +57,9 @@ class WhenGettingAnAccessToken(AWeberAPITest):
5757
def setUp(self):
5858
AWeberAPITest.setUp(self)
5959
self.response = "oauth_token=cheeseburger&oauth_token_secret=hotdog"
60-
self.aweber.adapter = Dingus()
60+
self.aweber.adapter = Mock()
6161
self.aweber.adapter.user = AWeberUser()
62-
self.aweber.adapter.request = Dingus(return_value=self.response)
62+
self.aweber.adapter.request = Mock(return_value=self.response)
6363

6464
self.aweber.user.request_token = '1234'
6565
self.aweber.user.token_secret = 'abcd'

tests/test_data_dict.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
from unittest import TestCase
22
from aweber_api.data_dict import DataDict
3-
from dingus import Dingus
3+
from mock import Mock
44

55
class TestDataDict(TestCase):
66

77
def setUp(self):
8-
self.obj = Dingus()
8+
self.obj = Mock()
99
self.obj.data = {}
1010
self.data = {
1111
'favorite food' : 'Tacos',

tox.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@ deps =
1212
oauth2>=1.2
1313
unittest2
1414
coverage
15-
dingus
15+
mock

0 commit comments

Comments
 (0)