twitter-ads 5.2.0 → 8.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -2
  3. data/README.md +1 -1
  4. data/lib/twitter-ads.rb +8 -4
  5. data/lib/twitter-ads/account.rb +6 -24
  6. data/lib/twitter-ads/audiences/tailored_audience.rb +56 -1
  7. data/lib/twitter-ads/{targeting_criteria/behavior_taxonomy.rb → campaign/advertiser_business_categories.rb} +6 -6
  8. data/lib/twitter-ads/campaign/campaign.rb +1 -2
  9. data/lib/twitter-ads/campaign/content_categories.rb +23 -0
  10. data/lib/twitter-ads/campaign/funding_instrument.rb +1 -2
  11. data/lib/twitter-ads/campaign/line_item.rb +4 -4
  12. data/lib/twitter-ads/campaign/organic_tweet.rb +1 -3
  13. data/lib/twitter-ads/campaign/targeting_criteria.rb +1 -1
  14. data/lib/twitter-ads/campaign/tweet.rb +4 -49
  15. data/lib/twitter-ads/client.rb +2 -2
  16. data/lib/twitter-ads/creative/account_media.rb +4 -6
  17. data/lib/twitter-ads/creative/draft_tweet.rb +40 -0
  18. data/lib/twitter-ads/creative/image_app_download_card.rb +2 -2
  19. data/lib/twitter-ads/creative/image_conversation_card.rb +3 -2
  20. data/lib/twitter-ads/creative/media_creative.rb +2 -3
  21. data/lib/twitter-ads/creative/media_library.rb +12 -13
  22. data/lib/twitter-ads/creative/promoted_account.rb +1 -2
  23. data/lib/twitter-ads/creative/promoted_tweet.rb +2 -3
  24. data/lib/twitter-ads/creative/scheduled_tweet.rb +1 -12
  25. data/lib/twitter-ads/creative/tweets.rb +52 -0
  26. data/lib/twitter-ads/creative/video_app_download_card.rb +4 -6
  27. data/lib/twitter-ads/creative/video_conversation_card.rb +6 -6
  28. data/lib/twitter-ads/creative/video_website_card.rb +3 -5
  29. data/lib/twitter-ads/creative/website_card.rb +2 -2
  30. data/lib/twitter-ads/cursor.rb +6 -0
  31. data/lib/twitter-ads/enum.rb +22 -13
  32. data/lib/twitter-ads/error.rb +5 -15
  33. data/lib/twitter-ads/http/request.rb +37 -2
  34. data/lib/twitter-ads/http/response.rb +1 -13
  35. data/lib/twitter-ads/resources/analytics.rb +99 -47
  36. data/lib/twitter-ads/resources/dsl.rb +8 -1
  37. data/lib/twitter-ads/restapi.rb +29 -0
  38. data/lib/twitter-ads/settings/tax.rb +13 -1
  39. data/lib/twitter-ads/targeting/audience_summary.rb +47 -0
  40. data/lib/twitter-ads/targeting_criteria/{behavior.rb → conversation.rb} +3 -7
  41. data/lib/twitter-ads/targeting_criteria/event.rb +1 -0
  42. data/lib/twitter-ads/utils.rb +23 -0
  43. data/lib/twitter-ads/version.rb +1 -1
  44. data/spec/fixtures/audience_summary.json +14 -0
  45. data/spec/fixtures/line_items_all.json +2 -10
  46. data/spec/fixtures/line_items_load.json +0 -1
  47. data/spec/fixtures/tailored_audiences_all.json +3 -0
  48. data/spec/fixtures/targeted_audiences.json +33 -0
  49. data/spec/fixtures/tweet_previews.json +23 -0
  50. data/spec/spec_helper.rb +1 -4
  51. data/spec/twitter-ads/audiences/tailored_audience_spec.rb +25 -2
  52. data/spec/twitter-ads/campaign/line_item_spec.rb +0 -1
  53. data/spec/twitter-ads/campaign/targeting_criteria_spec.rb +1 -1
  54. data/spec/twitter-ads/campaign/tweet_spec.rb +0 -59
  55. data/spec/twitter-ads/client_spec.rb +17 -1
  56. data/spec/twitter-ads/creative/media_creative_spec.rb +1 -1
  57. data/spec/twitter-ads/creative/promoted_tweet_spec.rb +18 -0
  58. data/spec/twitter-ads/creative/tweet_previews_spec.rb +41 -0
  59. data/spec/twitter-ads/rate_limit_spec.rb +247 -0
  60. data/spec/twitter-ads/retry_count_spec.rb +61 -0
  61. data/spec/twitter-ads/{creative/image_app_download_card_spec.rb → targeting/audience_summary_spec.rb} +16 -18
  62. metadata +50 -49
  63. data/lib/twitter-ads/audiences/audience_intelligence.rb +0 -68
  64. data/lib/twitter-ads/targeting/reach_estimate.rb +0 -78
  65. data/spec/fixtures/tweet_preview.json +0 -24
  66. data/spec/twitter-ads/campaign/reach_estimate_spec.rb +0 -103
  67. data/spec/twitter-ads/creative/account_media_spec.rb +0 -32
  68. data/spec/twitter-ads/creative/image_conversation_card_spec.rb +0 -40
  69. data/spec/twitter-ads/creative/video_app_download_card_spec.rb +0 -42
  70. data/spec/twitter-ads/creative/video_conversation_card_spec.rb +0 -51
  71. data/spec/twitter-ads/creative/website_card_spec.rb +0 -42
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twitter-ads
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.2.0
4
+ version: 8.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Babich
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2019-06-19 00:00:00.000000000 Z
15
+ date: 2020-10-28 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: multi_json
@@ -57,10 +57,11 @@ files:
57
57
  - bin/twitter-ads
