google-adwords-api 0.12.1 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/ChangeLog +3 -0
- data/examples/v201402/basic_operations/delete_ad_group.rb +1 -22
- data/examples/{v201309/basic_operations/delete_ad_group.rb → v201402/basic_operations/delete_ad_group.rb~} +2 -8
- data/examples/v201402/basic_operations/delete_campaign.rb +2 -23
- data/examples/{v201309/basic_operations/update_campaign.rb → v201402/basic_operations/delete_campaign.rb~} +13 -12
- data/examples/v201406/basic_operations/remove_ad_group.rb +1 -22
- data/examples/{v201309/basic_operations/update_ad_group.rb → v201406/basic_operations/remove_ad_group.rb~} +14 -13
- data/examples/v201406/basic_operations/remove_campaign.rb +4 -24
- data/examples/{v201309/basic_operations/delete_campaign.rb → v201406/basic_operations/remove_campaign.rb~} +11 -11
- data/lib/adwords_api.rb +5 -8
- data/lib/adwords_api/api_config.rb +0 -76
- data/lib/adwords_api/report_utils.rb +9 -0
- data/lib/adwords_api/report_utils.rb~ +283 -0
- data/lib/adwords_api/version.rb +1 -1
- data/lib/adwords_api/version.rb~ +26 -0
- data/test/adwords_api/test_adwords_api.rb +5 -21
- data/test/adwords_api/test_adwords_api.rb~ +114 -0
- data/test/adwords_api/test_api_config.rb +8 -8
- data/test/adwords_api/test_report_utils.rb +29 -1
- data/test/adwords_api/test_report_utils.rb~ +216 -0
- data/test/templates/{v201309 → v201402}/basic_operations_get_campaigns.def +7 -7
- data/test/templates/{v201309 → v201402}/misc_use_oauth2_jwt.def +7 -7
- data/test/templates/v201406/basic_operations_get_campaigns.def +114 -0
- data/test/templates/v201406/misc_use_oauth2_jwt.def +131 -0
- metadata +14 -139
- data/examples/v201309/account_management/create_account.rb +0 -95
- data/examples/v201309/account_management/get_account_alerts.rb +0 -122
- data/examples/v201309/account_management/get_account_changes.rb +0 -145
- data/examples/v201309/account_management/get_account_hierarchy.rb +0 -103
- data/examples/v201309/advanced_operations/add_ad_group_bid_modifier.rb +0 -105
- data/examples/v201309/advanced_operations/add_click_to_download_ad.rb +0 -137
- data/examples/v201309/advanced_operations/add_site_links.rb +0 -306
- data/examples/v201309/advanced_operations/create_and_attach_shared_keyword_set.rb +0 -147
- data/examples/v201309/advanced_operations/find_and_remove_criteria_from_shared_set.rb +0 -181
- data/examples/v201309/advanced_operations/get_ad_group_bid_modifiers.rb +0 -106
- data/examples/v201309/advanced_operations/update_site_links.rb +0 -194
- data/examples/v201309/advanced_operations/upload_offline_conversions.rb +0 -117
- data/examples/v201309/advanced_operations/use_shared_bidding_strategy.rb +0 -163
- data/examples/v201309/basic_operations/add_ad_groups.rb +0 -143
- data/examples/v201309/basic_operations/add_campaigns.rb +0 -162
- data/examples/v201309/basic_operations/add_keywords.rb +0 -116
- data/examples/v201309/basic_operations/add_text_ads.rb +0 -113
- data/examples/v201309/basic_operations/delete_ad.rb +0 -93
- data/examples/v201309/basic_operations/delete_keyword.rb +0 -98
- data/examples/v201309/basic_operations/get_ad_groups.rb +0 -106
- data/examples/v201309/basic_operations/get_campaigns.rb +0 -101
- data/examples/v201309/basic_operations/get_campaigns_with_awql.rb +0 -93
- data/examples/v201309/basic_operations/get_keywords.rb +0 -112
- data/examples/v201309/basic_operations/get_text_ads.rb +0 -114
- data/examples/v201309/basic_operations/pause_ad.rb +0 -92
- data/examples/v201309/basic_operations/update_keyword.rb +0 -110
- data/examples/v201309/campaign_management/add_experiment.rb +0 -166
- data/examples/v201309/campaign_management/add_keywords_in_bulk.rb +0 -158
- data/examples/v201309/campaign_management/add_location_extension.rb +0 -125
- data/examples/v201309/campaign_management/get_all_disapproved_ads.rb +0 -101
- data/examples/v201309/campaign_management/get_all_disapproved_ads_with_awql.rb +0 -93
- data/examples/v201309/campaign_management/promote_experiment.rb +0 -85
- data/examples/v201309/campaign_management/set_ad_parameters.rb +0 -122
- data/examples/v201309/campaign_management/set_criterion_bid_modifier.rb +0 -108
- data/examples/v201309/campaign_management/validate_text_ad.rb +0 -114
- data/examples/v201309/error_handling/handle_captcha_challenge.rb +0 -93
- data/examples/v201309/error_handling/handle_partial_failures.rb +0 -134
- data/examples/v201309/error_handling/handle_policy_violation_error.rb +0 -145
- data/examples/v201309/error_handling/handle_two_factor_authorization_error.rb +0 -88
- data/examples/v201309/misc/get_all_images_and_videos.rb +0 -108
- data/examples/v201309/misc/setup_oauth2.rb +0 -88
- data/examples/v201309/misc/upload_image.rb +0 -97
- data/examples/v201309/misc/use_oauth2_jwt.rb +0 -97
- data/examples/v201309/optimization/estimate_keyword_traffic.rb +0 -137
- data/examples/v201309/optimization/get_keyword_bid_simulations.rb +0 -100
- data/examples/v201309/optimization/get_keyword_ideas.rb +0 -130
- data/examples/v201309/optimization/get_placement_ideas.rb +0 -112
- data/examples/v201309/remarketing/add_audience.rb +0 -123
- data/examples/v201309/remarketing/add_conversion_tracker.rb +0 -104
- data/examples/v201309/reporting/download_criteria_report.rb +0 -87
- data/examples/v201309/reporting/download_criteria_report_with_awql.rb +0 -86
- data/examples/v201309/reporting/get_report_fields.rb +0 -79
- data/examples/v201309/reporting/parallel_report_download.rb +0 -171
- data/examples/v201309/targeting/add_campaign_targeting_criteria.rb +0 -123
- data/examples/v201309/targeting/add_demographic_targeting_criteria.rb +0 -116
- data/examples/v201309/targeting/get_campaign_targeting_criteria.rb +0 -110
- data/examples/v201309/targeting/get_targetable_languages_and_carriers.rb +0 -94
- data/examples/v201309/targeting/lookup_location.rb +0 -112
- data/lib/adwords_api/v201309/ad_group_ad_service.rb +0 -42
- data/lib/adwords_api/v201309/ad_group_ad_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/ad_group_bid_modifier_service.rb +0 -38
- data/lib/adwords_api/v201309/ad_group_bid_modifier_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/ad_group_criterion_service.rb +0 -42
- data/lib/adwords_api/v201309/ad_group_criterion_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/ad_group_feed_service.rb +0 -38
- data/lib/adwords_api/v201309/ad_group_feed_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/ad_group_service.rb +0 -42
- data/lib/adwords_api/v201309/ad_group_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/ad_param_service.rb +0 -38
- data/lib/adwords_api/v201309/ad_param_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/adwords_user_list_service.rb +0 -38
- data/lib/adwords_api/v201309/adwords_user_list_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/alert_service.rb +0 -34
- data/lib/adwords_api/v201309/alert_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/bidding_strategy_service.rb +0 -38
- data/lib/adwords_api/v201309/bidding_strategy_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/budget_order_service.rb +0 -42
- data/lib/adwords_api/v201309/budget_order_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/budget_service.rb +0 -38
- data/lib/adwords_api/v201309/budget_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/campaign_ad_extension_service.rb +0 -38
- data/lib/adwords_api/v201309/campaign_ad_extension_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/campaign_criterion_service.rb +0 -42
- data/lib/adwords_api/v201309/campaign_criterion_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/campaign_feed_service.rb +0 -38
- data/lib/adwords_api/v201309/campaign_feed_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/campaign_service.rb +0 -42
- data/lib/adwords_api/v201309/campaign_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/campaign_shared_set_service.rb +0 -38
- data/lib/adwords_api/v201309/campaign_shared_set_service_registry.rb +0 -47
- data/lib/adwords_api/v201309/constant_data_service.rb +0 -62
- data/lib/adwords_api/v201309/constant_data_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/conversion_tracker_service.rb +0 -38
- data/lib/adwords_api/v201309/conversion_tracker_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/customer_service.rb +0 -34
- data/lib/adwords_api/v201309/customer_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/customer_sync_service.rb +0 -34
- data/lib/adwords_api/v201309/customer_sync_service_registry.rb +0 -47
- data/lib/adwords_api/v201309/data_service.rb +0 -38
- data/lib/adwords_api/v201309/data_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/experiment_service.rb +0 -38
- data/lib/adwords_api/v201309/experiment_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/feed_item_service.rb +0 -38
- data/lib/adwords_api/v201309/feed_item_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/feed_mapping_service.rb +0 -38
- data/lib/adwords_api/v201309/feed_mapping_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/feed_service.rb +0 -38
- data/lib/adwords_api/v201309/feed_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/geo_location_service.rb +0 -34
- data/lib/adwords_api/v201309/geo_location_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/location_criterion_service.rb +0 -34
- data/lib/adwords_api/v201309/location_criterion_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/managed_customer_service.rb +0 -50
- data/lib/adwords_api/v201309/managed_customer_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/media_service.rb +0 -38
- data/lib/adwords_api/v201309/media_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/mutate_job_service.rb +0 -42
- data/lib/adwords_api/v201309/mutate_job_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/offline_conversion_feed_service.rb +0 -34
- data/lib/adwords_api/v201309/offline_conversion_feed_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/report_definition_service.rb +0 -34
- data/lib/adwords_api/v201309/report_definition_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/shared_criterion_service.rb +0 -38
- data/lib/adwords_api/v201309/shared_criterion_service_registry.rb +0 -47
- data/lib/adwords_api/v201309/shared_set_service.rb +0 -38
- data/lib/adwords_api/v201309/shared_set_service_registry.rb +0 -47
- data/lib/adwords_api/v201309/targeting_idea_service.rb +0 -38
- data/lib/adwords_api/v201309/targeting_idea_service_registry.rb +0 -46
- data/lib/adwords_api/v201309/traffic_estimator_service.rb +0 -34
- data/lib/adwords_api/v201309/traffic_estimator_service_registry.rb +0 -46
- data/test/bugs/test_issue_00000031.rb +0 -75
|
@@ -36,8 +36,7 @@ end
|
|
|
36
36
|
|
|
37
37
|
class TestAdwordsApi < Test::Unit::TestCase
|
|
38
38
|
|
|
39
|
-
API_VERSION = :
|
|
40
|
-
LAST_CLIENT_LOGIN_API_VERSION = :v201309
|
|
39
|
+
API_VERSION = :v201406
|
|
41
40
|
|
|
42
41
|
def setup()
|
|
43
42
|
@logger = LoggerStub.new
|
|
@@ -102,29 +101,14 @@ class TestAdwordsApi < Test::Unit::TestCase
|
|
|
102
101
|
service = adwords_api.service(:ManagedCustomerService, API_VERSION)
|
|
103
102
|
end
|
|
104
103
|
|
|
105
|
-
def
|
|
104
|
+
def test_clientlogin_error()
|
|
106
105
|
adwords_api = AdwordsApi::Api.new({
|
|
107
106
|
:library => {:logger => @logger},
|
|
108
107
|
:authentication => {:method => 'ClientLogin'},
|
|
109
108
|
:service => {:environment => 'PRODUCTION'}
|
|
110
109
|
})
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
def test_clientlogin_removal()
|
|
117
|
-
adwords_api = AdwordsApi::Api.new({
|
|
118
|
-
:library => {:logger => @logger},
|
|
119
|
-
:authentication => {:method => 'ClientLogin'},
|
|
120
|
-
:service => {:environment => 'PRODUCTION'}
|
|
121
|
-
})
|
|
122
|
-
assert_nothing_raised do
|
|
123
|
-
service = adwords_api.service(:CampaignService,
|
|
124
|
-
LAST_CLIENT_LOGIN_API_VERSION)
|
|
125
|
-
end
|
|
126
|
-
assert_raise(AdsCommon::Errors::AuthError) do
|
|
127
|
-
service = adwords_api.service(:CampaignService, API_VERSION)
|
|
128
|
-
end
|
|
110
|
+
assert_raise AdsCommon::Errors::AuthError do
|
|
111
|
+
service = adwords_api.service(:CampaignService, API_VERSION)
|
|
112
|
+
end
|
|
129
113
|
end
|
|
130
114
|
end
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# Encoding: utf-8
|
|
3
|
+
#
|
|
4
|
+
# Author:: api.dklimkin@gmail.com (Danial Klimkin)
|
|
5
|
+
#
|
|
6
|
+
# Copyright:: Copyright 2012, Google Inc. All Rights Reserved.
|
|
7
|
+
#
|
|
8
|
+
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
# you may not use this file except in compliance with the License.
|
|
10
|
+
# You may obtain a copy of the License at
|
|
11
|
+
#
|
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
#
|
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
17
|
+
# implied.
|
|
18
|
+
# See the License for the specific language governing permissions and
|
|
19
|
+
# limitations under the License.
|
|
20
|
+
#
|
|
21
|
+
# Tests the AdWords API class features.
|
|
22
|
+
|
|
23
|
+
require 'test/unit'
|
|
24
|
+
|
|
25
|
+
require 'ads_common/config'
|
|
26
|
+
require 'ads_common/api_config'
|
|
27
|
+
require 'adwords_api'
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class LoggerStub
|
|
31
|
+
attr_reader :last_warning
|
|
32
|
+
def warn(message)
|
|
33
|
+
@last_warning = message
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
class TestAdwordsApi < Test::Unit::TestCase
|
|
38
|
+
|
|
39
|
+
API_VERSION = :v201406
|
|
40
|
+
|
|
41
|
+
def setup()
|
|
42
|
+
@logger = LoggerStub.new
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_initialize()
|
|
46
|
+
assert_nothing_raised do
|
|
47
|
+
adwords_api = AdwordsApi::Api.new({})
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def test_api_config()
|
|
52
|
+
assert_nothing_raised do
|
|
53
|
+
adwords_api = AdwordsApi::Api.new({})
|
|
54
|
+
api_config = adwords_api.api_config()
|
|
55
|
+
assert_not_nil(api_config)
|
|
56
|
+
assert_kind_of(AdsCommon::ApiConfig, api_config)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def test_use_mcc()
|
|
61
|
+
adwords_api = AdwordsApi::Api.new({})
|
|
62
|
+
adwords_api.use_mcc = false
|
|
63
|
+
assert(!adwords_api.use_mcc)
|
|
64
|
+
adwords_api.use_mcc do
|
|
65
|
+
assert(adwords_api.use_mcc)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def test_validate_only()
|
|
70
|
+
adwords_api = AdwordsApi::Api.new({})
|
|
71
|
+
adwords_api.validate_only = false
|
|
72
|
+
assert(!adwords_api.validate_only)
|
|
73
|
+
adwords_api.validate_only do
|
|
74
|
+
assert(adwords_api.validate_only)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def test_partial_failure()
|
|
79
|
+
adwords_api = AdwordsApi::Api.new({})
|
|
80
|
+
adwords_api.partial_failure = false
|
|
81
|
+
assert(!adwords_api.partial_failure)
|
|
82
|
+
adwords_api.partial_failure do
|
|
83
|
+
assert(adwords_api.partial_failure)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def test_no_sandbox_env()
|
|
88
|
+
adwords_api = AdwordsApi::Api.new({
|
|
89
|
+
:service => {:environment => 'SANDBOX'}
|
|
90
|
+
})
|
|
91
|
+
assert_raise(AdsCommon::Errors::Error) do
|
|
92
|
+
service = adwords_api.service(:ManagedCustomerService, API_VERSION)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def test_prod_env()
|
|
97
|
+
adwords_api = AdwordsApi::Api.new({
|
|
98
|
+
:library => {:logger => @logger},
|
|
99
|
+
:service => {:environment => 'PRODUCTION'}
|
|
100
|
+
})
|
|
101
|
+
service = adwords_api.service(:ManagedCustomerService, API_VERSION)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def test_clientlogin_error()
|
|
105
|
+
adwords_api = AdwordsApi::Api.new({
|
|
106
|
+
:library => {:logger => @logger},
|
|
107
|
+
:authentication => {:method => 'ClientLogin'},
|
|
108
|
+
:service => {:environment => 'PRODUCTION'}
|
|
109
|
+
})
|
|
110
|
+
assert_raise do
|
|
111
|
+
service = adwords_api.service(:CampaignService, API_VERSION)
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
@@ -32,27 +32,27 @@ class TestApiConfig < Test::Unit::TestCase
|
|
|
32
32
|
|
|
33
33
|
# Tests correct require path.
|
|
34
34
|
def test_do_require()
|
|
35
|
-
name1 = @config.do_require(:
|
|
36
|
-
assert_equal('adwords_api/
|
|
35
|
+
name1 = @config.do_require(:v201406, :CampaignService)
|
|
36
|
+
assert_equal('adwords_api/v201406/campaign_service', name1)
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
# Tests correct module name.
|
|
40
40
|
def test_module_name()
|
|
41
|
-
name1 = @config.module_name(:
|
|
42
|
-
assert_equal('AdwordsApi::
|
|
41
|
+
name1 = @config.module_name(:v201406, :CampaignService)
|
|
42
|
+
assert_equal('AdwordsApi::V201406::CampaignService', name1)
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
# Tests correct interface name.
|
|
46
46
|
def test_interface_name()
|
|
47
|
-
name1 = @config.interface_name(:
|
|
48
|
-
assert_equal('AdwordsApi::
|
|
47
|
+
name1 = @config.interface_name(:v201406, :CampaignService)
|
|
48
|
+
assert_equal('AdwordsApi::V201406::CampaignService::CampaignService', name1)
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
# Tests AdHoc report URL generator (prod).
|
|
52
52
|
def test_adhoc_report_download_url_prod()
|
|
53
|
-
url = AdwordsApi::ApiConfig.adhoc_report_download_url(:PRODUCTION, :
|
|
53
|
+
url = AdwordsApi::ApiConfig.adhoc_report_download_url(:PRODUCTION, :v201406)
|
|
54
54
|
expected_url =
|
|
55
|
-
'https://adwords.google.com/api/adwords/reportdownload/
|
|
55
|
+
'https://adwords.google.com/api/adwords/reportdownload/v201406'
|
|
56
56
|
assert_equal(expected_url, url)
|
|
57
57
|
end
|
|
58
58
|
end
|
|
@@ -30,6 +30,7 @@ module AdwordsApi
|
|
|
30
30
|
public :check_for_errors
|
|
31
31
|
public :check_for_xml_error
|
|
32
32
|
public :add_report_definition_hash_order
|
|
33
|
+
public :check_report_definition_hash
|
|
33
34
|
end
|
|
34
35
|
end
|
|
35
36
|
|
|
@@ -55,7 +56,7 @@ GZIPPED_REPORT = "\x1F\x8B\b\x00\x00\x00\x00\x00\x00\x00Sr.-.\xC9\xCFUptq\x0F\xF
|
|
|
55
56
|
|
|
56
57
|
class TestReportUtils < Test::Unit::TestCase
|
|
57
58
|
|
|
58
|
-
API_VERSION = :
|
|
59
|
+
API_VERSION = :v201406
|
|
59
60
|
|
|
60
61
|
# Initialize tests.
|
|
61
62
|
def setup()
|
|
@@ -185,4 +186,31 @@ class TestReportUtils < Test::Unit::TestCase
|
|
|
185
186
|
assert_not_nil(e.message)
|
|
186
187
|
end
|
|
187
188
|
end
|
|
189
|
+
|
|
190
|
+
def test_return_money_in_micros_removal()
|
|
191
|
+
node = {
|
|
192
|
+
:report_name => 'report_name',
|
|
193
|
+
:report_type => 'CAMPAIGN_PERFORMANCE_REPORT',
|
|
194
|
+
:selector => {
|
|
195
|
+
:date_range => {:max=> '20120405', :min => '20120405'},
|
|
196
|
+
:predicates => {:operator => 'IN', :field => 'S', :values => ['A']},
|
|
197
|
+
:fields => ['CampaignId']
|
|
198
|
+
},
|
|
199
|
+
:download_format => 'CSV',
|
|
200
|
+
:date_range_type => 'LAST_7_DAYS'
|
|
201
|
+
}
|
|
202
|
+
assert_nothing_raised do
|
|
203
|
+
@report_utils.check_report_definition_hash(node)
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
node[:return_money_in_micros] = true
|
|
207
|
+
assert_raise AdwordsApi::Errors::InvalidReportDefinitionError do
|
|
208
|
+
@report_utils.check_report_definition_hash(node)
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
node[:return_money_in_micros] = false
|
|
212
|
+
assert_raise AdwordsApi::Errors::InvalidReportDefinitionError do
|
|
213
|
+
@report_utils.check_report_definition_hash(node)
|
|
214
|
+
end
|
|
215
|
+
end
|
|
188
216
|
end
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# Encoding: utf-8
|
|
3
|
+
#
|
|
4
|
+
# Author:: api.dklimkin@gmail.com (Danial Klimkin)
|
|
5
|
+
#
|
|
6
|
+
# Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
|
|
7
|
+
#
|
|
8
|
+
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
# you may not use this file except in compliance with the License.
|
|
10
|
+
# You may obtain a copy of the License at
|
|
11
|
+
#
|
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
#
|
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
17
|
+
# implied.
|
|
18
|
+
# See the License for the specific language governing permissions and
|
|
19
|
+
# limitations under the License.
|
|
20
|
+
#
|
|
21
|
+
# Tests report utils.
|
|
22
|
+
|
|
23
|
+
require 'test/unit'
|
|
24
|
+
|
|
25
|
+
require 'adwords_api'
|
|
26
|
+
|
|
27
|
+
# Overriding default access levels to public for tests.
|
|
28
|
+
module AdwordsApi
|
|
29
|
+
class ReportUtils
|
|
30
|
+
public :check_for_errors
|
|
31
|
+
public :check_for_xml_error
|
|
32
|
+
public :add_report_definition_hash_order
|
|
33
|
+
public :check_report_definition_hash
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Stub class for HTTP response.
|
|
38
|
+
class ResponseStub
|
|
39
|
+
attr_reader :code
|
|
40
|
+
attr_reader :body
|
|
41
|
+
|
|
42
|
+
def initialize(code, body)
|
|
43
|
+
@code, @body = code, body
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
XML_REPLY = {
|
|
48
|
+
:reply => '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><reportDownloadError><ApiError><type>ReportDefinitionError.INVALID_FIELD_NAME_FOR_REPORT</type><trigger>foo</trigger><fieldPath>bar</fieldPath></ApiError></reportDownloadError>',
|
|
49
|
+
:type => 'ReportDefinitionError.INVALID_FIELD_NAME_FOR_REPORT',
|
|
50
|
+
:trigger => 'foo',
|
|
51
|
+
:field_path => 'bar'
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
VALID_REPORT = '"Custom ADGROUP_PERFORMANCE_REPORT (Oct 20, 2011-Oct 26, 2011)"\nCampaign ID,Ad group ID,Impressions,Clicks,Cost\nTotal, --,0,0,0.00'
|
|
55
|
+
GZIPPED_REPORT = "\x1F\x8B\b\x00\x00\x00\x00\x00\x00\x00Sr.-.\xC9\xCFUptq\x0F\xF2\x0F\r\x88\x0Fp\rr\xF3\x0F\xF2u\xF4sv\x8D\x0Fr\r\xF0\x0F\nQ\xD0pIMV0\xD2Q0204\xD4\x05\xB1- lM%.\xE7\xC4\xDC\x82\xC4\xCC\xF4<\x05O\x17\x1D\xC7\x14\x85\xF4\xA2\xFC\xD2\x02\x10\xDB3\xB7\xA0(\xB5\xB883?\xAFX\xC79'39\eH\xE5\x17\x97p\x85\xE4\x97$\xE6\xE8(\xE8\xEA\xEA\x18\x80\xA0\x9E\x81\x01\x17\x00\xBE\x1D\xBE\xAD\x81\x00\x00\x00"
|
|
56
|
+
|
|
57
|
+
class TestReportUtils < Test::Unit::TestCase
|
|
58
|
+
|
|
59
|
+
API_VERSION = :v201406
|
|
60
|
+
|
|
61
|
+
# Initialize tests.
|
|
62
|
+
def setup()
|
|
63
|
+
@api = AdwordsApi::Api.new
|
|
64
|
+
@report_utils = @api.report_utils(API_VERSION)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Testing HTTP code 400.
|
|
68
|
+
def test_check_for_errors_400()
|
|
69
|
+
begin
|
|
70
|
+
response = ResponseStub.new(400, XML_REPLY[:reply])
|
|
71
|
+
@report_utils.check_for_errors(response)
|
|
72
|
+
assert(false, 'No exception thrown for code 400')
|
|
73
|
+
rescue AdwordsApi::Errors::ReportXmlError => e
|
|
74
|
+
assert_equal(400, e.http_code)
|
|
75
|
+
assert_equal(XML_REPLY[:type], e.type)
|
|
76
|
+
assert_equal(XML_REPLY[:trigger], e.trigger)
|
|
77
|
+
assert_equal(XML_REPLY[:field_path], e.field_path)
|
|
78
|
+
assert_not_nil(e.message)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Testing HTTP code 500.
|
|
83
|
+
def test_check_for_errors_500()
|
|
84
|
+
begin
|
|
85
|
+
response = ResponseStub.new(500, nil)
|
|
86
|
+
@report_utils.check_for_errors(response)
|
|
87
|
+
assert(false, 'No exception thrown for code 500')
|
|
88
|
+
rescue AdwordsApi::Errors::ReportError => e
|
|
89
|
+
assert_equal(500, e.http_code)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Testing HTTP code 200 with success.
|
|
94
|
+
def test_check_for_errors_200_success()
|
|
95
|
+
response = ResponseStub.new(200, VALID_REPORT)
|
|
96
|
+
assert_nothing_raised do
|
|
97
|
+
@report_utils.check_for_errors(response)
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Testing correct gzipped reply.
|
|
102
|
+
def test_gzipped_data()
|
|
103
|
+
report = (RUBY_VERSION >= '1.9.1') ?
|
|
104
|
+
GZIPPED_REPORT.force_encoding('UTF-8') : GZIPPED_REPORT
|
|
105
|
+
response = ResponseStub.new(200, report)
|
|
106
|
+
assert_nothing_raised do
|
|
107
|
+
@report_utils.check_for_errors(response)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Tests generated hash order for root (complete set).
|
|
112
|
+
def test_add_report_definition_hash_order_root1()
|
|
113
|
+
node = {
|
|
114
|
+
:include_zero_impressions => false,
|
|
115
|
+
:download_format => 'CSV',
|
|
116
|
+
:report_type => 'CRITERIA_PERFORMANCE_REPORT',
|
|
117
|
+
:selector => {},
|
|
118
|
+
:report_name => 'report_name',
|
|
119
|
+
:date_range_type => 'LAST_7_DAYS'
|
|
120
|
+
}
|
|
121
|
+
expected = [:selector, :report_name, :report_type, :date_range_type,
|
|
122
|
+
:download_format, :include_zero_impressions]
|
|
123
|
+
@report_utils.add_report_definition_hash_order(node)
|
|
124
|
+
assert_not_nil(node[:order!])
|
|
125
|
+
assert_equal(expected, node[:order!])
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# Tests generated hash order for root (incomplete set).
|
|
129
|
+
def test_add_report_definition_hash_order_root2()
|
|
130
|
+
node = {
|
|
131
|
+
:download_format => 'CSV',
|
|
132
|
+
:report_type => 'CRITERIA_PERFORMANCE_REPORT',
|
|
133
|
+
:selector => {},
|
|
134
|
+
:report_name => 'report_name',
|
|
135
|
+
:date_range_type => 'LAST_7_DAYS'
|
|
136
|
+
}
|
|
137
|
+
expected = [:selector, :report_name, :report_type, :date_range_type,
|
|
138
|
+
:download_format]
|
|
139
|
+
@report_utils.add_report_definition_hash_order(node)
|
|
140
|
+
assert_not_nil(node[:order!])
|
|
141
|
+
assert_equal(expected, node[:order!])
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# Tests generated hash order for whole structure.
|
|
145
|
+
def test_add_report_definition_hash_order_deep()
|
|
146
|
+
node = {
|
|
147
|
+
:report_name => 'report_name',
|
|
148
|
+
:report_type => 'CRITERIA_PERFORMANCE_REPORT',
|
|
149
|
+
:selector => {
|
|
150
|
+
:date_range => {:max => '20120405', :min => '20120405'},
|
|
151
|
+
:predicates => {:operator => 'IN', :field => 'S', :values => ['A']},
|
|
152
|
+
:fields => ['CampaignId']
|
|
153
|
+
},
|
|
154
|
+
:include_zero_impressions => false,
|
|
155
|
+
:download_format => 'CSV',
|
|
156
|
+
:date_range_type => 'LAST_7_DAYS'
|
|
157
|
+
}
|
|
158
|
+
expected1 = [:selector, :report_name, :report_type, :date_range_type,
|
|
159
|
+
:download_format, :include_zero_impressions]
|
|
160
|
+
expected2 = [:fields, :predicates, :date_range]
|
|
161
|
+
expected3 = [:min, :max]
|
|
162
|
+
expected4 = [:field, :operator, :values]
|
|
163
|
+
|
|
164
|
+
@report_utils.add_report_definition_hash_order(node)
|
|
165
|
+
assert_not_nil(node[:order!])
|
|
166
|
+
assert_not_nil(node[:selector][:order!])
|
|
167
|
+
assert_not_nil(node[:selector][:date_range][:order!])
|
|
168
|
+
assert_not_nil(node[:selector][:predicates][:order!])
|
|
169
|
+
|
|
170
|
+
assert_equal(expected1, node[:order!])
|
|
171
|
+
assert_equal(expected2, node[:selector][:order!])
|
|
172
|
+
assert_equal(expected3, node[:selector][:date_range][:order!])
|
|
173
|
+
assert_equal(expected4, node[:selector][:predicates][:order!])
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# Testing check_for_xml_error.
|
|
177
|
+
def check_for_xml_error()
|
|
178
|
+
begin
|
|
179
|
+
@report_utils.check_for_xml_error(XML_REPLY[:reply], 42)
|
|
180
|
+
assert(false, 'No exception thrown for code 42')
|
|
181
|
+
rescue AdwordsApi::Errors::ReportXmlError => e
|
|
182
|
+
assert_equal(42, e.http_code)
|
|
183
|
+
assert_equal(XML_REPLY[:type], e.type)
|
|
184
|
+
assert_equal(XML_REPLY[:trigger], e.trigger)
|
|
185
|
+
assert_equal(XML_REPLY[:field_path], e.field_path)
|
|
186
|
+
assert_not_nil(e.message)
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def test_return_money_in_micros_removal()
|
|
191
|
+
node = {
|
|
192
|
+
:report_name => 'report_name',
|
|
193
|
+
:report_type => 'CAMPAIGN_PERFORMANCE_REPORT',
|
|
194
|
+
:selector => {
|
|
195
|
+
:date_range => {:max=> '20120405', :min => '20120405'},
|
|
196
|
+
:predicates => {:operator => 'IN', :field => 'S', :values => ['A']},
|
|
197
|
+
:fields => ['CampaignId']
|
|
198
|
+
},
|
|
199
|
+
:download_format => 'CSV',
|
|
200
|
+
:date_range_type => 'LAST_7_DAYS'
|
|
201
|
+
}
|
|
202
|
+
assert_nothing_raised do
|
|
203
|
+
@report_utils.check_report_definition_hash(node)
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
node[:return_money_in_micros] = true
|
|
207
|
+
assert_raise AdwordsApi::Errors::InvalidReportDefinitionError do
|
|
208
|
+
@report_utils.check_report_definition_hash(node)
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
node[:return_money_in_micros] = false
|
|
212
|
+
assert_raise AdwordsApi::Errors::InvalidReportDefinitionError do
|
|
213
|
+
@report_utils.check_report_definition_hash(node)
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
end
|