@@ -279,6 +279,61 @@ def testDownloadReport(self):
279279 self .header_handler .GetReportDownloadHeaders .assert_called_once_with (
280280 None , None , None )
281281
282+ def testDownloadReportAsString (self ):
283+ report_definition = {'table' : 'campaigns' ,
284+ 'downloadFormat' : 'CSV' }
285+ serialized_report = 'nuinbwuign'
286+ post_body = urllib .urlencode ({'__rdxml' : serialized_report })
287+ if not PYTHON2 :
288+ post_body = bytes (post_body , 'utf-8' )
289+ headers = {'Authorization' : 'ya29.something' }
290+ self .header_handler .GetReportDownloadHeaders .return_value = headers
291+ content = u'CONTENT STRING アングリーバード'
292+ fake_request = io .BytesIO ()
293+ fake_request .write (content .encode ('utf-8' ) if PYTHON2
294+ else bytes (content , 'utf-8' ))
295+ fake_request .seek (0 )
296+ self .marshaller .process .return_value = serialized_report
297+
298+ with mock .patch ('suds.mx.Content' ) as mock_content :
299+ with mock .patch (URL_REQUEST_PATH + '.Request' ) as mock_request :
300+ self .opener .open .return_value = fake_request
301+ s = self .report_downloader .DownloadReportAsString (report_definition )
302+ mock_request .assert_called_once_with (
303+ ('https://adwords.google.com/api/adwords/reportdownload/%s'
304+ % self .version ), post_body , headers )
305+ self .opener .open .assert_called_once_with (mock_request .return_value )
306+ self .marshaller .process .assert_called_once_with (
307+ mock_content .return_value )
308+ self .assertEqual (content , s )
309+ self .header_handler .GetReportDownloadHeaders .assert_called_once_with (
310+ None , None , None )
311+
312+ def testDownloadReportAsStringWithAwql (self ):
313+ query = 'SELECT Id FROM Campaign WHERE NAME LIKE \' %Test%\' '
314+ file_format = 'CSV'
315+ post_body = urllib .urlencode ({'__fmt' : file_format , '__rdquery' : query })
316+ if not PYTHON2 :
317+ post_body = bytes (post_body , 'utf-8' )
318+ headers = {'Authorization' : 'ya29.something' }
319+ self .header_handler .GetReportDownloadHeaders .return_value = headers
320+ content = u'CONTENT STRING アングリーバード'
321+ fake_request = io .BytesIO ()
322+ fake_request .write (content .encode ('utf-8' ) if PYTHON2
323+ else bytes (content , 'utf-8' ))
324+ fake_request .seek (0 )
325+ with mock .patch (URL_REQUEST_PATH + '.Request' ) as mock_request :
326+ self .opener .open .return_value = fake_request
327+ s = self .report_downloader .DownloadReportAsStringWithAwql (query ,
328+ file_format )
329+ mock_request .assert_called_once_with (
330+ ('https://adwords.google.com/api/adwords/reportdownload/%s'
331+ % self .version ), post_body , headers )
332+ self .opener .open .assert_called_once_with (mock_request .return_value )
333+ self .assertEqual (content , s )
334+ self .header_handler .GetReportDownloadHeaders .assert_called_once_with (
335+ None , None , None )
336+
282337 def testDownloadReportCheckFormat_CSVStringSuccess (self ):
283338 output_file = io .StringIO ()
284339
@@ -359,7 +414,7 @@ def testDownloadReportWithAwql(self):
359414 post_body = bytes (post_body , 'utf-8' )
360415 headers = {'Authorization' : 'ya29.something' }
361416 self .header_handler .GetReportDownloadHeaders .return_value = headers
362- content = u'CONTENT STRING'
417+ content = u'CONTENT STRING 广告客户 '
363418 fake_request = io .StringIO () if PYTHON2 else io .BytesIO ()
364419 fake_request .write (content if PYTHON2 else bytes (content , 'utf-8' ))
365420 fake_request .seek (0 )
0 commit comments