bing_ads_ruby_sdk 1.0.0 → 1.3.2

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.
Files changed (126) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +52 -0
  3. data/.github/delete-merged-branch-config.yml +6 -0
  4. data/.github/stale.yml +19 -0
  5. data/.gitignore +2 -0
  6. data/README.md +25 -5
  7. data/bing_ads_ruby_sdk.gemspec +6 -5
  8. data/changelog.md +27 -2
  9. data/lib/bing_ads_ruby_sdk/api.rb +3 -1
  10. data/lib/bing_ads_ruby_sdk/configuration.rb +2 -1
  11. data/lib/bing_ads_ruby_sdk/header.rb +8 -4
  12. data/lib/bing_ads_ruby_sdk/http_client.rb +19 -9
  13. data/lib/bing_ads_ruby_sdk/oauth2/authorization_handler.rb +17 -10
  14. data/lib/bing_ads_ruby_sdk/services/base.rb +6 -6
  15. data/lib/bing_ads_ruby_sdk/services/campaign_management.rb +3 -0
  16. data/lib/bing_ads_ruby_sdk/version.rb +2 -2
  17. data/lib/bing_ads_ruby_sdk/wsdl/v13/production/ad_insight.xml +1 -0
  18. data/lib/bing_ads_ruby_sdk/wsdl/v13/production/bulk.xml +1 -0
  19. data/lib/bing_ads_ruby_sdk/wsdl/v13/production/campaign_management.xml +1 -0
  20. data/lib/bing_ads_ruby_sdk/wsdl/v13/production/customer_billing.xml +1 -0
  21. data/lib/bing_ads_ruby_sdk/wsdl/v13/production/customer_management.xml +1 -0
  22. data/lib/bing_ads_ruby_sdk/wsdl/v13/production/reporting.xml +1 -0
  23. data/lib/bing_ads_ruby_sdk/wsdl/v13/sandbox/ad_insight.xml +3037 -0
  24. data/lib/bing_ads_ruby_sdk/wsdl/v13/sandbox/bulk.xml +1 -0
  25. data/lib/bing_ads_ruby_sdk/wsdl/v13/sandbox/campaign_management.xml +1 -0
  26. data/lib/bing_ads_ruby_sdk/wsdl/v13/sandbox/customer_billing.xml +1 -0
  27. data/lib/bing_ads_ruby_sdk/wsdl/v13/sandbox/customer_management.xml +1 -0
  28. data/lib/bing_ads_ruby_sdk/wsdl/v13/sandbox/reporting.xml +1 -0
  29. data/lib/bing_ads_ruby_sdk/wsdl/{v12 → v13}/test/ad_insight.xml +1440 -1468
  30. data/lib/bing_ads_ruby_sdk/wsdl/{v12 → v13}/test/bulk.xml +83 -147
  31. data/lib/bing_ads_ruby_sdk/wsdl/{v12 → v13}/test/campaign_management.xml +711 -417
  32. data/lib/bing_ads_ruby_sdk/wsdl/{v12 → v13}/test/customer_billing.xml +62 -112
  33. data/lib/bing_ads_ruby_sdk/wsdl/{v12 → v13}/test/customer_management.xml +231 -176
  34. data/lib/bing_ads_ruby_sdk/wsdl/{v12 → v13}/test/reporting.xml +110 -158
  35. data/lib/bing_ads_ruby_sdk/wsdl/wsdl_source.txt +18 -18
  36. data/spec/bing_ads_ruby_sdk/api_spec.rb +17 -0
  37. data/spec/bing_ads_ruby_sdk/errors/error_handler_spec.rb +479 -0
  38. data/spec/bing_ads_ruby_sdk/errors/errors_spec.rb +13 -0
  39. data/spec/bing_ads_ruby_sdk/header_spec.rb +60 -0
  40. data/spec/bing_ads_ruby_sdk/http_client_spec.rb +44 -0
  41. data/spec/bing_ads_ruby_sdk/oauth2/fs_store_spec.rb +20 -0
  42. data/spec/bing_ads_ruby_sdk/postprocessors/cast_long_arrays_spec.rb +30 -0
  43. data/spec/bing_ads_ruby_sdk/postprocessors/snakize_spec.rb +40 -0
  44. data/spec/bing_ads_ruby_sdk/preprocessors/camelize_spec.rb +40 -0
  45. data/spec/bing_ads_ruby_sdk/preprocessors/order_spec.rb +119 -0
  46. data/spec/bing_ads_ruby_sdk/services/bulk_spec.rb +56 -0
  47. data/spec/bing_ads_ruby_sdk/services/campaign_management_spec.rb +307 -0
  48. data/spec/bing_ads_ruby_sdk/services/customer_management_spec.rb +97 -0
  49. data/spec/bing_ads_ruby_sdk_spec.rb +5 -0
  50. data/spec/examples/1_customer_creation/customer_spec.rb +35 -0
  51. data/spec/examples/2_with_customer/budget_spec.rb +54 -0
  52. data/spec/examples/2_with_customer/campaigns_spec.rb +27 -0
  53. data/spec/examples/2_with_customer/customer_management_spec.rb +190 -0
  54. data/spec/examples/2_with_customer/uet_tags_spec.rb +42 -0
  55. data/spec/examples/3_with_uet_tag/conversion_goal_spec.rb +40 -0
  56. data/spec/examples/3_with_uet_tag/uet_tags_spec.rb +56 -0
  57. data/spec/examples/4_with_conversion_goal/conversion_goals_spec.rb +75 -0
  58. data/spec/examples/5_with_campaign/ad_extension_spec.rb +238 -0
  59. data/spec/examples/5_with_campaign/ad_group_spec.rb +35 -0
  60. data/spec/examples/5_with_campaign/campaign_criterions_spec.rb +74 -0
  61. data/spec/examples/5_with_campaign/campaign_spec.rb +71 -0
  62. data/spec/examples/6_with_ad_group/ad_group_spec.rb +71 -0
  63. data/spec/examples/6_with_ad_group/ads_spec.rb +113 -0
  64. data/spec/examples/6_with_ad_group/keywords_spec.rb +108 -0
  65. data/spec/examples/examples.rb +76 -0
  66. data/spec/fixtures/bulk/download_campaigns_by_account_ids/standard.xml +23 -0
  67. data/spec/fixtures/bulk/download_campaigns_by_account_ids/standard_response.xml +11 -0
  68. data/spec/fixtures/bulk/get_bulk_download_status/standard.xml +14 -0
  69. data/spec/fixtures/bulk/get_bulk_download_status/standard_response.xml +15 -0
  70. data/spec/fixtures/campaign_management/add_ad_extensions/standard.xml +21 -0
  71. data/spec/fixtures/campaign_management/add_ad_extensions/standard_response.xml +17 -0
  72. data/spec/fixtures/campaign_management/add_conversion_goals/standard.xml +27 -0
  73. data/spec/fixtures/campaign_management/add_conversion_goals/standard_response.xml +14 -0
  74. data/spec/fixtures/campaign_management/add_shared_entity/standard.xml +16 -0
  75. data/spec/fixtures/campaign_management/add_shared_entity/standard_response.xml +13 -0
  76. data/spec/fixtures/campaign_management/add_uet_tags/standard.xml +19 -0
  77. data/spec/fixtures/campaign_management/add_uet_tags/standard_response.xml +21 -0
  78. data/spec/fixtures/campaign_management/get_ad_extension_ids_by_account_id/standard.xml +15 -0
  79. data/spec/fixtures/campaign_management/get_ad_extension_ids_by_account_id/standard_response.xml +13 -0
  80. data/spec/fixtures/campaign_management/get_ad_extensions_associations/standard.xml +19 -0
  81. data/spec/fixtures/campaign_management/get_ad_extensions_associations/standard_response.xml +47 -0
  82. data/spec/fixtures/campaign_management/get_budgets_by_ids/standard.xml +12 -0
  83. data/spec/fixtures/campaign_management/get_budgets_by_ids/standard_response.xml +20 -0
  84. data/spec/fixtures/campaign_management/get_campaigns_by_account_id/standard.xml +14 -0
  85. data/spec/fixtures/campaign_management/get_campaigns_by_account_id/standard_response.xml +84 -0
  86. data/spec/fixtures/campaign_management/get_conversion_goals_by_ids/standard.xml +18 -0
  87. data/spec/fixtures/campaign_management/get_conversion_goals_by_ids/standard_response.xml +61 -0
  88. data/spec/fixtures/campaign_management/get_shared_entities_by_account_id/standard.xml +14 -0
  89. data/spec/fixtures/campaign_management/get_shared_entities_by_account_id/standard_response.xml +20 -0
  90. data/spec/fixtures/campaign_management/get_shared_entity_associations_by_entity_ids/standard.xml +18 -0
  91. data/spec/fixtures/campaign_management/get_shared_entity_associations_by_entity_ids/standard_response.xml +19 -0
  92. data/spec/fixtures/campaign_management/get_uet_tags_by_ids/standard.xml +16 -0
  93. data/spec/fixtures/campaign_management/get_uet_tags_by_ids/standard_response.xml +21 -0
  94. data/spec/fixtures/campaign_management/set_ad_extensions_associations/standard.xml +21 -0
  95. data/spec/fixtures/campaign_management/set_ad_extensions_associations/standard_response.xml +11 -0
  96. data/spec/fixtures/campaign_management/set_shared_entity_associations/standard.xml +21 -0
  97. data/spec/fixtures/campaign_management/set_shared_entity_associations/standard_response.xml +11 -0
  98. data/spec/fixtures/campaign_management/update_conversion_goals/standard.xml +27 -0
  99. data/spec/fixtures/campaign_management/update_conversion_goals/standard_response.xml +11 -0
  100. data/spec/fixtures/campaign_management/update_uet_tags/standard.xml +20 -0
  101. data/spec/fixtures/campaign_management/update_uet_tags/standard_response.xml +11 -0
  102. data/spec/fixtures/customer_management/find_accounts_or_customers_info/standard.xml +15 -0
  103. data/spec/fixtures/customer_management/find_accounts_or_customers_info/standard_response.xml +21 -0
  104. data/spec/fixtures/customer_management/get_account/standard.xml +14 -0
  105. data/spec/fixtures/customer_management/get_account/standard_response.xml +43 -0
  106. data/spec/fixtures/customer_management/signup_customer/standard.xml +30 -0
  107. data/spec/fixtures/customer_management/signup_customer/standard_response.xml +15 -0
  108. data/spec/fixtures/customer_management/update_account/standard.xml +19 -0
  109. data/spec/fixtures/customer_management/update_account/standard_response.xml +11 -0
  110. data/spec/spec_helper.rb +33 -0
  111. data/spec/support/spec_helpers.rb +45 -0
  112. data/tasks/bing_ads_ruby_sdk.rake +5 -6
  113. metadata +202 -27
  114. data/.travis.yml +0 -5
  115. data/lib/bing_ads_ruby_sdk/wsdl/v12/production/ad_insight.xml +0 -1
  116. data/lib/bing_ads_ruby_sdk/wsdl/v12/production/bulk.xml +0 -1
  117. data/lib/bing_ads_ruby_sdk/wsdl/v12/production/campaign_management.xml +0 -1
  118. data/lib/bing_ads_ruby_sdk/wsdl/v12/production/customer_billing.xml +0 -1
  119. data/lib/bing_ads_ruby_sdk/wsdl/v12/production/customer_management.xml +0 -1
  120. data/lib/bing_ads_ruby_sdk/wsdl/v12/production/reporting.xml +0 -1
  121. data/lib/bing_ads_ruby_sdk/wsdl/v12/sandbox/ad_insight.xml +0 -1
  122. data/lib/bing_ads_ruby_sdk/wsdl/v12/sandbox/bulk.xml +0 -1
  123. data/lib/bing_ads_ruby_sdk/wsdl/v12/sandbox/campaign_management.xml +0 -1
  124. data/lib/bing_ads_ruby_sdk/wsdl/v12/sandbox/customer_billing.xml +0 -1
  125. data/lib/bing_ads_ruby_sdk/wsdl/v12/sandbox/customer_management.xml +0 -1
  126. data/lib/bing_ads_ruby_sdk/wsdl/v12/sandbox/reporting.xml +0 -1
