bing-ads-api 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +92 -0
  3. data/Rakefile +38 -0
  4. data/lib/bing-ads-api.rb +38 -0
  5. data/lib/bing-ads-api.yml +345 -0
  6. data/lib/bing-ads-api/api_exception.rb +42 -0
  7. data/lib/bing-ads-api/client_proxy.rb +131 -0
  8. data/lib/bing-ads-api/config.rb +75 -0
  9. data/lib/bing-ads-api/constants.rb +133 -0
  10. data/lib/bing-ads-api/data/ad.rb +119 -0
  11. data/lib/bing-ads-api/data/ad_group.rb +121 -0
  12. data/lib/bing-ads-api/data/campaign.rb +40 -0
  13. data/lib/bing-ads-api/data/report_request.rb +78 -0
  14. data/lib/bing-ads-api/data/report_request_status.rb +48 -0
  15. data/lib/bing-ads-api/data/reporting/account_performance_report_request.rb +176 -0
  16. data/lib/bing-ads-api/data/reporting/campaign_performance_report_request.rb +186 -0
  17. data/lib/bing-ads-api/data/reporting/helpers/column_helper.rb +65 -0
  18. data/lib/bing-ads-api/data/reporting/helpers/filter_helper.rb +124 -0
  19. data/lib/bing-ads-api/data/reporting/helpers/scope_helper.rb +51 -0
  20. data/lib/bing-ads-api/data/reporting/helpers/time_helper.rb +69 -0
  21. data/lib/bing-ads-api/data/reporting/performance_report_request.rb +78 -0
  22. data/lib/bing-ads-api/data_object.rb +35 -0
  23. data/lib/bing-ads-api/fault/ad_api_error.rb +15 -0
  24. data/lib/bing-ads-api/fault/ad_api_fault_detail.rb +67 -0
  25. data/lib/bing-ads-api/fault/api_fault_detail.rb +97 -0
  26. data/lib/bing-ads-api/fault/application_fault.rb +18 -0
  27. data/lib/bing-ads-api/fault/batch_error.rb +47 -0
  28. data/lib/bing-ads-api/fault/operation_error.rb +22 -0
  29. data/lib/bing-ads-api/fault/partial_errors.rb +75 -0
  30. data/lib/bing-ads-api/service.rb +174 -0
  31. data/lib/bing-ads-api/service/campaign_management.rb +483 -0
  32. data/lib/bing-ads-api/service/reporting.rb +101 -0
  33. data/lib/bing-ads-api/soap_hasheable.rb +143 -0
  34. data/lib/bing-ads-api/version.rb +6 -0
  35. data/lib/locales/es.yml +174 -0
  36. data/lib/tasks/bing-ads-api_tasks.rake +4 -0
  37. data/test/bing-ads-api_test.rb +134 -0
  38. data/test/campaign_management_test.rb +463 -0
  39. data/test/data_object_test.rb +46 -0
  40. data/test/dummy/README.rdoc +261 -0
  41. data/test/dummy/Rakefile +7 -0
  42. data/test/dummy/app/assets/javascripts/application.js +15 -0
  43. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  44. data/test/dummy/app/controllers/application_controller.rb +3 -0
  45. data/test/dummy/app/helpers/application_helper.rb +2 -0
  46. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  47. data/test/dummy/config.ru +4 -0
  48. data/test/dummy/config/application.rb +56 -0
  49. data/test/dummy/config/boot.rb +10 -0
  50. data/test/dummy/config/database.yml +25 -0
  51. data/test/dummy/config/environment.rb +5 -0
  52. data/test/dummy/config/environments/development.rb +37 -0
  53. data/test/dummy/config/environments/production.rb +67 -0
  54. data/test/dummy/config/environments/test.rb +37 -0
  55. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  56. data/test/dummy/config/initializers/inflections.rb +15 -0
  57. data/test/dummy/config/initializers/mime_types.rb +5 -0
  58. data/test/dummy/config/initializers/secret_token.rb +7 -0
  59. data/test/dummy/config/initializers/session_store.rb +8 -0
  60. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  61. data/test/dummy/config/locales/en.yml +5 -0
  62. data/test/dummy/config/routes.rb +58 -0
  63. data/test/dummy/db/development.sqlite3 +0 -0
  64. data/test/dummy/db/test.sqlite3 +0 -0
  65. data/test/dummy/log/development.log +29 -0
  66. data/test/dummy/log/test.log +3264 -0
  67. data/test/dummy/public/404.html +26 -0
  68. data/test/dummy/public/422.html +26 -0
  69. data/test/dummy/public/500.html +25 -0
  70. data/test/dummy/public/favicon.ico +0 -0
  71. data/test/dummy/script/rails +6 -0
  72. data/test/report_request_test.rb +312 -0
  73. data/test/reporting_test.rb +145 -0
  74. data/test/test_helper.rb +11 -0
  75. metadata +205 -0
