yt 0.19.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -69,8 +69,8 @@ describe Yt::ContentOwner, :partner do
69
69
  expect(claim.id).to be_a String
70
70
  expect(claim.asset_id).to be_a String
71
71
  expect(claim.video_id).to be_a String
72
- expect(claim.status).to be_in Yt::Claim::STATUSES
73
- expect(claim.content_type).to be_in Yt::Claim::CONTENT_TYPES
72
+ expect(claim.status).to be_a String
73
+ expect(claim.content_type).to be_a String
74
74
  expect(claim.created_at).to be_a Time
75
75
  expect(claim).not_to be_third_party
76
76
  end
@@ -189,8 +189,8 @@ describe Yt::ContentOwner, :partner do
189
189
  expect(reference.audioswap_enabled?).to be_in [true, false]
190
190
  expect(reference.ignore_fp_match?).to be_in [true, false]
191
191
  expect(reference.urgent?).to be_in [true, false]
192
- expect(reference.status).to be_in Yt::Reference::STATUSES
193
- expect(reference.content_type).to be_in Yt::Reference::CONTENT_TYPES
192
+ expect(reference.status).to be_a String
193
+ expect(reference.content_type).to be_a String
194
194
  end
195
195
  end
196
196
 
@@ -57,6 +57,265 @@ describe Yt::Playlist, :partner do
57
57
  end
58
58
  end
59
59
 