@@ -0,0 +1,71 @@
1
+ require_relative '../examples'
2
+
3
+ RSpec.describe 'CampaignManagement service' do
4
+ include_context 'use api'
5
+
6
+ describe 'Campaign methods' do
7
+ let(:a_campaign_hash) do
8
+ a_hash_including(
9
+ audience_ads_bid_adjustment: a_kind_of(String),
10
+ bidding_scheme: a_kind_of(Hash),
11
+ budget_type: a_kind_of(String),
12
+ daily_budget: a_kind_of(String),
13
+ forward_compatibility_map: '',
14
+ id: Examples.campaign_id.to_s,
15
+ name: a_string_starting_with('Acceptance Test Campaign'),
16
+ status: a_kind_of(String),
17
+ time_zone: a_kind_of(String),
18
+ tracking_url_template: nil,
19
+ url_custom_parameters: nil,
20
+ campaign_type: a_kind_of(String),
21
+ settings: nil,
22
+ budget_id: nil,
23
+ languages: nil,
24
+ experiment_id: nil,
25
+ final_url_suffix: nil,
26
+ sub_type: nil,
27
+ )
28
+ end
29
+
30
+ describe '#get_campaigns_by_account_id' do
31
+ it 'returns a list of campaigns' do
32
+ expect(api.campaign_management.get_campaigns_by_account_id(
33
+ account_id: Examples.account_id
34
+ )).to include(a_campaign_hash)
35
+ end
36
+ end
37
+
38
+ describe '#get_campaigns_by_ids' do
39
+ it 'returns a list of campaigns' do
40
+ expect(api.campaign_management.get_campaigns_by_ids(
41
+ account_id: Examples.account_id,
42
+ campaign_ids: [{ long: Examples.campaign_id }]
43
+ )).to include(a_campaign_hash)
44
+ end
45
+ end
46
+
47
+ describe '#update_campaigns' do
48
+ subject do
49
+ api.campaign_management.call(:update_campaigns,
50
+ account_id: Examples.account_id,
51
+ campaigns: {
52
+ campaign: [
53
+ id: Examples.campaign_id,
54
+ name: "Acceptance Test Campaign - #{random}"
55
+ ]
56
+ }
57
+ )
58
+ end
59
+
60
+ it 'returns no errors' do
61
+ is_expected.to eq(partial_errors: '')
62
+ updated_campaign = api.campaign_management.get_campaigns_by_ids(
63
+ account_id: Examples.account_id,
64
+ campaign_ids: [{ long: Examples.campaign_id }]
65
+ ).first
66
+
67
+ expect(updated_campaign).to include(name: "Acceptance Test Campaign - #{random}")
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,71 @@
1
+ require_relative '../examples'
2
+
3
+ RSpec.describe 'AdGroup methods' do
4
+ include_context 'use api'
5
+
6
+ let(:ad_group_record) do
7
+ a_hash_including(
8
+ ad_rotation: nil,
9
+ bidding_scheme: a_kind_of(Hash),
10
+ cpc_bid: a_kind_of(Hash),
11
+ id: a_kind_of(String),
12
+ language: a_kind_of(String),
13
+ name: a_kind_of(String),
14
+ network: a_kind_of(String),
15
+ settings: nil,
16
+ start_date: {
17
+ day: '1',
18
+ month: '1',
19
+ year: '2049',
20
+ },
21
+ end_date: {
22
+ day: '1',
23
+ month: '2',
24
+ year: '2049',
25
+ },
26
+ status: a_kind_of(String),
27
+ tracking_url_template: nil,
28
+ url_custom_parameters: nil,
29
+ )
30
+ end
31
+
32
+ describe '#get_ad_groups_by_ids' do
33
+ it 'returns AdGroups' do
34
+ expect(api.campaign_management.get_ad_groups_by_ids(
35
+ campaign_id: Examples.campaign_id,
36
+ ad_group_ids: [ { long: Examples.ad_group_id } ]
37
+ )).to include(ad_group_record)
38
+ end
39
+ end
40
+
41
+ describe '#get_ad_groups_by_campaign_id' do
42
+ it 'returns AdGroups' do
43
+ expect(api.campaign_management.get_ad_groups_by_campaign_id(
44
+ campaign_id: Examples.campaign_id
45
+ )).to include(ad_group_record)
46
+ end
47
+ end
48
+
49
+ describe '#update_ad_groups' do
50
+ it 'updates the ad' do
51
+ expect(api.campaign_management.call(:update_ad_groups,
52
+ campaign_id: Examples.campaign_id,
53
+ ad_groups: {
54
+ ad_group: [{
55
+ id: Examples.ad_group_id,
56
+ name: "AcceptanceTestAdGroup - #{random}"
57
+ }]
58
+ }
59
+ )).to eq(partial_errors: '', inherited_bid_strategy_types: nil)
60
+
61
+ ad_group = api.campaign_management.get_ad_groups_by_ids(
62
+ campaign_id: Examples.campaign_id,
63
+ ad_group_ids: [ { long: Examples.ad_group_id } ]
64
+ ).first
65
+
66
+ expect(ad_group).to include(
67
+ name: "AcceptanceTestAdGroup - #{random}"
68
+ )
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,113 @@
1
+ require_relative '../examples'
2
+
3
+ RSpec.describe 'Ad methods' do
4
+ include_context 'use api'
5
+
6
+ def add_ads
7
+ api.campaign_management.call(:add_ads,
8
+ ad_group_id: Examples.ad_group_id,
9
+ ads: [
10
+ {
11
+ expanded_text_ad: {
12
+ ad_format_preference: 'All',
13
+ domain: 'https://www.example.com/',
14
+ final_urls: [string: 'http://www.contoso.com/'],
15
+ path_1: 'subdirectory1',
16
+ path_2: 'su§bdirectory2',
17
+ text: 'Ad text goes here',
18
+ title_part_1: 'Title goes here',
19
+ title_part_2: 'Title 2 goes here',
20
+ status: 'Paused',
21
+ tracking_url_template: '{lpurl}',
22
+ },
23
+ },
24
+ ]
25
+ )
26
+ end
27
+
28
+ def get_ads
29
+ api.campaign_management.get_ads_by_ad_group_id(
30
+ ad_group_id: Examples.ad_group_id,
31
+ ad_types: [
32
+ { ad_type: 'Text' },
33
+ { ad_type: 'Image' },
34
+ { ad_type: 'Product' },
35
+ { ad_type: 'AppInstall' },
36
+ { ad_type: 'ExpandedText' },
37
+ { ad_type: 'DynamicSearch' },
38
+ ]
39
+ )
40
+ end
41
+
42
+ describe '#add_ads' do
43
+ it 'returns created Ad ids' do
44
+ expect(add_ads).to include(
45
+ ad_ids: [a_kind_of(Integer)],
46
+ partial_errors: ''
47
+ )
48
+ end
49
+ end
50
+
51
+ describe '#get_ads_by_ad_group_id' do
52
+ before { add_ads }
53
+
54
+ it 'returns a list of ads' do
55
+ expect(get_ads).to include(
56
+ {
57
+ ad_format_preference: a_kind_of(String),
58
+ device_preference: a_kind_of(String),
59
+ editorial_status: a_kind_of(String),
60
+ final_app_urls: nil,
61
+ final_mobile_urls: nil,
62
+ final_urls: a_kind_of(Hash),
63
+ final_url_suffix: nil,
64
+ forward_compatibility_map: "",
65
+ id: a_kind_of(String),
66
+ status: a_kind_of(String),
67
+ tracking_url_template: a_kind_of(String),
68
+ type: "ExpandedText",
69
+ url_custom_parameters: nil,
70
+ domain: a_kind_of(String),
71
+ path1: a_kind_of(String),
72
+ path2: a_kind_of(String),
73
+ text: a_kind_of(String),
74
+ text_part2: '',
75
+ title_part1: a_kind_of(String),
76
+ title_part2: a_kind_of(String),
77
+ title_part3: ''
78
+ }
79
+ )
80
+ end
81
+ end
82
+
83
+ describe '#update_ads' do
84
+ before { add_ads }
85
+
86
+ it 'updates the Ad' do
87
+ expect(api.campaign_management.call(:update_ads,
88
+ ad_group_id: Examples.ad_group_id,
89
+ ads: {
90
+ expanded_text_ad: [{
91
+ id: get_ads.first[:id],
92
+ text: "Ad text goes here - #{random}"
93
+ }],
94
+ }
95
+ )).to eq(partial_errors: '')
96
+
97
+ expect(get_ads.first).to include( text: "Ad text goes here - #{random}")
98
+ end
99
+ end
100
+
101
+ describe 'test_delete_ads' do
102
+ let(:ad_id) { add_ads[:ad_ids].first }
103
+
104
+ it 'returns no errors' do
105
+ expect(api.campaign_management.call(:delete_ads,
106
+ ad_group_id: Examples.ad_group_id,
107
+ ad_ids: [long: ad_id]
108
+ )).to eq(partial_errors: '')
109
+
110
+ expect(get_ads.map{|h| h[:id]}).not_to include ad_id.to_s
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,108 @@
1
+ require_relative '../examples'
2
+
3
+ RSpec.describe 'Keyword methods' do
4
+ include_context 'use api'
5
+
6
+ describe 'Keyword methods' do
7
+ let(:a_keyword) do
8
+ {
9
+ bid: a_kind_of(Hash),
10
+ bidding_scheme: a_kind_of(Hash),
11
+ destination_url: a_kind_of(String),
12
+ editorial_status: a_kind_of(String),
13
+ final_app_urls: nil,
14
+ final_mobile_urls: nil,
15
+ final_url_suffix: nil,
16
+ final_urls: nil,
17
+ forward_compatibility_map: a_kind_of(String),
18
+ id: a_kind_of(String),
19
+ match_type: a_kind_of(String),
20
+ param1: a_kind_of(String),
21
+ param2: a_kind_of(String),
22
+ param3: a_kind_of(String),
23
+ status: a_kind_of(String),
24
+ text: a_kind_of(String),
25
+ tracking_url_template: nil,
26
+ url_custom_parameters: nil,
27
+ }
28
+ end
29
+
30
+ let(:keyword_id) { add_keywords[:keyword_ids].first }
31
+ let(:add_keywords) do
32
+ api.campaign_management.call(:add_keywords,
33
+ ad_group_id: Examples.ad_group_id,
34
+ keywords: { keyword: {
35
+ bid: { amount: 0.05 },
36
+ match_type: 'Exact',
37
+ text: "AcceptanceTestKeyword - #{random}",
38
+ } }
39
+ )
40
+ end
41
+
42
+ describe '#add_keywords' do
43
+ it 'returns created Keyword ids' do
44
+ expect(add_keywords).to include(
45
+ keyword_ids: [a_kind_of(Integer)],
46
+ partial_errors: ''
47
+ )
48
+ end
49
+ end
50
+
51
+ describe '#get_keywords_by_ad_group_id' do
52
+ before { add_keywords }
53
+
54
+ it 'returns a list of keywords' do
55
+ expect(api.campaign_management.get_keywords_by_ad_group_id(
56
+ ad_group_id: Examples.ad_group_id
57
+ )).to include(a_keyword)
58
+ end
59
+ end
60
+
61
+ describe '#get_keywords_by_editorial_status' do
62
+ before { add_keywords }
63
+
64
+ it 'returns a list of Keywords' do
65
+ expect(api.campaign_management.get_keywords_by_editorial_status(
66
+ ad_group_id: Examples.ad_group_id,
67
+ editorial_status: 'Active'
68
+ )).to include(a_keyword)
69
+ end
70
+ end
71
+
72
+ describe '#get_keywords_by_ids' do
73
+ before { add_keywords }
74
+
75
+ it 'returns a list of Keywords' do
76
+ expect(api.campaign_management.get_keywords_by_ids(
77
+ ad_group_id: Examples.ad_group_id,
78
+ keyword_ids: [{ long: keyword_id }]
79
+ )).to include(a_keyword)
80
+ end
81
+ end
82
+
83
+ describe '#update_keywords' do
84
+ before { add_keywords }
85
+
86
+ it 'updates the keyword' do
87
+ expect(api.campaign_management.call(:update_keywords,
88
+ ad_group_id: Examples.ad_group_id,
89
+ keywords: { keyword: [
90
+ id: keyword_id,
91
+ bid: { amount: 0.50 },
92
+ ] }
93
+ )).to include(partial_errors: '')
94
+ end
95
+ end
96
+
97
+ describe '#delete_keywords' do
98
+ before { add_keywords }
99
+
100
+ it 'returns no errors' do
101
+ expect(api.campaign_management.call(:delete_keywords,
102
+ ad_group_id: Examples.ad_group_id,
103
+ keyword_ids: [{ long: keyword_id }]
104
+ )).to eq(partial_errors: '')
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+
5
+ module Examples
6
+ class << self
7
+
8
+ def random
9
+ SecureRandom.hex
10
+ end
11
+
12
+ def build_api
13
+ BingAdsRubySdk::Api.new(
14
+ developer_token: developer_token,
15
+ client_id: client_id,
16
+ oauth_store: store
17
+ ).tap do |api|
18
+ if account_id && customer_id
19
+ api.set_customer(
20
+ customer_id: customer_id,
21
+ account_id: account_id
22
+ )
23
+ end
24
+ end
25
+ end
26
+
27
+ def client_id
28
+ # you have to fill this in with data from bing
29
+ end
30
+
31
+ def developer_token
32
+ # you have to fill this in with data from bing
33
+ end
34
+
35
+ def parent_customer_id
36
+ # you have to fill this in with data from bing
37
+ end
38
+
39
+ def customer_id
40
+ # you have to fill this in with data you get after running 1_customer folder
41
+ end
42
+
43
+ def account_id
44
+ # you have to fill this in with data you get after running 1_customer folder
45
+ end
46
+
47
+ def uet_tag_id
48
+ # you have to fill this in with data you get after running 2_with_customer folder
49
+ end
50
+
51
+ def campaign_id
52
+ # you have to fill this in with data you get after running 2_with_customer folder
53
+ end
54
+
55
+ def conversion_goal_id
56
+ # you have to fill this in with data you get after running 3_with_uet_tag folder
57
+ end
58
+
59
+ def ad_group_id
60
+ # you have to fill this in with data you get after running 5_with_campaign folder
61
+ end
62
+
63
+ def store
64
+ ::BingAdsRubySdk::OAuth2::FsStore.new(store_filename)
65
+ end
66
+
67
+ def store_filename
68
+ ENV.fetch('BING_STORE_FILENAME')
69
+ end
70
+ end
71
+ end
72
+
73
+ RSpec.shared_context 'use api' do
74
+ let(:random) { Examples.random }
75
+ let(:api) { Examples.build_api }
76
+ end
@@ -0,0 +1,23 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soap:Envelope xmlns:ns0="https://bingads.microsoft.com/CampaignManagement/v13" xmlns:ns1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:ns2="https://adapi.microsoft.com" xmlns:ns3="http://schemas.datacontract.org/2004/07/System.Collections.Generic" xmlns:ns4="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
3
+ <soap:Header>
4
+ <ns0:AuthenticationToken>***FILTERED***</ns0:AuthenticationToken>
5
+ <ns0:DeveloperToken>***FILTERED***</ns0:DeveloperToken>
6
+ <ns0:CustomerId>***FILTERED***</ns0:CustomerId>
7
+ <ns0:CustomerAccountId>***FILTERED***</ns0:CustomerAccountId>
8
+ </soap:Header>
9
+ <soap:Body>
10
+ <ns0:DownloadCampaignsByAccountIdsRequest>
11
+ <ns0:AccountIds>
12
+ <ns1:long>150168726</ns1:long>
13
+ </ns0:AccountIds>
14
+ <ns0:CompressionType>Zip</ns0:CompressionType>
15
+ <ns0:DataScope>EntityData</ns0:DataScope>
16
+ <ns0:DownloadEntities>
17
+ <ns0:DownloadEntity>Campaigns</ns0:DownloadEntity>
18
+ </ns0:DownloadEntities>
19
+ <ns0:DownloadFileType>Csv</ns0:DownloadFileType>
20
+ <ns0:FormatVersion>6.0</ns0:FormatVersion>
21
+ </ns0:DownloadCampaignsByAccountIdsRequest>
22
+ </soap:Body>
23
+ </soap:Envelope>