bing_ads_ruby_sdk 1.5.0 → 1.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/README.md +21 -5
  4. data/Rakefile +1 -1
  5. data/bing_ads_ruby_sdk.gemspec +9 -1
  6. data/changelog.md +3 -0
  7. data/lib/Rakefile +4 -0
  8. data/lib/bing_ads_ruby_sdk/errors/errors.rb +1 -1
  9. data/lib/bing_ads_ruby_sdk/railtie.rb +13 -0
  10. data/{tasks → lib/bing_ads_ruby_sdk/tasks}/bing_ads_ruby_sdk.rake +1 -1
  11. data/lib/bing_ads_ruby_sdk/version.rb +1 -1
  12. data/lib/bing_ads_ruby_sdk.rb +1 -0
  13. metadata +6 -85
  14. data/.circleci/config.yml +0 -54
  15. data/.github/.keep +0 -0
  16. data/.github/renovate.json +0 -225
  17. data/.gitignore +0 -19
  18. data/.rspec +0 -4
  19. data/spec/bing_ads_ruby_sdk/api_spec.rb +0 -17
  20. data/spec/bing_ads_ruby_sdk/errors/error_handler_spec.rb +0 -477
  21. data/spec/bing_ads_ruby_sdk/errors/errors_spec.rb +0 -13
  22. data/spec/bing_ads_ruby_sdk/header_spec.rb +0 -60
  23. data/spec/bing_ads_ruby_sdk/http_client_spec.rb +0 -42
  24. data/spec/bing_ads_ruby_sdk/oauth2/fs_store_spec.rb +0 -19
  25. data/spec/bing_ads_ruby_sdk/postprocessors/cast_long_arrays_spec.rb +0 -29
  26. data/spec/bing_ads_ruby_sdk/postprocessors/snakize_spec.rb +0 -39
  27. data/spec/bing_ads_ruby_sdk/preprocessors/camelize_spec.rb +0 -39
  28. data/spec/bing_ads_ruby_sdk/preprocessors/order_spec.rb +0 -130
  29. data/spec/bing_ads_ruby_sdk/services/bulk_spec.rb +0 -51
  30. data/spec/bing_ads_ruby_sdk/services/campaign_management_spec.rb +0 -314
  31. data/spec/bing_ads_ruby_sdk/services/customer_management_spec.rb +0 -96
  32. data/spec/bing_ads_ruby_sdk_spec.rb +0 -5
  33. data/spec/examples/1_customer_creation/customer_spec.rb +0 -35
  34. data/spec/examples/2_with_customer/budget_spec.rb +0 -52
  35. data/spec/examples/2_with_customer/campaigns_spec.rb +0 -26
  36. data/spec/examples/2_with_customer/customer_management_spec.rb +0 -188
  37. data/spec/examples/2_with_customer/uet_tags_spec.rb +0 -42
  38. data/spec/examples/3_with_uet_tag/conversion_goal_spec.rb +0 -40
  39. data/spec/examples/3_with_uet_tag/uet_tags_spec.rb +0 -56
  40. data/spec/examples/4_with_conversion_goal/conversion_goals_spec.rb +0 -76
  41. data/spec/examples/5_with_campaign/ad_extension_spec.rb +0 -235
  42. data/spec/examples/5_with_campaign/ad_group_spec.rb +0 -34
  43. data/spec/examples/5_with_campaign/campaign_criterions_spec.rb +0 -72
  44. data/spec/examples/5_with_campaign/campaign_spec.rb +0 -70
  45. data/spec/examples/6_with_ad_group/ad_group_spec.rb +0 -70
  46. data/spec/examples/6_with_ad_group/ads_spec.rb +0 -110
  47. data/spec/examples/6_with_ad_group/keywords_spec.rb +0 -105
  48. data/spec/examples/examples.rb +0 -75
  49. data/spec/fixtures/bulk/download_campaigns_by_account_ids/standard.xml +0 -23
  50. data/spec/fixtures/bulk/download_campaigns_by_account_ids/standard_response.xml +0 -11
  51. data/spec/fixtures/bulk/get_bulk_download_status/standard.xml +0 -14
  52. data/spec/fixtures/bulk/get_bulk_download_status/standard_response.xml +0 -15
  53. data/spec/fixtures/campaign_management/add_ad_extensions/standard.xml +0 -21
  54. data/spec/fixtures/campaign_management/add_ad_extensions/standard_response.xml +0 -17
  55. data/spec/fixtures/campaign_management/add_conversion_goals/standard.xml +0 -27
  56. data/spec/fixtures/campaign_management/add_conversion_goals/standard_response.xml +0 -14
  57. data/spec/fixtures/campaign_management/add_shared_entity/standard.xml +0 -16
  58. data/spec/fixtures/campaign_management/add_shared_entity/standard_response.xml +0 -13
  59. data/spec/fixtures/campaign_management/add_uet_tags/standard.xml +0 -19
  60. data/spec/fixtures/campaign_management/add_uet_tags/standard_response.xml +0 -21
  61. data/spec/fixtures/campaign_management/get_ad_extension_ids_by_account_id/standard.xml +0 -15
  62. data/spec/fixtures/campaign_management/get_ad_extension_ids_by_account_id/standard_response.xml +0 -13
  63. data/spec/fixtures/campaign_management/get_ad_extensions_associations/standard.xml +0 -19
  64. data/spec/fixtures/campaign_management/get_ad_extensions_associations/standard_response.xml +0 -47
  65. data/spec/fixtures/campaign_management/get_budgets_by_ids/standard.xml +0 -12
  66. data/spec/fixtures/campaign_management/get_budgets_by_ids/standard_response.xml +0 -20
  67. data/spec/fixtures/campaign_management/get_campaigns_by_account_id/standard.xml +0 -14
  68. data/spec/fixtures/campaign_management/get_campaigns_by_account_id/standard_response.xml +0 -84
  69. data/spec/fixtures/campaign_management/get_conversion_goals_by_ids/standard.xml +0 -18
  70. data/spec/fixtures/campaign_management/get_conversion_goals_by_ids/standard_response.xml +0 -61
  71. data/spec/fixtures/campaign_management/get_shared_entities_by_account_id/standard.xml +0 -14
  72. data/spec/fixtures/campaign_management/get_shared_entities_by_account_id/standard_response.xml +0 -20
  73. data/spec/fixtures/campaign_management/get_shared_entity_associations_by_entity_ids/standard.xml +0 -18
  74. data/spec/fixtures/campaign_management/get_shared_entity_associations_by_entity_ids/standard_response.xml +0 -19
  75. data/spec/fixtures/campaign_management/get_uet_tags_by_ids/standard.xml +0 -16
  76. data/spec/fixtures/campaign_management/get_uet_tags_by_ids/standard_response.xml +0 -21
  77. data/spec/fixtures/campaign_management/set_ad_extensions_associations/standard.xml +0 -21
  78. data/spec/fixtures/campaign_management/set_ad_extensions_associations/standard_response.xml +0 -11
  79. data/spec/fixtures/campaign_management/set_shared_entity_associations/standard.xml +0 -21
  80. data/spec/fixtures/campaign_management/set_shared_entity_associations/standard_response.xml +0 -11
  81. data/spec/fixtures/campaign_management/update_conversion_goals/standard.xml +0 -27
  82. data/spec/fixtures/campaign_management/update_conversion_goals/standard_response.xml +0 -11
  83. data/spec/fixtures/campaign_management/update_uet_tags/standard.xml +0 -20
  84. data/spec/fixtures/campaign_management/update_uet_tags/standard_response.xml +0 -11
  85. data/spec/fixtures/customer_management/find_accounts_or_customers_info/standard.xml +0 -15
  86. data/spec/fixtures/customer_management/find_accounts_or_customers_info/standard_response.xml +0 -21
  87. data/spec/fixtures/customer_management/get_account/standard.xml +0 -14
  88. data/spec/fixtures/customer_management/get_account/standard_response.xml +0 -43
  89. data/spec/fixtures/customer_management/signup_customer/standard.xml +0 -30
  90. data/spec/fixtures/customer_management/signup_customer/standard_response.xml +0 -15
  91. data/spec/fixtures/customer_management/update_account/standard.xml +0 -19
  92. data/spec/fixtures/customer_management/update_account/standard_response.xml +0 -11
  93. data/spec/spec_helper.rb +0 -33
  94. data/spec/support/spec_helpers.rb +0 -46