58
58
  - lib/twitter-ads.rb
59
59
  - lib/twitter-ads/account.rb
60
- - lib/twitter-ads/audiences/audience_intelligence.rb
61
60
  - lib/twitter-ads/audiences/tailored_audience.rb
61
+ - lib/twitter-ads/campaign/advertiser_business_categories.rb
62
62
  - lib/twitter-ads/campaign/app_list.rb
63
63
  - lib/twitter-ads/campaign/campaign.rb
64
+ - lib/twitter-ads/campaign/content_categories.rb
64
65
  - lib/twitter-ads/campaign/funding_instrument.rb
65
66
  - lib/twitter-ads/campaign/iab_category.rb
66
67
  - lib/twitter-ads/campaign/line_item.rb
@@ -71,6 +72,7 @@ files:
71
72
  - lib/twitter-ads/client.rb
72
73
  - lib/twitter-ads/creative/account_media.rb
73
74
  - lib/twitter-ads/creative/cards_fetch.rb
75
+ - lib/twitter-ads/creative/draft_tweet.rb
74
76
  - lib/twitter-ads/creative/image_app_download_card.rb
75
77
  - lib/twitter-ads/creative/image_conversation_card.rb
76
78
  - lib/twitter-ads/creative/media_creative.rb
@@ -80,6 +82,7 @@ files:
80
82
  - lib/twitter-ads/creative/promoted_tweet.rb
81
83
  - lib/twitter-ads/creative/scheduled_tweet.rb
82
84
  - lib/twitter-ads/creative/tweet_previews.rb
85
+ - lib/twitter-ads/creative/tweets.rb
83
86
  - lib/twitter-ads/creative/video_app_download_card.rb
84
87
  - lib/twitter-ads/creative/video_conversation_card.rb
85
88
  - lib/twitter-ads/creative/video_website_card.rb
@@ -97,12 +100,12 @@ files:
97
100
  - lib/twitter-ads/resources/dsl.rb
98
101
  - lib/twitter-ads/resources/persistence.rb
99
102
  - lib/twitter-ads/resources/resource.rb
103
+ - lib/twitter-ads/restapi.rb
100
104
  - lib/twitter-ads/settings/tax.rb
101
105
  - lib/twitter-ads/settings/user.rb
102
- - lib/twitter-ads/targeting/reach_estimate.rb
106
+ - lib/twitter-ads/targeting/audience_summary.rb
103
107
  - lib/twitter-ads/targeting_criteria/app_store_category.rb
104
- - lib/twitter-ads/targeting_criteria/behavior.rb
105
- - lib/twitter-ads/targeting_criteria/behavior_taxonomy.rb
108
+ - lib/twitter-ads/targeting_criteria/conversation.rb
106
109
  - lib/twitter-ads/targeting_criteria/device.rb