60
+ describe 'views can be grouped by traffic source' do
61
+ let(:range) { {since: 4.days.ago, until: 3.days.ago} }
62
+ let(:keys) { Yt::Collections::Reports::TRAFFIC_SOURCES.keys }
63
+
64
+ specify 'with the :by option set to :traffic_source' do
65
+ views = playlist.views range.merge by: :traffic_source
66
+ expect(views.keys - keys).to be_empty
67
+ end
68
+ end
69
+
70
+ describe 'views can be grouped by playback location' do
71
+ let(:range) { {since: 4.days.ago, until: 3.days.ago} }
72
+ let(:keys) { Yt::Collections::Reports::PLAYBACK_LOCATIONS.keys }
73
+
74
+ specify 'with the :by option set to :playback_location' do
75
+ views = playlist.views range.merge by: :playback_location
76
+ expect(views.keys - keys).to be_empty
77
+ end
78
+ end
79
+
80
+ describe 'views can be grouped by related video' do
81
+ let(:range) { {since: 4.days.ago, until: 3.days.ago} }
82
+
83
+ specify 'with the :by option set to :related_video' do
84
+ views = playlist.views range.merge by: :related_video
85
+ expect(views.keys).to all(be_instance_of Yt::Video)
86
+ end
87
+ end
88
+
89
+ describe 'views can be grouped by video' do
90
+ let(:range) { {since: 4.days.ago, until: 3.days.ago} }
91
+
92
+ specify 'with the :by option set to :video' do
93
+ views = playlist.views range.merge by: :video
94
+ expect(views.keys).to all(be_instance_of Yt::Video)
95
+ end
96
+ end
97
+
98
+ describe 'views can be grouped by playlist' do
99
+ let(:range) { {since: 4.days.ago, until: 3.days.ago} }
100
+
101
+ specify 'with the :by option set to :playlist' do
102
+ views = playlist.views range.merge by: :playlist
103
+ expect(views.keys).to all(be_instance_of Yt::Playlist)
104
+ end
105
+ end
106
+
107
+ describe 'views can be grouped by device type' do
108
+ let(:range) { {since: 4.days.ago, until: 3.days.ago} }
109
+
110
+ specify 'with the :by option set to :device_type' do
111
+ views = playlist.views range.merge by: :device_type
112
+ expect(views.keys).to all(be_instance_of Symbol)
113
+ expect(views.values).to all(be_instance_of Float)
114
+ end
115
+ end
116
+
117
+ describe 'estimated minutes watched can be retrieved for a specific day' do
118
+ context 'in which the playlist was viewed' do
119
+ let(:views) { playlist.estimated_minutes_watched_on ENV['YT_TEST_PARTNER_PLAYLIST_DATE']}
120
+ it { expect(views).to be_a Float }
121
+ end
122
+
123
+ context 'in which the playlist was not viewed' do
124
+ let(:views) { playlist.estimated_minutes_watched_on 20.years.ago}
125
+ it { expect(views).to be_nil }
126
+ end
127
+ end
128
+
129
+ describe 'estimated minutes watched can be retrieved for a range of days' do
130
+ let(:date) { 4.days.ago }
131
+
132
+ specify 'with a given start (:since option)' do
133
+ expect(playlist.estimated_minutes_watched(since: date).keys.min).to eq date.to_date
134
+ end
135
+
136
+ specify 'with a given end (:until option)' do
137
+ expect(playlist.estimated_minutes_watched(until: date).keys.max).to eq date.to_date
138
+ end
139
+
140
+ specify 'with a given start (:from option)' do
141
+ expect(playlist.estimated_minutes_watched(from: date).keys.min).to eq date.to_date
142
+ end
143
+
144
+ specify 'with a given end (:to option)' do
145
+ expect(playlist.estimated_minutes_watched(to: date).keys.max).to eq date.to_date
146
+ end
147
+ end
148
+
149
+ describe 'estimated minutes watched can be grouped by day' do
150
+ let(:range) { {since: 4.days.ago.to_date, until: 3.days.ago.to_date} }
151
+ let(:keys) { range.values }
152
+
153
+ specify 'without a :by option (default)' do
154
+ minutes = playlist.estimated_minutes_watched range
155
+ expect(minutes.keys).to eq range.values
156
+ end
157
+
158
+ specify 'with the :by option set to :day' do
159
+ minutes = playlist.estimated_minutes_watched range.merge by: :day
160
+ expect(minutes.keys).to eq range.values
161
+ end
162
+ end
163
+
164
+ describe 'estimated minutes watched can be grouped by traffic source' do
165
+ let(:range) { {since: 4.days.ago, until: 3.days.ago} }
166
+ let(:keys) { Yt::Collections::Reports::TRAFFIC_SOURCES.keys }
167
+
168
+ specify 'with the :by option set to :traffic_source' do
169
+ minutes = playlist.estimated_minutes_watched range.merge by: :traffic_source
170
+ expect(minutes.keys - keys).to be_empty
171
+ end
172
+ end
173
+
174
+ describe 'estimated minutes watched can be grouped by playback location' do
175
+ let(:range) { {since: 4.days.ago, until: 3.days.ago} }
176
+ let(:keys) { Yt::Collections::Reports::PLAYBACK_LOCATIONS.keys }
177
+
178
+ specify 'with the :by option set to :playback_location' do
179
+ minutes = playlist.estimated_minutes_watched range.merge by: :playback_location
180
+ expect(minutes.keys - keys).to be_empty
181
+ end
182
+ end
183
+
184
+ describe 'estimated minutes watched can be grouped by related video' do
185
+ let(:range) { {since: 4.days.ago, until: 3.days.ago} }
186
+
187
+ specify 'with the :by option set to :related_video' do
188
+ minutes = playlist.estimated_minutes_watched range.merge by: :related_video
189
+ expect(minutes.keys).to all(be_instance_of Yt::Video)
190
+ end
191
+ end
192
+
193
+ describe 'estimated minutes watched can be grouped by video' do
194
+ let(:range) { {since: 4.days.ago, until: 3.days.ago} }
195
+
196
+ specify 'with the :by option set to :video' do
197
+ minutes = playlist.estimated_minutes_watched range.merge by: :video
198
+ expect(minutes.keys).to all(be_instance_of Yt::Video)
199
+ end
200
+ end
201
+
202
+ describe 'estimated minutes watched can be grouped by playlist' do
203
+ let(:range) { {since: 4.days.ago, until: 3.days.ago} }
204
+
205
+ specify 'with the :by option set to :playlist' do
206
+ minutes = playlist.estimated_minutes_watched range.merge by: :playlist
207
+ expect(minutes.keys).to all(be_instance_of Yt::Playlist)
208
+ end
209
+ end
210
+
211
+ describe 'estimated minutes watched can be grouped by device type' do
212
+ let(:range) { {since: 4.days.ago, until: 3.days.ago} }
213
+
214
+ specify 'with the :by option set to :device_type' do
215
+ minutes = playlist.estimated_minutes_watched range.merge by: :device_type
216
+ expect(minutes.keys).to all(be_instance_of Symbol)
217
+ expect(minutes.values).to all(be_instance_of Float)
218
+ end
219
+ end
220
+
221
+ describe 'viewer percentage can be retrieved for a range of days' do
222
+ let(:viewer_percentage) { playlist.viewer_percentage since: 1.year.ago, until: 10.days.ago}
223
+ it { expect(viewer_percentage).to be_a Hash }
224
+ end
225
+
226
+ describe 'viewer_percentage can be grouped by gender and age group' do
227
+ let(:range) { {since: 1.year.ago.to_date, until: 1.week.ago.to_date} }
228
+ let(:keys) { range.values }
229
+
230
+ specify 'without a :by option (default)' do
231
+ viewer_percentage = playlist.viewer_percentage range
232
+ expect(viewer_percentage.keys).to match_array [:female, :male]
233
+ expect(viewer_percentage[:female].keys - %w(65- 35-44 45-54 13-17 25-34 55-64 18-24)).to be_empty
234
+ expect(viewer_percentage[:female].values).to all(be_instance_of Float)
235
+ expect(viewer_percentage[:male].keys - %w(65- 35-44 45-54 13-17 25-34 55-64 18-24)).to be_empty
236
+ expect(viewer_percentage[:male].values).to all(be_instance_of Float)
237
+ end
238
+
239
+ specify 'with the :by option set to :gender_age_group' do
240
+ viewer_percentage = playlist.viewer_percentage range.merge by: :gender_age_group
241
+ expect(viewer_percentage.keys).to match_array [:female, :male]
242
+ expect(viewer_percentage[:female].keys - %w(65- 35-44 45-54 13-17 25-34 55-64 18-24)).to be_empty
243
+ expect(viewer_percentage[:female].values).to all(be_instance_of Float)
244
+ expect(viewer_percentage[:male].keys - %w(65- 35-44 45-54 13-17 25-34 55-64 18-24)).to be_empty
245
+ expect(viewer_percentage[:male].values).to all(be_instance_of Float)
246
+ end
247
+ end
248
+
249
+ describe 'viewer_percentage can be grouped by gender' do
250
+ let(:range) { {since: 1.year.ago.to_date, until: 1.week.ago.to_date} }
251
+ let(:keys) { range.values }
252
+
253
+ specify 'with the :by option set to :gender' do
254
+ viewer_percentage = playlist.viewer_percentage range.merge by: :gender
255
+ expect(viewer_percentage.keys).to match_array [:female, :male]
256
+ expect(viewer_percentage[:female]).to be_a Float
257
+ expect(viewer_percentage[:male]).to be_a Float
258
+ end
259
+ end
260
+
261
+ describe 'viewer_percentage can be grouped by age group' do
262
+ let(:range) { {since: 1.year.ago.to_date, until: 1.week.ago.to_date} }
263
+ let(:keys) { range.values }
264
+
265
+ specify 'with the :by option set to :age_group' do
266
+ viewer_percentage = playlist.viewer_percentage range.merge by: :age_group
267
+ expect(viewer_percentage.keys - %w(65- 35-44 45-54 13-17 25-34 55-64 18-24)).to be_empty
268
+ expect(viewer_percentage.values).to all(be_instance_of Float)
269
+ end
270
+ end
271
+
272
+ describe 'average view duration can be retrieved for a specific day' do
273
+ context 'in which the playlist was partnered' do
274
+ let(:average_view_duration) { playlist.average_view_duration_on 5.days.ago}
275
+ it { expect(average_view_duration).to be_a Float }
276
+ end
277
+
278
+ context 'in which the playlist was not partnered' do
279
+ let(:average_view_duration) { playlist.average_view_duration_on 20.years.ago}
280
+ it { expect(average_view_duration).to be_nil }
281
+ end
282
+ end
283
+
284
+ describe 'average view duration can be retrieved for a range of days' do
285
+ let(:date) { 4.days.ago }
286
+
287
+ specify 'with a given start (:since option)' do
288
+ expect(playlist.average_view_duration(since: date).keys.min).to eq date.to_date
289
+ end
290
+
291
+ specify 'with a given end (:until option)' do
292
+ expect(playlist.average_view_duration(until: date).keys.max).to eq date.to_date
293
+ end
294
+
295
+ specify 'with a given start (:from option)' do
296
+ expect(playlist.average_view_duration(from: date).keys.min).to eq date.to_date
297
+ end
298
+
299
+ specify 'with a given end (:to option)' do
300
+ expect(playlist.average_view_duration(to: date).keys.max).to eq date.to_date
301
+ end
302
+ end
303
+
304
+ describe 'average view duration can be grouped by day' do
305
+ let(:range) { {since: 4.days.ago.to_date, until: 3.days.ago.to_date} }
306
+ let(:keys) { range.values }
307
+
308
+ specify 'without a :by option (default)' do
309
+ average_view_duration = playlist.average_view_duration range
310
+ expect(average_view_duration.keys).to eq range.values
311
+ end
312
+
313
+ specify 'with the :by option set to :day' do
314
+ average_view_duration = playlist.average_view_duration range.merge by: :day
315
+ expect(average_view_duration.keys).to eq range.values
316
+ end
317
+ end
318
+
60
319
  describe 'playlist starts can be retrieved for a specific day' do