@@ -0,0 +1,101 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module BingAdsApi
3
+
4
+ # Public : This class represents the Reporting Services
5
+ # defined in the Bing Ads API, to request and download reports
6
+ #
7
+ # Author:: jlopezn@neonline.cl
8
+ #
9
+ # Examples
10
+ # options = {
11
+ # :environment => :sandbox,
12
+ # :username => "username",
13
+ # :password => "pass",
14
+ # :developer_token => "SOME_TOKEN",
15
+ # :customer_id => "1234567",
16
+ # :account_id => "9876543" }
17
+ # service = BingAdsApi::Reporting.new(options)
18
+ class Reporting < BingAdsApi::Service
19
+
20
+
21
+ # Public : Get the status of a report request
22
+ #
23
+ # Author:: jlopezn@neonline.cl
24
+ #
25
+ # === Parameters
26
+ # +report_request_id+ - Identifier of the report request
27
+ #
28
+ # === Examples
29
+ # service.poll_generate_report("12345")
30
+ # # => Hash
31
+ #
32
+ # Returns:: Hash with the PollGenerateReportResponse structure
33
+ #
34
+ # Raises:: exception
35
+ def poll_generate_report(report_request_id)
36
+ response = call(:poll_generate_report,
37
+ {report_request_id: report_request_id} )
38
+ response_hash = get_response_hash(response, __method__)
39
+ report_request_status = BingAdsApi::ReportRequestStatus.new(
40
+ response_hash[:report_request_status])
41
+ return report_request_status
42
+ end
43
+
44
+ # Public : Submits a report request
45
+ #
46
+ # Author:: jlopezn@neonline.cl
47
+ #
48
+ # === Parameters
49
+ # +report_request+ - a BingAdsApi::ReportRequest subclass instance
50
+ #
51
+ # === Examples
52
+ # ==== CampaignPerformanceReportRequest
53
+ # report_request = BingAdsApi::CampaignPerformanceReportRequest.new(:format => :xml,
54
+ # :language => :english,
55
+ # :report_name => "My Report",
56
+ # :aggregation => :hourly,
57
+ # :columns => [:account_name, :account_number, :time_period,
58
+ # :campaign_name, :campaign_id, :status, :currency_code,
59
+ # :impressions, :clicks, :ctr, :average_cpc, :spend,
60
+ # :conversions, :conversion_rate, :cost_per_conversion, :average_cpm ],
61
+ # :filter => {
62
+ # # String as bing expected
63
+ # :ad_distribution => "Search",
64
+ # :device_os => "Windows",
65
+ # # snake case symbol
66
+ # :device_type => :computer,
67
+ # # nil criteria
68
+ # :status => nil
69
+ # },
70
+ # :scope => {:account_ids => 5978083,
71
+ # :campaigns => [
72
+ # {:account_id => 5978083, :campaign_id => 1951230156},
73
+ # {:account_id => 5978083, :campaign_id => 1951245412},
74
+ # {:account_id => 5978083, :campaign_id => 1951245474}]
75
+ # },
76
+ # :time => {
77
+ # :custom_date_range_end => {:day => 31, :month => 12, :year => 2013},
78
+ # :custom_date_range_start => {:day => 1, :month => 12, :year => 2013},
79
+ # })
80
+ # report_request_id = reporting_service.submit_generate_report(report_request)
81
+ # # => "1234567890"
82
+ #
83
+ # Returns:: String with the requested report id
84
+ #
85
+ # Raises:: Exception if report_request is invalid or SOAP request failed
86
+ def submit_generate_report(report_request)
87
+ response = call(:submit_generate_report,
88
+ {report_request: report_request.to_hash(:camelcase)})
89
+ response_hash = get_response_hash(response, __method__)
90
+ report_request_id = response_hash[:report_request_id]
91
+ return report_request_id
92
+ end
93
+
94
+
95
+ private
96
+ def get_service_name
97
+ "reporting"
98
+ end
99
+
100
+ end
101
+ end
@@ -0,0 +1,143 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ module BingAdsApi
4
+
5
+ ##
6
+ # Public:: Module to define an object as Hasheable for the SOAP requests
7
+ #
8
+ # Author:: jlopezn@neonline.cl
9
+ module SOAPHasheable
10
+
11
+
12
+ # Internal: Metodo custom para transformar a hash un objeto.
13
+ # Se puede indicar si se desean las keys en formato CamelCase o underscore_case
14
+ #
15
+ # Author:: asaavedrab@neonline.cl
16
+ #
17
+ # === Parameters
18
+ # * keys_case - indica si las keys del hash deben estar en formato
19
+ # ** :camelcase - CamelCase
20
+ # ** :underscore - underscore_case
21
+ #
22
+ # === Example
23
+ # a=BusinessPartner.new
24
+ # a.to_hash
25
+ # # => {id => 1, name => "emol"}
26
+ #
27
+ # Returns:: Hash
28
+ def to_hash(keys_case=:underscore)
29
+ object_to_hash(self, keys_case)
30
+ end
31
+
32
+
33
+ # Internal: Internal method to return an object as a SOAP Request alike hash
34
+ # If the object is an array, this methods executes object_to_hash for each item.
35
+ # If the object is a Hash, this methods normalize the keys according to +keys_case+ and executes object_to_hash for each value
36
+ # If the object is a String or Numeric, returns the object
37
+ #
38
+ # Author:: asaavedrab@neonline.cl, jlopezn@neonline.cl
39
+ #
40
+ # === Parameters
41
+ # * +object+ - object instance to be hashed
42
+ # * +keys_case+ - specifies the hash keys case, default 'underscore'
43
+ # ==== keys_case
44
+ # * :camelcase - CamelCase
45
+ # * :underscore - underscore_case
46
+ #
47
+ # === Example:
48
+ # a=Person.new
49
+ # a.to_hash(:underscore)
50
+ # # => {'id' => 1, 'full_name' => "John Doe"}
51
+ #
52
+ # a=Person.new
53
+ # a.to_hash(:camelcase)
54
+ # # => {'Id' => 1, 'FullName' => "John Doe"}
55
+ #
56
+ # a=[<Person>, <Person>, <Cat>]
57
+ # a.to_hash(:underscore)
58
+ # # => [{'id' => 1, 'full_name' => "John Doe"}, {'id' => 2, 'full_name' => "Ms Mary"}, {'id' => 3, 'name' => "Mr Whiskers", 'color' => "Gray"}]
59
+ #
60
+ # Returns:: Hash
61
+ def object_to_hash(object, keys_case=:underscore)
62
+
63
+ # Nil safe
64
+ return nil if object.nil?
65
+
66
+ # In case of hash, we only normalize the keys values
67
+ return normalize_hash_keys(object, keys_case) if object.is_a?(Hash)
68
+ # In case of array, we make hasheable each element
69
+ return object.collect{ |item| object_to_hash(item, keys_case) } if object.is_a?(Array)
70
+ # In case of number or string, this methods return the object
71
+ return object if object.is_a?(String) || object.is_a?(Numeric)
72
+
73
+ hash={}
74
+ object.instance_variables.each do |var|
75
+ if !object.instance_variable_get(var).nil?
76
+ value = object.instance_variable_get(var)
77
+ hashed_value = case value.class.to_s
78
+ when "Hash" then normalize_hash_keys(value, keys_case)
79
+ when "Array" then value.collect{ |item| object_to_hash(item, keys_case) }
80
+ else value
81
+ end
82
+ hash[get_attribute_key(var, keys_case)] = hashed_value
83
+ end
84
+ end
85
+ return hash
86
+ end
87
+
88
+
89
+ def normalize_hash_keys(hash, keys_case)
90
+ return hash.inject({}) { |h, (k, v)| h[get_attribute_key(k, keys_case)] = object_to_hash(v, keys_case); h }
91
+ end
92
+
93
+ # Internal : Helper method to determinate the key name in the hash for the SOAP request
94
+ #
95
+ # Author:: jlopezn@neonline.cl
96
+ #
97
+ # === Parameters
98
+ # * attribute - the attribute name
99
+ # * keys_case - defines the case for the attribute name.
100
+ # ==== keys_case
101
+ # * :camelcase - CamelCase
102
+ # * :underscore - underscore_case
103
+ #
104
+ # === Examples
105
+ # get_attribute_key("attribute_name", :underscore)
106
+ # # => "attribute_name"
107
+ #
108
+ # get_attribute_key("name", :camelcase)
109
+ # # => "AttributeName"
110
+ #
111
+ # Returns:: String with the attribute name for the key in the hash
112
+ def get_attribute_key(attribute, keys_case = :underscore)
113
+ if keys_case == :underscore
114
+ return attribute.to_s.delete("@").underscore
115
+ elsif keys_case == :camelcase
116
+ return attribute.to_s.delete("@").camelcase
117
+ end
118
+ end
119
+
120
+
121
+ # Internal : Returns a DateTime as a hash for SOAP requests
122
+ #
123
+ # Author:: jlopezn@neonline.cl
124
+ #
125
+ # === Parameters
126
+ # * date - DateTime to be hashed
127
+ # * keys_case - defines the case for keys in the hash
128
+ # ==== keys_case
129
+ # * :camelcase - CamelCase
130
+ # * :underscore - underscore_case
131
+ #
132
+ # Returns:: Hash with the :year, :month, :day keys
133
+ def date_to_hash(date, keys_case)
134
+ {
135
+ get_attribute_key("day", keys_case) => date.day,
136
+ get_attribute_key("month", keys_case) => date.month,
137
+ get_attribute_key("year", keys_case) => date.year
138
+ }
139
+ end
140
+
141
+ end
142
+
143
+ end
@@ -0,0 +1,6 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module BingAdsApi
3
+
4
+ # Gem Version
5
+ VERSION = "0.1.0"
6
+ end
@@ -0,0 +1,174 @@
1
+ # Sample localization file for English. Add more files in this directory for other locales.
2
+ # See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
+
4
+ es-CL:
5
+
6
+ bing:
7
+
8
+ constants:
9
+
10
+ common:
11
+ time_zones:
12
+ abu_dhabi_muscat: 'Abu Dhabi y Muscat'
13
+ adelaide: 'Adelaide, Australia'
14
+ alaska: 'Alaska'
15
+ almaty_novosibirsk: 'Almaty y Novosibirsk'
16
+ amsterdam_berlin_bern_rome_stockholm_vienna: 'Amsterdam, Berlin, Bern, Rome, Stockholm, y Vienna'
17
+ arizona: 'Arizona'
18
+ astana_dhaka: 'Astana y Dhaka'
19
+ athens_buckarest_istanbul: 'Athens, Istanbul, Beirut, y Minsk'
20
+ atlantic_time_canada: 'Atlantic Time y Canada'
21
+ auckland_wellington: 'Auckland y Wellington, New Zealand'
22
+ azores: 'Azores'
23
+ baghdad: 'Baghdad'
24
+ baku_tbilisi_yerevan: 'Baku, Tbilisi, y Yerevan'
25
+ bangkok_hanoi_jakarta: 'Bangkok, Hanoi, y Jakarta'
26
+ beijing_chongqing_hong_kong_urumqi: 'Beijing, Chongqing, Hong Kong, y Urumqi'
27
+ belgrade_bratislava_budapest_ljubljana_prague: 'Belgrade, Bratislava, Budapest, Ljubljana, y Prague'
28
+ bogota_lima_quito: 'Bogota, Lima, y Quito'
29
+ brasilia: 'Brasilia'
30
+ brisbane: 'Brisbane'
31
+ brussels_copenhagen_madrid_paris: 'Brussels, Copenhagen, Madrid, y Paris'
32
+ bucharest: 'Bucharest'
33
+ buenos_aires_georgetown: 'Buenos Aires y Georgetown'
34
+ cairo: 'Cairo'
35
+ canberra_melbourne_sydney: 'Canberra, Melbourne, y Sydney'
36
+ cape_verde_island: 'Cape Verde Island'
37
+ caracas_la_paz: 'Caracas y La Paz (Bolivia)'
38
+ casablanca_monrovia: 'Casablanca y Monrovia'
39
+ central_america: 'Central America'
40
+ central_time_u_s_canada: 'Central Time U.S. y Canada'
41
+ chennai_kolkata_mumbai_new_delhi: 'Chennai, Kolkata, Mumbai, y New Delhi'
42
+ chihuahua_la_paz_mazatlan: 'Chihuahua, La Paz (Mexico), y Mazatlan'
43
+ darwin: 'Darwin'
44
+ eastern_time_u_s_canada: 'Eastern Time U.S. y Canada'
45
+ ekaterinburg: 'Ekaterinburg'
46
+ fiji_kamchatka_marshall_island: 'Fiji, Kamchatka, y Marshall Island'
47
+ greenland: 'Greenland'
48
+ greenwich_mean_time_dublin_edinburgh_lisbon_london: 'Greenwich Mean Time, Dublin, Edinburgh, Lisbon, y London'
49
+ guadalajara_mexico_city_monterrey: 'Guadalajara, Mexico City, y Monterrey'
50
+ guam_port_moresby: 'Guam y Port Moresby'
51
+ harare_pretoria: 'Harare y Pretoria'
52
+ hawaii: 'Hawaii'
53
+ helsinki_kyiv_riga_sofia_tallinn_vilnius: 'Helsinki, Kyiv, Riga, Sofia, Tallinn, y Vilnius'
54
+ hobart: 'Hobart'
55
+ indiana_east: 'Indiana (East)'
56
+ international_date_line_west: 'International Date Line (West)'
57
+ irkutsk_ulaan_bataar: 'Irkutsk y Ulaanbaatar'
58
+ islandamabad_karachi_tashkent: 'Islamabad, Karachi, y Tashkent'
59
+ jerusalem: 'Jerusalem'
60
+ kabul: 'Kabul'
61
+ kathmandu: 'Kathmandu'
62
+ krasnoyarsk: 'Krasnoyarsk'
63
+ kuala_lumpur_singapore: 'Kuala Lumpur y Singapore'
64
+ kuwait_riyadh: 'Kuwait y Riyadh'
65
+ magadan_solomon_island_new_caledonia: 'Magadan, Solomon Islands, y New Caledonia'
66
+ mid_atlantic: 'Mid-Atlantic'
67
+ midway_islandand_samoa: 'Midway Island y Samoa'
68
+ moscow_st_petersburg_volgograd: 'Moscow, St Petersburg, y Volgograd'
69
+ mountain_time_u_s_canada: 'Mountain Time U.S. y Canada'
70
+ nairobi: 'Nairobi'
71
+ newfoundland: 'Newfoundland'
72
+ nukualofa: 'Nuku'alofa'
73
+ osaka_sapporo_tokyo: 'Osaka, Sapporo, y Tokyo'
74
+ pacific_time_u_s_canada_tijuana: 'Pacific Time, U.S. y Canada, y Tijuana'
75
+ perth: 'Perth'
76
+ rangoon: 'Rangoon'
77
+ santiago: 'Santiago'
78
+ sarajevo_skopje_warsaw_zagreb: 'Sarajevo, Skopie, Warsaw, y Zagreb'
79
+ saskatchewan: 'Saskatchewan'
80
+ seoul: 'Seoul'
81
+ sri_jayawardenepura: 'Sri Jayawardenepura'
82
+ taipei: 'Taipei'
83
+ tehran: 'Tehran'
84
+ vladivostok: 'Vladivostok'
85
+ west_central_africa: 'West Central Africa'
86
+ yakutsk: 'Yakutsk'
87
+ ad_languages:
88
+ danish: 'Danish'
89
+ dutch: 'Dutch'
90
+ english: 'English'
91
+ finnish: 'Finnish'
92
+ french: 'French'
93
+ german: 'German'
94
+ italian: 'Italian'
95
+ norwegian: 'Norwegian'
96
+ portuguese: 'Portuguese'
97
+ spanish: 'Spanish'
98
+ swedish: 'Swedish'
99
+ traditional_chinese: 'Traditional Chinese'
100
+ codes:
101
+ danish: 'DA'
102
+ dutch: 'NL'
103
+ english: 'EN'
104
+ finnish: 'FI'
105
+ french: 'FR'
106
+ german: 'DE'
107
+ italian: 'IT'
108
+ norwegian: 'NO'
109
+ portuguese: 'PT'
110
+ spanish: 'ES'
111
+ swedish: 'SV'
112
+ traditional_chinese: 'ZH'
113
+ market_country:
114
+ danish: 'Denmark'
115
+ dutch: 'Netherlands'
116
+ english: 'Australia Canada India Indonesia Ireland Malaysia New Zealand Philippines Singapore Thailand United Kingdom United States Vietnam'
117
+ finnish: 'Finland '
118
+ french: 'Belgium Canada France'
119
+ german: 'Austria Germany Switzerland'
120
+ italian: 'Italy'
121
+ norwegian: 'Norway'
122
+ portuguese: 'Brazil'
123
+ spanish: 'Argentina Chile Colombia Mexico Peru Spain Venezuela'
124
+ swedish: 'Sweden'
125
+ traditional_chinese: 'Hong Kong Taiwan'
126
+
127
+ campaign_management:
128
+ budget_limit_type:
129
+ monthly_budget_spend_until_depleted: 'MonthlyBudgetSpendUntilDepleted'
130
+ daily_budget_accelerated: 'DailyBudgetAccelerated'
131
+ daily_budget_standard: 'DailyBudgetStandard'
132
+ campaign_status:
133
+ active: 'Activa'
134
+ paused: 'Pausada'
135
+ budget_paused: 'Pausada por presupuesto'
136
+ budget_and_manual_paused: 'Pausada por presupuesto y manual'
137
+ deleted: 'Deleted'
138
+ ad_distribution:
139
+ search: 'Búsqueda'
140
+ content: 'Contenido'
141
+ ad_rotation_type:
142
+ optimize_for_clicks: 'Optimizado por clicks'
143
+ rotate_ads_evenly: 'Rotar anuncios parejo'
144
+ bidding_model:
145
+ keyword: 'Keywords'
146
+ site_placement: 'Posición en sitio'
147
+ pricing_model:
148
+ cpc: 'Cpc'
149
+ cpm: 'Cpm'
150
+ ad_group_status:
151
+ draft: 'Borrador'
152
+ active: 'Activo'
153
+ paused: 'Pausado'
154
+ deleted: 'Eliminado'
155
+ ad_status:
156
+ inactive: 'Inactivo'
157
+ Active: 'Activo'
158
+ paused: 'Pausado'
159
+ deleted: 'Eliminado'
160
+ ad_type:
161
+ text: 'Texto'
162
+ image: 'Imágen'
163
+ mobile: 'Mobil'
164
+ rich_search: 'Búsqueda enriquecida'
165
+ product: 'Producto'
166
+ keyword_editorial_status:
167
+ active: 'Activo'
168
+ disapproved: 'Desaprovado'
169
+ inactive: 'Inactivo'
170
+ keyword_status:
171
+ active: 'Activo'
172
+ paused: 'Pausado'
173
+ deleted: 'Borrado'
174
+ inactive: 'Inactivo'
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :bing-ads-api do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,134 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'test_helper'
3
+
4
+ # Public : Test Case for general purpose methods, helper and modules
5
+ #
6
+ # Author:: jlopezn@neonline.cl
7
+ class BingAdsApiTest < ActiveSupport::TestCase
8
+
9
+ test "truth" do
10
+ assert_kind_of Module, BingAdsApi
11
+ end
12
+
13
+ test "load config" do
14
+ config = BingAdsApi::Config.instance
15
+ assert !config.nil?, "Config class not instantiated"
16
+ assert !config.config.nil?, "Config file not loaded"
17
+ end
18
+
19
+ test "config constants" do
20
+ config = BingAdsApi::Config.instance
21
+
22
+ assert !config.common_constants.nil?, "No common constants"
23
+ assert !config.campaign_management_constants.nil?, "No campaign management constants"
24
+ assert !config.reporting_constants.nil?, "No reporting constants"
25
+ end
26
+
27
+ test "config common constants" do
28
+ config = BingAdsApi::Config.instance
29
+ assert !config.common_constants['time_zones'].nil?, "No time_zones common constants"
30
+ assert !config.common_constants['time_zones']['santiago'].nil?, "No time_zones santiago "
31
+ end
32
+
33
+ test "get sandbox wsdl" do
34
+ config = BingAdsApi::Config.instance
35
+
36
+ assert !config.service_wsdl(:sandbox, :campaign_management).nil?,
37
+ "No wsdl for sandbox and campaign_management"
38
+ assert !config.service_wsdl(:sandbox, :reporting).nil?,
39
+ "No wsdl for sandbox and reporting"
40
+ end
41
+
42
+
43
+ test "get production wsdl" do
44
+ config = BingAdsApi::Config.instance
45
+
46
+ assert !config.service_wsdl(:production, :campaign_management).nil?,
47
+ "No wsdl for production and campaign_management"
48
+ assert !config.service_wsdl(:production, :reporting).nil?,
49
+ "No wsdl for production and reporting"
50
+
51
+ end
52
+
53
+
54
+ test "create client proxy" do
55
+ options = {
56
+ :username => "desarrollo_neonline",
57
+ :password => "neonline2013",
58
+ :developer_token => "BBD37VB98",
59
+ :customer_id => "21021746",
60
+ :account_id => "5978083",
61
+ :wsdl_url => "https://api.sandbox.bingads.microsoft.com/Api/Advertiser/CampaignManagement/v9/CampaignManagementService.svc?singleWsdl"
62
+ }
63
+ client = BingAdsApi::ClientProxy.new(options)
64
+ #puts client.inspect
65
+ assert !client.nil?, "Client proxy not created"
66
+
67
+ #puts client.service
68
+ assert !client.service.nil?, "Service client not created"
69
+ end
70
+
71
+
72
+ test "create client proxy with additional settings" do
73
+ options = {
74
+ :username => "desarrollo_neonline",
75
+ :password => "neonline2013",
76
+ :developer_token => "BBD37VB98",
77
+ :customer_id => "21021746",
78
+ :account_id => "5978083",
79
+ :wsdl_url => "https://api.sandbox.bingads.microsoft.com/Api/Advertiser/CampaignManagement/v9/CampaignManagementService.svc?singleWsdl",
80
+ :proxy => {
81
+ :logger => Rails.logger,
82
+ :encoding => "UTF-8"
83
+ }
84
+ }
85
+ client = BingAdsApi::ClientProxy.new(options)
86
+ #puts client.inspect
87
+ assert !client.nil?, "Client proxy not created"
88
+
89
+ #puts client.service
90
+ assert !client.service.nil?, "Service client not created"
91
+ end
92
+
93
+
94
+ test "call service" do
95
+ options = {
96
+ :username => "desarrollo_neonline",
97
+ :password => "neonline2013",
98
+ :developer_token => "BBD37VB98",
99
+ :customer_id => "21021746",
100
+ :account_id => "5978083",
101
+ :wsdl_url => "https://api.sandbox.bingads.microsoft.com/Api/Advertiser/CampaignManagement/v9/CampaignManagementService.svc?singleWsdl"
102
+ }
103
+
104
+ client = BingAdsApi::ClientProxy.new(options)
105
+ assert !client.nil?, "Client proxy not created"
106
+
107
+ response = client.service.call(:get_campaigns_by_account_id,
108
+ message: { Account_id: client.account_id})
109
+ #puts response.inspect
110
+ assert response, "No responde received"
111
+ end
112
+
113
+ test "create and call from config" do
114
+ config = BingAdsApi::Config.instance
115
+ options = {
116
+ :username => "desarrollo_neonline",
117
+ :password => "neonline2013",
118
+ :developer_token => "BBD37VB98",
119
+ :customer_id => "21021746",
120
+ :account_id => "5978083",
121
+ :wsdl_url => config.service_wsdl(:sandbox, :campaign_management)
122
+ }
123
+
124
+ client = BingAdsApi::ClientProxy.new(options)
125
+ assert !client.nil?, "Client proxy not created"
126
+
127
+ response = client.service.call(:get_campaigns_by_account_id,
128
+ message: { Account_id: client.account_id})
129
+ #puts response.inspect
130
+ assert response, "No responde received"
131
+
132
+ end
133
+
134
+ end