107
110
  - lib/twitter-ads/targeting_criteria/event.rb
108
111
  - lib/twitter-ads/targeting_criteria/interest.rb
@@ -120,6 +123,7 @@ files:
120
123
  - spec/fixtures/accounts_load.json
121
124
  - spec/fixtures/app_lists_all.json
122
125
  - spec/fixtures/app_lists_load.json
126
+ - spec/fixtures/audience_summary.json
123
127
  - spec/fixtures/campaigns_all.json
124
128
  - spec/fixtures/campaigns_load.json
125
129
  - spec/fixtures/funding_instruments_all.json
@@ -135,7 +139,8 @@ files:
135
139
  - spec/fixtures/reach_estimate.json
136
140
  - spec/fixtures/tailored_audiences_all.json
137
141
  - spec/fixtures/tailored_audiences_load.json
138
- - spec/fixtures/tweet_preview.json
142
+ - spec/fixtures/targeted_audiences.json
143
+ - spec/fixtures/tweet_previews.json
139
144
  - spec/fixtures/videos_all.json
140
145
  - spec/fixtures/videos_load.json
141
146
  - spec/quality_spec.rb
@@ -146,21 +151,18 @@ files:
146
151
  - spec/twitter-ads/audiences/tailored_audience_spec.rb
147
152
  - spec/twitter-ads/campaign/app_list_spec.rb
148
153
  - spec/twitter-ads/campaign/line_item_spec.rb
149
- - spec/twitter-ads/campaign/reach_estimate_spec.rb
150
154
  - spec/twitter-ads/campaign/targeting_criteria_spec.rb
151
155
  - spec/twitter-ads/campaign/tweet_spec.rb
152
156
  - spec/twitter-ads/client_spec.rb
153
- - spec/twitter-ads/creative/account_media_spec.rb
154
- - spec/twitter-ads/creative/image_app_download_card_spec.rb
155
- - spec/twitter-ads/creative/image_conversation_card_spec.rb
156
157
  - spec/twitter-ads/creative/media_creative_spec.rb
157
158
  - spec/twitter-ads/creative/promoted_account_spec.rb
158
159
  - spec/twitter-ads/creative/promoted_tweet_spec.rb
159
- - spec/twitter-ads/creative/video_app_download_card_spec.rb
160
- - spec/twitter-ads/creative/video_conversation_card_spec.rb
161
- - spec/twitter-ads/creative/website_card_spec.rb
160
+ - spec/twitter-ads/creative/tweet_previews_spec.rb
162
161
  - spec/twitter-ads/cursor_spec.rb
163
162
  - spec/twitter-ads/placements_spec.rb
163
+ - spec/twitter-ads/rate_limit_spec.rb
164
+ - spec/twitter-ads/retry_count_spec.rb
165
+ - spec/twitter-ads/targeting/audience_summary_spec.rb
164
166
  - spec/twitter-ads/utils_spec.rb
165
167
  - twitter-ads.gemspec
166
168
  homepage: https://github.com/twitterdev/twitter-ruby-ads-sdk
@@ -182,55 +184,54 @@ required_rubygems_version: !ruby/object:Gem::Requirement
182
184
  - !ruby/object:Gem::Version
183
185
  version: 2.6.0
184
186
  requirements: []
185
- rubygems_version: 3.0.3
187
+ rubygems_version: 3.1.4
186
188
  signing_key:
187
189
  specification_version: 4
188
190
  summary: The officially supported Twitter Ads API SDK for Ruby.
189
191
  test_files:
190
- - spec/spec_helper.rb
192
+ - spec/quality_spec.rb
193
+ - spec/support/helpers.rb
194
+ - spec/shared/properties.rb
191
195
  - spec/twitter-ads/audiences/tailored_audience_spec.rb
196
+ - spec/twitter-ads/creative/promoted_account_spec.rb
197
+ - spec/twitter-ads/creative/tweet_previews_spec.rb
198
+ - spec/twitter-ads/creative/media_creative_spec.rb
199
+ - spec/twitter-ads/creative/promoted_tweet_spec.rb
200
+ - spec/twitter-ads/rate_limit_spec.rb
192
201
  - spec/twitter-ads/cursor_spec.rb