61
320
  context 'in which the playlist was viewed' do
62
321
  let(:playlist_starts) { playlist.playlist_starts_on ENV['YT_TEST_PARTNER_PLAYLIST_DATE']}
@@ -565,6 +565,44 @@ describe Yt::Video, :partner do
565
565
  end
566
566
  end
567
567
 
568
+ describe 'estimated minutes watched can be grouped by playback location' do
569
+ let(:range) { {since: 4.days.ago, until: 3.days.ago} }
570
+ let(:keys) { Yt::Collections::Reports::PLAYBACK_LOCATIONS.keys }
571
+
572
+ specify 'with the :by option set to :playback_location' do
573
+ estimated_minutes_watched = video.estimated_minutes_watched range.merge by: :playback_location
574
+ expect(estimated_minutes_watched.keys - keys).to be_empty
575
+ end
576
+ end
577
+
578
+ describe 'estimated minutes watched can be grouped by embedded player location' do
579
+ let(:range) { {since: 4.days.ago, until: 3.days.ago} }
580
+
581
+ specify 'with the :by option set to :embedded_player_location' do
582
+ estimated_minutes_watched = video.estimated_minutes_watched range.merge by: :embedded_player_location
583
+ expect(estimated_minutes_watched).not_to be_empty
584
+ end
585
+ end
586
+
587
+ describe 'estimated minutes watched can be grouped by related video' do
588
+ let(:range) { {since: 4.days.ago, until: 3.days.ago} }
589
+
590
+ specify 'with the :by option set to :related_video' do
591
+ estimated_minutes_watched = video.estimated_minutes_watched range.merge by: :related_video
592
+ expect(estimated_minutes_watched.keys).to all(be_instance_of Yt::Video)
593
+ end
594
+ end
595
+
596
+ describe 'estimated minutes watched can be grouped by device type' do
597
+ let(:range) { {since: 4.days.ago, until: 3.days.ago} }
598
+
599
+ specify 'with the :by option set to :device_type' do
600
+ estimated_minutes_watched = video.estimated_minutes_watched range.merge by: :device_type
601
+ expect(estimated_minutes_watched.keys).to all(be_instance_of Symbol)
602
+ expect(estimated_minutes_watched.values).to all(be_instance_of Float)
603
+ end
604
+ end
605
+
568
606
  describe 'average view duration can be retrieved for a specific day' do
569
607
  context 'in which the video was partnered' do
570
608
  let(:average_view_duration) { video.average_view_duration_on 5.days.ago}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.0
4
+ version: 0.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Claudio Baccigalupo