11import unittest
22from gcm import *
33import json
4- from mock import MagicMock
4+ from mock import MagicMock , patch
55import time
66
77
@@ -15,6 +15,24 @@ def side_effect(*args, **kwargs):
1515 return side_effect
1616
1717
18+ class MockResponse (object ):
19+ """
20+ Mock urllib2.urlopen response.
21+ http://stackoverflow.com/a/2276727
22+ """
23+ def __init__ (self , resp_data , code = 200 , msg = 'OK' ):
24+ self .resp_data = resp_data
25+ self .code = code
26+ self .msg = msg
27+ self .headers = {'content-type' : 'text/xml; charset=utf-8' }
28+
29+ def read (self ):
30+ return self .resp_data
31+
32+ def getcode (self ):
33+ return self .code
34+
35+
1836class GCMTest (unittest .TestCase ):
1937
2038 def setUp (self ):
@@ -166,6 +184,44 @@ def test_handle_plaintext_response(self):
166184 res = self .gcm .handle_plaintext_response (response )
167185 self .assertEqual (res , '3456' )
168186
187+ @patch ('urllib2.urlopen' )
188+ def test_make_request_plaintext (self , urlopen_mock ):
189+ """ Test plaintext make_request. """
190+
191+ # Set mock value for urlopen return value
192+ urlopen_mock .return_value = MockResponse ('blah' )
193+
194+ # Perform request
195+ response = self .gcm .make_request ({'message' : 'test' }, is_json = False )
196+
197+ # Get request (first positional argument to urlopen)
198+ # Ref: http://www.voidspace.org.uk/python/mock/mock.html#mock.Mock.call_args
199+ request = urlopen_mock .call_args [0 ][0 ]
200+
201+ # Test encoded data
202+ encoded_data = request .get_data ()
203+ self .assertEquals (
204+ encoded_data , 'message=test'
205+ )
206+
207+ # Assert return value
208+ self .assertEquals (
209+ response ,
210+ 'blah'
211+ )
212+
213+
214+ @patch ('urllib2.urlopen' )
215+ def test_make_request_unicode (self , urlopen_mock ):
216+ """ Regression: Test make_request with unicode payload. """
217+
218+ # Unicode character in data
219+ data = {
220+ 'message' : u'\x80 abc'
221+ }
222+
223+ self .gcm .make_request (data , is_json = False )
224+
169225 def test_retry_plaintext_request_ok (self ):
170226 returns = [GCMUnavailableException (), GCMUnavailableException (), 'id=123456789' ]
171227
0 commit comments