193
- - spec/twitter-ads/account_spec.rb
194
- - spec/twitter-ads/client_spec.rb
195
202
  - spec/twitter-ads/placements_spec.rb
196
- - spec/twitter-ads/campaign/targeting_criteria_spec.rb
203
+ - spec/twitter-ads/client_spec.rb
204
+ - spec/twitter-ads/account_spec.rb
205
+ - spec/twitter-ads/targeting/audience_summary_spec.rb
206
+ - spec/twitter-ads/retry_count_spec.rb
207
+ - spec/twitter-ads/utils_spec.rb
197
208
  - spec/twitter-ads/campaign/app_list_spec.rb
198
- - spec/twitter-ads/campaign/reach_estimate_spec.rb
199
- - spec/twitter-ads/campaign/line_item_spec.rb
209
+ - spec/twitter-ads/campaign/targeting_criteria_spec.rb
200
210
  - spec/twitter-ads/campaign/tweet_spec.rb
201
- - spec/twitter-ads/creative/account_media_spec.rb
202
- - spec/twitter-ads/creative/website_card_spec.rb
203
- - spec/twitter-ads/creative/video_app_download_card_spec.rb
204
- - spec/twitter-ads/creative/media_creative_spec.rb
205
- - spec/twitter-ads/creative/promoted_tweet_spec.rb
206
- - spec/twitter-ads/creative/image_conversation_card_spec.rb
207
- - spec/twitter-ads/creative/video_conversation_card_spec.rb
208
- - spec/twitter-ads/creative/promoted_account_spec.rb
209
- - spec/twitter-ads/creative/image_app_download_card_spec.rb
210
- - spec/twitter-ads/utils_spec.rb
211
- - spec/shared/properties.rb
212
- - spec/support/helpers.rb
213
- - spec/fixtures/line_items_load.json
214
- - spec/fixtures/promotable_users_all.json
215
- - spec/fixtures/reach_estimate.json
216
- - spec/fixtures/tweet_preview.json
211
+ - spec/twitter-ads/campaign/line_item_spec.rb
212
+ - spec/fixtures/promotable_users_load.json
213
+ - spec/fixtures/promoted_tweets_load.json
217
214
  - spec/fixtures/accounts_features.json
215
+ - spec/fixtures/campaigns_all.json
216
+ - spec/fixtures/line_items_load.json
217
+ - spec/fixtures/tweet_previews.json
218
+ - spec/fixtures/targeted_audiences.json
218
219
  - spec/fixtures/videos_all.json
219
- - spec/fixtures/line_items_all.json
220
- - spec/fixtures/placements.json
221
- - spec/fixtures/promotable_users_load.json
222
220
  - spec/fixtures/tailored_audiences_all.json
223
- - spec/fixtures/promoted_tweets_all.json
224
221
  - spec/fixtures/funding_instruments_load.json
225
- - spec/fixtures/tailored_audiences_load.json
222
+ - spec/fixtures/accounts_load.json
223
+ - spec/fixtures/line_items_all.json
224
+ - spec/fixtures/app_lists_all.json
225
+ - spec/fixtures/placements.json
226
226
  - spec/fixtures/app_lists_load.json
227
- - spec/fixtures/promoted_tweets_load.json
228
- - spec/fixtures/funding_instruments_all.json
229
227
  - spec/fixtures/campaigns_load.json
230
- - spec/fixtures/app_lists_all.json
231
- - spec/fixtures/accounts_load.json
232
- - spec/fixtures/no_content.json
233
- - spec/fixtures/campaigns_all.json
234
228
  - spec/fixtures/accounts_all.json
229
+ - spec/fixtures/promotable_users_all.json
230
+ - spec/fixtures/tailored_audiences_load.json
231
+ - spec/fixtures/promoted_tweets_all.json
235
232
  - spec/fixtures/videos_load.json