@@ -1,477 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe BingAdsRubySdk::Errors::ErrorHandler do
4
- let(:general_error) { BingAdsRubySdk::Errors::GeneralError }
5
- let(:subject) { described_class.new(api_response).call }
6
-
7
- def shared_expectations
8
- expect { subject }.to raise_error do |error|
9
- expect(error).to be_a(error_class)
10
- expect(error).to have_attributes(error_attributes)
11
- end
12
- end
13
-
14
- context "when there is no fault" do
15
- let(:api_response) do
16
- {
17
- is_migrated: "false",
18
- nested_partial_errors: ""
19
- }
20
- end
21
-
22
- it { is_expected.to be nil }
23
- end
24
-
25
- context "when there is a fault" do
26
- let(:api_response) do
27
- {
28
- faultcode: "s:Server",
29
- faultstring:
30
- "Invalid client data. Check the SOAP fault details",
31
- detail: detail
32
- }
33
- end
34
-
35
- let(:batch_error) do
36
- {
37
- batch_error: {
38
- code: "0000",
39
- details: "Batch error details",
40
- error_code: "ErrorCode",
41
- field_path: "{lpurl}",
42
- index: "0",
43
- message: "Batch error message",
44
- type: "reserved for internal use"
45
- }
46
- }
47
- end
48
- let(:batch_error_list) { [batch_error] }
49
-
50
- let(:editorial_error_list) do
51
- [
52
- # Inherits from BatchError
53
- batch_error[:batch_error].merge(
54
- appealable: true,
55
- disapproved_text: "The text that caused the entity to ...",
56
- location: "ElementName",
57
- publisher_country: "New Zealand",
58
- reason_code: 4
59
- )
60
- ]
61
- end
62
-
63
- let(:operation_errors) do
64
- [{
65
- operation_error: {
66
- code: "4503",
67
- details: "Invalid API Campaign Criterion Type : 0 on API tier",
68
- error_code: "TypeInvalid",
69
- message: "The campaign criterion ..."
70
- }
71
- }]
72
- end
73
-
74
- let(:error_message) do
75
- "Bing Ads API error - Invalid client data. Check the SOAP fault details"
76
- end
77
-
78
- context "of type ApiFaultDetail" do
79
- let(:detail) do
80
- {
81
- api_fault_detail: {
82
- tracking_id: "14f89175-e806-4822-8aa7-32b0c7734e11",
83
- batch_errors: "",
84
- operation_errors: operation_errors
85
- }
86
- }
87
- end
88
-
89
- let(:error_attributes) do
90
- {
91
- batch_errors: [],
92
- operation_errors: operation_errors,
93
- message: "TypeInvalid - The campaign criterion ..."
94
- }
95
- end
96
-
97
- let(:error_class) { BingAdsRubySdk::Errors::ApiFaultDetail }
98
-
99
- it("raises an error") { shared_expectations }
100
- end
101
-
102
- context "of type AdApiFaultDetail" do
103
- let(:detail) do
104
- {
105
- ad_api_fault_detail: {
106
- tracking_id: "14f89175-e806-4822-8aa7-32b0c7734e11",
107
- errors: errors
108
- }
109
- }
110
- end
111
-
112
- let(:errors) do
113
- [{
114
- ad_api_error: {
115
- code: "0000",
116
- detail: "Details about error",
117
- error_code: "ErrorCode",
118
- message: "Fault message"
119
- }
120
- }]
121
- end
122
-
123
- let(:error_class) { BingAdsRubySdk::Errors::AdApiFaultDetail }
124
- let(:error_attributes) do
125
- {
126
- errors: errors,
127
- message: "ErrorCode - Fault message"
128
- }
129
- end
130
-
131
- it("raises an error") { shared_expectations }
132
- end
133
-
134
- context "of type EditorialApiFaultDetail" do
135
- let(:detail) do
136
- {
137
- editorial_api_fault_detail: {
138
- tracking_id: "14f89175-e806-4822-8aa7-32b0c7734e11",
139
- batch_errors: batch_error_list,
140
- editorial_errors: editorial_error_list,
141
- operation_errors: operation_errors
142
- }
143
- }
144
- end
145
-
146
- let(:error_class) { BingAdsRubySdk::Errors::EditorialApiFaultDetail }
147
-
148
- let(:error_attributes) do
149
- {
150
- batch_errors: batch_error_list,
151
- editorial_errors: editorial_error_list,
152
- operation_errors: operation_errors,
153
- message: error_message
154
- }
155
- end
156
-
157
- context "when all the lists have errors" do
158
- let(:error_message) do
159
- "API raised 3 errors, including: ErrorCode - Batch error message"
160
- end
161
- it("raises an error") { shared_expectations }
162
- end
163
-
164
- context "when some of the lists are empty" do
165
- let(:batch_error_list) { [] }
166
- let(:editorial_error_list) { [] }
167
- let(:error_message) do
168
- "TypeInvalid - The campaign criterion ..."
169
- end
170
-
171
- it("raises an error") { shared_expectations }
172
- end
173
- end
174
-
175
- context "of type ApiBatchFault" do
176
- let(:detail) do
177
- {
178
- api_batch_fault: {
179
- tracking_id: "14f89175-e806-4822-8aa7-32b0c7734e11",
180
- batch_errors: batch_error_list
181
- }
182
- }
183
- end
184
-
185
- let(:error_class) { BingAdsRubySdk::Errors::ApiBatchFault }
186
- let(:error_attributes) do
187
- {
188
- batch_errors: batch_error_list,
189
- message: "ErrorCode - Batch error message"
190
- }
191
- end
192
-
193
- it("raises an error") { shared_expectations }
194
- end
195
-
196
- context "of type ApiFault" do
197
- let(:detail) do
198
- {
199
- api_fault: {
200
- tracking_id: "14f89175-e806-4822-8aa7-32b0c7734e11",
201
- operation_errors: operation_errors
202
- }
203
- }
204
- end
205
-
206
- let(:error_attributes) do
207
- {
208
- operation_errors: operation_errors,
209
- message: "TypeInvalid - The campaign criterion ..."
210
- }
211
- end
212
- let(:error_class) { BingAdsRubySdk::Errors::ApiFault }
213
-
214
- it("raises an error") { shared_expectations }
215
- end
216
-
217
- context "of type InvalidCredentials" do
218
- let(:api_response) do
219
- {
220
- code: "105",
221
- detail: nil,
222
- error_code: "InvalidCredentials",
223
- message: "Authentication failed. Either supplied ..."
224
- }
225
- end
226
-
227
- let(:error_class) { general_error }
228
-
229
- let(:error_attributes) do
230
- {
231
- raw_response: api_response,
232
- message: "InvalidCredentials - #{api_response[:message]}"
233
- }
234
- end
235
-
236
- it("raises an error") { shared_expectations }
237
- end
238
-
239
- context "of an unknown type" do
240
- let(:detail) do
241
- {
242
- new_fault_unknown_to_sdk: {
243
- tracking_id: "14f89175-e806-4822-8aa7-32b0c7734e11",
244
- new_field: "value"
245
- }
246
- }
247
- end
248
-
249
- let(:error_class) { general_error }
250
-
251
- let(:error_attributes) do
252
- {
253
- raw_response: api_response,
254
- message: error_message
255
- }
256
- end
257
-
258
- it("raises an error") { shared_expectations }
259
- end
260
-
261
- context "when there are no details" do
262
- let(:detail) { nil }
263
- let(:error_class) { general_error }
264
- let(:error_attributes) do
265
- {
266
- raw_response: api_response,
267
- message: error_message
268
- }
269
- end
270
-
271
- it("raises an error") { shared_expectations }
272
- end
273
-
274
- context "when there is no error_code" do
275
- let(:detail) do
276
- {
277
- api_fault: {
278
- tracking_id: "14f89175-e806-4822-8aa7-32b0c7734e11",
279
- batch_errors: "",
280
- operation_errors: {
281
- operation_error: {
282
- code: "1001",
283
- details: "",
284
- message: "The user is not authorized to perform this action."
285
- }
286
- }
287
- }
288
- }
289
- end
290
- let(:error_class) { BingAdsRubySdk::Errors::ApiFault }
291
- let(:error_attributes) do
292
- {
293
- raw_response: api_response,
294
- message: "The user is not authorized to perform this action."
295
- }
296
- end
297
-
298
- it("raises an error") { shared_expectations }
299
- end
300
- end
301
-
302
- context "when there is a deserialization error" do
303
- let(:api_response) do
304
- {
305
- faultcode: "a:DeserializationFailed",
306
- faultstring: "The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter https://bingads.microsoft.com/CampaignManagement/v11:CampaignId. The InnerException message was 'There was an error deserializing the object of type System.Int64. The value '' cannot be parsed as the type 'Int64'.'. Please see InnerException for more details.",
307
- detail: {
308
- exception_detail: {
309
- help_link: nil,
310
- inner_exception: {
311
- help_link: nil,
312
- inner_exception: {
313
- help_link: nil,
314
- inner_exception: {
315
- help_link: nil,
316
- inner_exception: nil,
317
- message: "Input string was not in a correct format.",
318
- stack_trace: " at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)\r\n at System.Number.ParseInt64(String value, NumberStyles options, NumberFormatInfo numfmt)\r\n at System.Xml.XmlConverter.ToInt64(String value)",
319
- type: "System.FormatException"
320
- },
321
- message: "The value '' cannot be parsed as the type 'Int64'.",
322
- stack_trace: " at System.Xml.XmlConverter.ToInt64(String value)\r\n at System.Xml.XmlDictionaryReader.ReadElementContentAsLong()\r\n at System.Runtime.Serialization.LongDataContract.ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context)\r\n at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver)",
323
- type: "System.Xml.XmlException"
324
- },
325
- message: "There was an error deserializing the object of type System.Int64. The value '' cannot be parsed as the type 'Int64'.",
326
- stack_trace: " at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver)\r\n at System.Runtime.Serialization.DataContractSerializer.ReadObject(XmlDictionaryReader reader, Boolean verifyObjectName)\r\n at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.PartInfo.ReadObject(XmlDictionaryReader reader, XmlObjectSerializer serializer)\r\n at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeParameterPart(XmlDictionaryReader reader, PartInfo part, Boolean isRequest)",
327
- type: "System.Runtime.Serialization.SerializationException"
328
- },
329
- message: "The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter https://bingads.microsoft.com/CampaignManagement/v11:CampaignId. The InnerException message was 'There was an error deserializing the object of type System.Int64. The value '' cannot be parsed as the type 'Int64'.'. Please see InnerException for more details.",
330
- stack_trace: " at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeParameterPart(XmlDictionaryReader reader, PartInfo part, Boolean isRequest)\r\n at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeParameters(XmlDictionaryReader reader, PartInfo[] parts, Object[] parameters, Boolean isRequest)\r\n at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, String action, MessageDescription messageDescription, Object[] parameters, Boolean isRequest)\r\n at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeBodyContents(Message message, Object[] parameters, Boolean isRequest)\r\n at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeRequest(Message message, Object[] parameters)\r\n at System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc& rpc)\r\n at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)\r\n at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)\r\n at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)\r\n at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)",
331
- type: "System.ServiceModel.Dispatcher.NetDispatcherFaultException"
332
- }
333
- }
334
- }
335
- end
336
-
337
- let(:error_class) { BingAdsRubySdk::Errors::GeneralError }
338
- let(:error_attributes) do
339
- {
340
- raw_response: api_response,
341
- message: "Bing Ads API error - The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter https://bingads.microsoft.com/CampaignManagement/v11:CampaignId. The InnerException message was 'There was an error deserializing the object of type System.Int64. The value '' cannot be parsed as the type 'Int64'.'. Please see InnerException for more details."
342
- }
343
- end
344
-
345
- it("raises an error") { shared_expectations }
346
- end
347
-
348
- context "when there are nested partial errors" do
349
- let(:api_response) do
350
- {
351
- campaign_criterion_ids: [],
352
- is_migrated: "false",
353
- nested_partial_errors: {
354
- batch_error_collection: [
355
- {
356
- batch_errors: nil,
357
- code: "1043",
358
- details: "Criterion already exists",
359
- error_code: "AlreadyExists",
360
- field_path: nil,
361
- forward_compatibility_map: nil,
362
- index: "0",
363
- message: "The specified entity already exists.",
364
- type: "BatchErrorCollection"
365
- }
366
- ]
367
- }
368
- }
369
- end
370
-
371
- context "when the default behaviour is used" do
372
- let(:error_class) { BingAdsRubySdk::Errors::NestedPartialError }
373
- let(:error_attributes) do
374
- {
375
- raw_response: api_response,
376
- message: "AlreadyExists - The specified entity already exists."
377
- }
378
- end
379
-
380
- it("raises an error") { shared_expectations }
381
- end
382
-
383
- context "when the ignore partial errors switch is on" do
384
- it "should return the NestedPartialError as a Hash"
385
- end
386
- end
387
-
388
- context "when there are partial errors - multiple batch_errors" do
389
- let(:api_response) do
390
- {
391
- campaign_ids: [],
392
- partial_errors: {
393
- batch_error: [
394
- {
395
- code: "4701",
396
- details: nil,
397
- error_code: "UnsupportedBiddingScheme",
398
- field_path: nil,
399
- forward_compatibility_map: nil,
400
- index: "0",
401
- message: "The bidding...",
402
- type: "BatchError"
403
- },
404
- {
405
- code: "4701",
406
- details: nil,
407
- error_code: "UnsupportedBiddingScheme",
408
- field_path: nil,
409
- forward_compatibility_map: nil,
410
- index: "1",
411
- message: "The bidding...",
412
- type: "BatchError"
413
- }
414
- ]
415
- }
416
- }
417
- end
418
-
419
- context "when the default behaviour is used" do
420
- let(:error_class) { BingAdsRubySdk::Errors::PartialError }
421
-
422
- let(:error_attributes) do
423
- {
424
- raw_response: api_response,
425
- message: "API raised 2 errors, including: UnsupportedBiddingScheme - The bidding..."
426
- }
427
- end
428
-
429
- it("raises an error") { shared_expectations }
430
- end
431
-
432
- context "when the ignore partial errors switch is on" do
433
- it "should return the PartialError as a Hash"
434
- end
435
- end
436
-
437
- context "when there are partial errors - one batch_error" do
438
- let(:api_response) do
439
- {
440
- campaign_ids: [],
441
- partial_errors: {
442
- batch_error: {
443
- code: "4701",
444
- details: nil,
445
- error_code: "UnsupportedBiddingScheme",
446
- field_path: nil,
447
- forward_compatibility_map: nil,
448
- index: "0",
449
- message: "The bidding...",
450
- type: "BatchError"
451
- }
452
- }
453
- }
454
- end
455
-
456
- context "when the default behaviour is used" do
457
- let(:error_class) { BingAdsRubySdk::Errors::PartialError }
458
-
459
- let(:error_attributes) do
460
- {
461
- raw_response: api_response,
462
- message: "UnsupportedBiddingScheme - The bidding..."
463
- }
464
- end
465
-
466
- it("raises an error") { shared_expectations }
467
-
468
- it "contains a collection of batch_error" do
469
- expect { subject }.to raise_error do |error|
470
- expect(error).to respond_to(:batch_error)
471
- expect(error.batch_error).to be_a(Array)
472
- expect(error.batch_error.size).to eq(1)
473
- end
474
- end
475
- end
476
- end
477
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe BingAdsRubySdk::Errors::ApplicationFault do
4
- describe "#fault_hash" do
5
- context "when creating an instance" do
6
- subject(:create_instance) { described_class.new({details: nil}) }
7
-
8
- it "instantiates without raising an exception" do
9
- expect { create_instance }.not_to raise_error
10
- end
11
- end
12
- end
13
- end
@@ -1,60 +0,0 @@
1
- RSpec.describe BingAdsRubySdk::Header do
2
- let(:oauth_store) { double(:oauth_store) }
3
- let(:client_secret) { "pa$$w0rd" }
4
- let(:subject) do
5
- described_class.new(
6
- developer_token: "123abc",
7
- client_id: "1a-2b-3c",
8
- client_secret: client_secret,
9
- store: oauth_store
10
- )
11
- end
12
- let(:auth_handler) do
13
- double(:auth_handler, fetch_or_refresh: "yes/we/can")
14
- end
15
-
16
- before do
17
- expect(::BingAdsRubySdk::OAuth2::AuthorizationHandler).to receive(:new).with(
18
- developer_token: "123abc",
19
- client_id: "1a-2b-3c",
20
- client_secret: client_secret,
21
- store: oauth_store
22
- ).and_return auth_handler
23
- end
24
-
25
- describe ".content" do
26
- it do
27
- expect(subject.content).to eq(
28
- "AuthenticationToken" => "yes/we/can",
29
- "DeveloperToken" => "123abc",
30
- "CustomerId" => nil,
31
- "CustomerAccountId" => nil,
32
- "ClientSecret" => client_secret
33
- )
34
- end
35
-
36
- context "without client_secret" do
37
- let(:client_secret) { nil }
38
- it do
39
- expect(subject.content).to eq(
40
- "AuthenticationToken" => "yes/we/can",
41
- "DeveloperToken" => "123abc",
42
- "CustomerId" => nil,
43
- "CustomerAccountId" => nil
44
- )
45
- end
46
- end
47
-
48
- it "sets customer" do
49
- subject.set_customer(customer_id: 777, account_id: 666)
50
-
51
- expect(subject.content).to eq(
52
- "AuthenticationToken" => "yes/we/can",
53
- "DeveloperToken" => "123abc",
54
- "CustomerId" => 777,
55
- "CustomerAccountId" => 666,
56
- "ClientSecret" => client_secret
57
- )
58
- end
59
- end
60
- end
@@ -1,42 +0,0 @@
1
- RSpec.describe BingAdsRubySdk::HttpClient do
2
- describe ".post" do
3
- let(:request) do
4
- double(:request,
5
- url: "http://bing_url.com/foo",
6
- content: "body",
7
- headers: "headers")
8
- end
9
- let(:excon) { double(:excon) }
10
-
11
- before do
12
- expect(::Excon).to receive(:new).and_return(excon)
13
- expect(excon).to receive(:post).with(
14
- path: "/foo",
15
- body: "body",
16
- headers: "headers"
17
- ).and_return(response)
18
- end
19
-
20
- context "successful request" do
21
- let(:response) { double(:response, body: "soap xml") }
22
- it "returns response's body" do
23
- expect(described_class.post(request)).to eq("soap xml")
24
- end
25
- end
26
- end
27
-
28
- describe ".close_http_connections" do
29
- let(:connection1) { double("connection1") }
30
- let(:connection2) { double("connection2") }
31
- it "closes existing connections" do
32
- expect(described_class).to receive(:http_connections).and_return({
33
- "url1" => connection1,
34
- "url2" => connection2
35
- })
36
- expect(connection1).to receive :reset
37
- expect(connection2).to receive :reset
38
-
39
- described_class.close_http_connections
40
- end
41
- end
42
- end
@@ -1,19 +0,0 @@
1
- RSpec.describe BingAdsRubySdk::OAuth2::FsStore do
2
- after do
3
- File.unlink("./.abc") if File.file?("./.abc")
4
- end
5
- let(:store) { described_class.new(".abc") }
6
-
7
- context "when not empty" do
8
- before { store.write(a: 1, b: "2") }
9
- it "writes and read properly" do
10
- expect(store.read).to eq("a" => 1, "b" => "2")
11
- end
12
- end
13
-
14
- context "when empty" do
15
- it "reads properly" do
16
- expect(store.read).to be nil
17
- end
18
- end
19
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe BingAdsRubySdk::Postprocessors::CastLongArrays do
4
- def action(params)
5
- described_class.new(params).call
6
- end
7
-
8
- it "casts and simplifies long arrays" do
9
- expect(action({
10
- long: "foo",
11
- bar_bar: {
12
- long: ["1", "2"]
13
- },
14
- foos: [
15
- {
16
- bar: {
17
- long: ["3", "4"]
18
- }
19
- }
20
- ]
21
- })).to eq({
22
- long: "foo",
23
- bar_bar: [1, 2],
24
- foos: [
25
- {bar: [3, 4]}
26
- ]
27
- })
28
- end
29
- end
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe BingAdsRubySdk::Postprocessors::Snakize do
4
- def action(params)
5
- described_class.new(params).call
6
- end
7
-
8
- it "changes keys to snake version" do
9
- expect(action({
10
- "Foo" => "foo",
11
- "BarBar" => {
12
- "BazBaz" => "baz"
13
- },
14
- "Coucou" => [
15
- {
16
- "Bisou" => 1
17
- }
18
- ]
19
- })).to eq({
20
- foo: "foo",
21
- bar_bar: {
22
- baz_baz: "baz"
23
- },
24
- coucou: [
25
- {
26
- bisou: 1
27
- }
28
- ]
29
- })
30
- end
31
-
32
- it "handles properly 'long' tag name" do
33
- expect(action({
34
- "long" => "1"
35
- })).to eq({
36
- long: "1"
37
- })
38
- end
39
- end