236
- - spec/quality_spec.rb
233
+ - spec/fixtures/funding_instruments_all.json
234
+ - spec/fixtures/reach_estimate.json
235
+ - spec/fixtures/no_content.json
236
+ - spec/fixtures/audience_summary.json
237
+ - spec/spec_helper.rb
@@ -1,68 +0,0 @@
1
- # frozen_string_literal: true
2
- # Copyright (C) 2019 Twitter, Inc.
3
-
4
- module TwitterAds
5
- class AudienceIntelligence
6
-
7
- include TwitterAds::DSL
8
- include TwitterAds::Resource::InstanceMethods
9
-
10
- attr_reader :account
11
-
12
- # writable
13
- property :conversation_type
14
- property :targeting_inputs
15
- property :audience_definition
16
-
17
- # demographics-only
18
- property :start_time, type: :time
19
- property :end_time, type: :time
20
-
21
- # read
22
- property :operator_type, read_only: true
23
- property :targeting_type, read_only: true
24
- property :targeting_value, read_only: true
25
- property :localized, read_only: true
26
-
27
- RESOURCE_CONVERSATIONS = "/#{TwitterAds::API_VERSION}/" \
28
- 'accounts/%{account_id}/audience_intelligence/' \
29
- 'conversations' # @api private
30
- RESOURCE_DEMOGRAPHICS = "/#{TwitterAds::API_VERSION}/" \
31
- 'accounts/%{account_id}/audience_intelligence/' \
32
- 'demographics' # @api private
33
-
34
- def initialize(account)
35
- @account = account
36
- self
37
- end
38
-
39
- def conversations
40
- headers = { 'Content-Type' => 'application/json' }
41
- params = {
42
- conversation_type: conversation_type,
43
- audience_definition: audience_definition,
44
- targeting_inputs: targeting_inputs
45
- }
46
- resource = RESOURCE_CONVERSATIONS % { account_id: account.id }
47
- request = Request.new(account.client, :post, resource, body: params.to_json, headers: headers)
48
- Cursor.new(self.class, request, init_with: [account])
49
- end
50
-
51
- def demographics
52
- headers = { 'Content-Type' => 'application/json' }
53
- params = {
54
- audience_definition: audience_definition,
55
- targeting_inputs: targeting_inputs
56
- }
57
- resource = RESOURCE_DEMOGRAPHICS % { account_id: account.id }
58
- response = Request.new(
59
- account.client,
60
- :post,
61
- resource,
62
- body: params.to_json,
63
- headers: headers).perform
64
- response.body[:data]
65
- # cannot use cursor here given that the response "keys" are dynmaic based on input values
66
- end
67
- end
68
- end
@@ -1,78 +0,0 @@
1
- # frozen_string_literal: true
2
- # Copyright (C) 2019 Twitter, Inc.
3
-
4
- module TwitterAds
5
- module ReachEstimate
6
-
7
- class << self
8
-
9
- # Get a reach estimate for the specified line item details.
10
- #
11
- # @example
12
- # TwitterAds::ReachEstimate.fetch(
13
- # account,
14
- # 'PROMOTED_TWEETS',
15
- # 'WEBSITE_CLICKS',
16
- # 5500000,
17
- # 30000000,
18
- # similar_to_followers_of_user: 2153688540,
19
- # gender: 2
20
- # )
21
- #
22
- # @param client [Client] The Client object instance.
23
- # @param product_type [String] The product type being targeted.
24
- # @param objective [String] The objective being targeted.
25
- # @param campaign_daily_budget_amount_local_micro [Long] Daily budget in micros.
26
- # @param opts [Hash] A Hash of extended options.
27
- #
28
- # @option opts [Long] :bid_amount_local_micro Bid amount in local currency micros.
29
- # @option opts [String] :bid_type The bidding mechanism.
30
- # @option opts [String] :currency ISO-4217 Currency code for bid amount.
31
- # @option opts [String] :followers_of_users Comma-separated user IDs.
32
- # @option opts [String] :similar_to_followers_of_users Comma-separated user IDs.
33
- # @option opts [String] :locations Comma-separated location IDs.
34
- # @option opts [String] :interests Comma-seaprated interest IDs.
35
- # @option opts [String] :gender Gender identifier.
36
- # @option opts [String] :platforms Comma-separated platform IDs.
37
- # @option opts [String] :tailored_audiences Comma-separated tailored audience IDs.
38
- # @option opts [String] :tailored_audiences_expanded Comma-separated tailoerd audience IDs.
39
- # @option opts [String] :languages Comma-separated language IDs.
40
- # @option opts [String] :platform_versions Comma-separated platform version IDs.
41
- # @option opts [String] :devices Comma-separated device IDs.
42
- # @option opts [String] :behaviors Comma-separated behavior IDs.
43
- # @option opts [String] :behaviors_expanded Comma-separated behaviors IDs.
44
- # @option opts [String] :campaign engagement Campaign ID for Tweet Engager Retargeting.
45
- # @option opts [String] :user_engagement Promoted User ID for Tweet Engager Retargeting.
46
- # @option opts [String] :engagement_type engagement type for Tweet Engager Retargeting.
47
- # @option opts [String] :network_operators Network operators to target
48
- # @option opts [String] :app_store_categories App store categories to target.
49
- # @option opts [String] :app_store_categories_expanded App store categories with lookalikes.
50
- #
51
- # @return [Hash] A hash containing count and infinite_bid_count.
52
- #
53
- # @since 1.0.0
54
- # @see https://developer.twitter.com/en/docs/ads/campaign-management/api-reference/reach-estimate
55
- def fetch(account, product_type, objective, campaign_daily_budget,
56
- opts = {})
57
- resource = "/#{TwitterAds::API_VERSION}/accounts/#{account.id}/reach_estimate"
58
- params = {
59
- product_type: product_type,
60
- objective: objective,
61
- campaign_daily_budget_amount_local_micro: campaign_daily_budget
62
- }.merge!(opts)
63
-
64
- # The response value count is "bid sensitive", we default to bid_type=AUTO here to preserve
65
- # expected behavior despite an API change that occurred in December 2015.
66
- unless params.keys.include?(:bid_type) || params.keys.include?(:bid_amount_local_micro)
67
- params = { bid_type: 'AUTO' }.merge!(params)
68
- end
69
-
70
- response = TwitterAds::Request.new(account.client, :get,
71
- resource, params: params).perform
72
- response.body[:data]
73
- end
74
-
75
- end
76
-
77
- end
78
- end
@@ -1,24 +0,0 @@
1
- {
2
- "data_type": "tweet_preview",
3
- "data": [
4
- {
5
- "platform": "web",
6
- "preview": " <div><img><div><div><div><a>AdsAPI</a><a>@AdsAPI</a></div></div><div>Hello World!</div><div><div><img><div><div></div><div><span> Ratings/pricing not available for preview </span><span> Ratings/pricing not available for preview </span></div><div></div> INSTALL </div></div></div><a><img></a><div><div><span></span><span>Promoted by AdsAPI</span></div></div></div></div>"
7
- },
8
- {
9
- "platform": "android",
10
- "preview": " <div><img><div><div><div><a>AdsAPI</a><a>@AdsAPI</a></div></div><div>Hello World!</div><div><div><img><div><div></div><div><span> Ratings/pricing not available for preview </span><span> Ratings/pricing not available for preview </span></div><div></div> INSTALL </div></div></div><a><img></a><div><div><span></span><span>Promoted by AdsAPI</span></div></div></div></div>"
11
- },
12
- {
13
- "platform": "iphone",
14
- "preview": " <div><img><div><div><div><a>AdsAPI</a><a>@AdsAPI</a></div></div><div>Hello World!</div><div><div><img><div><div></div><div><span> Ratings/pricing not available for preview </span><span> Ratings/pricing not available for preview </span></div><div></div> INSTALL </div></div></div><a><img></a><div><div><span></span><span>Promoted by AdsAPI</span></div></div></div></div>"
15
- }
16
- ],
17
- "request": {
18
- "params": {
19
- "status": "Hello World!",
20
- "card_id": "pfs",
21
- "account_id": "2iqph"
22
- }
23
- }
24
- }
@@ -1,103 +0,0 @@
1
- # frozen_string_literal: true
2
- # Copyright (C) 2019 Twitter, Inc.
3
-
4
- require 'spec_helper'
5
-
6
- describe TwitterAds::ReachEstimate do
7
-
8
- before(:each) do
9
- stub_fixture(:get, :accounts_all, "#{ADS_API}/accounts")
10
- stub_fixture(:get, :accounts_load, "#{ADS_API}/accounts/2iqph")
11
- end
12
-
13
- let(:client) do
14
- Client.new(
15
- Faker::Lorem.characters(15),
16
- Faker::Lorem.characters(40),
17
- "123456-#{Faker::Lorem.characters(40)}",
18
- Faker::Lorem.characters(40)
19
- )
20
- end
21
-
22
- let(:account) { client.accounts.first }
23
-
24
- describe '#fetch' do
25
-
26
- let!(:resource) { "#{ADS_API}/accounts/#{account.id}/reach_estimate" }
27
- let!(:rel_path) { "/#{TwitterAds::API_VERSION}/accounts/#{account.id}/reach_estimate" }
28
-
29
- before(:each) do
30
- stub_fixture(:get, :reach_estimate, /#{resource}\?.*/)
31
- end
32
-
33
- it 'creates proper get request with no optional parameters specified' do
34
- expected = { product_type: 'PROMOTED_TWEETS', objective: 'WEBSITE_CLICKS',
35
- campaign_daily_budget_amount_local_micro: 30000000, bid_type: 'AUTO' }
36
- args = [account.client, :get, rel_path, params: expected]
37
-
38
- expect(Request).to receive(:new).with(*args).and_call_original
39
- TwitterAds::ReachEstimate.fetch(account, 'PROMOTED_TWEETS', 'WEBSITE_CLICKS', 30000000)
40
- end
41
-
42
- it 'creates proper get request when optional paremeters are specified' do
43
-
44
- expected = { product_type: 'PROMOTED_TWEETS', objective: 'WEBSITE_CLICKS',
45
- campaign_daily_budget_amount_local_micro: 30000000,
46
- similar_to_followers_of_user: '12', gender: '2', bid_type: 'AUTO' }
47
- args = [account.client, :get, rel_path, params: expected]
48
-
49
- expect(Request).to receive(:new).with(*args).and_call_original
50
- TwitterAds::ReachEstimate.fetch(
51
- account, 'PROMOTED_TWEETS', 'WEBSITE_CLICKS', 30000000,
52
- similar_to_followers_of_user: '12', gender: '2')
53
-
54
- end
55
-
56
- context 'without bid_type specified' do
57
-
58
- it 'defaults bid_type to AUTO for backward compatibility' do
59
- expected = { product_type: 'PROMOTED_TWEETS', objective: 'WEBSITE_CLICKS',
60
- campaign_daily_budget_amount_local_micro: 30000000,
61
- bid_type: 'AUTO' }
62
- args = [account.client, :get, rel_path, params: expected]
63
-
64
- expect(Request).to receive(:new).with(*args).and_call_original
65
- TwitterAds::ReachEstimate.fetch(account, 'PROMOTED_TWEETS', 'WEBSITE_CLICKS', 30000000)
66
- end
67
-
68
- end
69
-
70
- context 'with bid_type specified' do
71
-
72
- it 'does not default bid_type to AUTO' do
73
- expected = { product_type: 'PROMOTED_TWEETS', objective: 'WEBSITE_CLICKS',
74
- bid_amount_local_micro: 3000000,
75
- campaign_daily_budget_amount_local_micro: 30000000, bid_type: 'MAX' }
76
- args = [account.client, :get, rel_path, params: expected]
77
-
78
- expect(Request).to receive(:new).with(*args).and_call_original
79
- TwitterAds::ReachEstimate.fetch(
80
- account, 'PROMOTED_TWEETS', 'WEBSITE_CLICKS', 30000000,
81
- bid_amount_local_micro: 3000000, bid_type: 'MAX')
82
- end
83
-
84
- end
85
-
86
- context 'with bid_amount_local_micro specified' do
87
-
88
- it 'does not default bid_type to AUTO' do
89
- expected = { product_type: 'PROMOTED_TWEETS', objective: 'WEBSITE_CLICKS',
90
- bid_amount_local_micro: 1500000,
91
- campaign_daily_budget_amount_local_micro: 30000000 }
92
- args = [account.client, :get, rel_path, params: expected]
93
-
94
- expect(Request).to receive(:new).with(*args).and_call_original
95
- TwitterAds::ReachEstimate.fetch(
96
- account, 'PROMOTED_TWEETS', 'WEBSITE_CLICKS', 30000000, bid_amount_local_micro: 1500000)
97
- end
98
-
99
- end
100
-
101
- end
102
-
103
- end