yt 0.19.0 → 0.20.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +17 -0
- data/README.md +1 -1
- data/lib/yt/associations/has_reports.rb +80 -44
- data/lib/yt/models/annotation.rb +1 -0
- data/lib/yt/models/asset.rb +0 -2
- data/lib/yt/models/channel.rb +186 -119
- data/lib/yt/models/claim.rb +0 -5
- data/lib/yt/models/content_owner_detail.rb +1 -25
- data/lib/yt/models/id.rb +1 -0
- data/lib/yt/models/playlist.rb +124 -38
- data/lib/yt/models/playlist_item.rb +62 -16
- data/lib/yt/models/reference.rb +0 -6
- data/lib/yt/models/resource.rb +11 -0
- data/lib/yt/models/snippet.rb +6 -96
- data/lib/yt/models/statistics_set.rb +1 -19
- data/lib/yt/models/status.rb +0 -2
- data/lib/yt/models/video.rb +24 -36
- data/lib/yt/version.rb +1 -1
- data/spec/models/channel_spec.rb +107 -0
- data/spec/models/content_owner_detail_spec.rb +0 -24
- data/spec/models/playlist_item_spec.rb +95 -6
- data/spec/models/playlist_spec.rb +87 -0
- data/spec/models/snippet_spec.rb +1 -118
- data/spec/models/statistics_set_spec.rb +1 -64
- data/spec/models/video_spec.rb +112 -0
- data/spec/requests/as_account/channel_spec.rb +1 -1
- data/spec/requests/as_account/playlist_item_spec.rb +1 -1
- data/spec/requests/as_account/playlist_spec.rb +1 -1
- data/spec/requests/as_account/video_spec.rb +2 -2
- data/spec/requests/as_content_owner/content_owner_spec.rb +4 -4
- data/spec/requests/as_content_owner/playlist_spec.rb +259 -0
- data/spec/requests/as_content_owner/video_spec.rb +38 -0
- metadata +1 -1
@@ -4,6 +4,93 @@ require 'yt/models/playlist'
|
|
4
4
|
describe Yt::Playlist do
|
5
5
|
subject(:playlist) { Yt::Playlist.new attrs }
|
6
6
|
|
7
|
+
|
8
|
+
describe '#title' do
|
9
|
+
context 'given a snippet with a title' do
|
10
|
+
let(:attrs) { {snippet: {"title"=>"Fullscreen"}} }
|
11
|
+
it { expect(playlist.title).to eq 'Fullscreen' }
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'given a snippet without a title' do
|
15
|
+
let(:attrs) { {snippet: {}} }
|
16
|
+
it { expect(playlist.title).to eq '' }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#published_at' do
|
21
|
+
context 'given a snippet with a timestamp' do # always returned by YouTube
|
22
|
+
let(:attrs) { {snippet: {"publishedAt"=>"2014-04-22T19:14:49.000Z"}} }
|
23
|
+
it { expect(playlist.published_at.year).to be 2014 }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#description' do
|
28
|
+
context 'given a snippet with a description' do
|
29
|
+
let(:attrs) { {snippet: {"description"=>"The first media company for the connected generation."}} }
|
30
|
+
it { expect(playlist.description).to eq 'The first media company for the connected generation.' }
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'given a snippet without a description' do
|
34
|
+
let(:attrs) { {snippet: {}} }
|
35
|
+
it { expect(playlist.description).to eq '' }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe '#tags' do
|
40
|
+
context 'given a snippet with tags' do
|
41
|
+
let(:attrs) { {snippet: {"tags"=>["promotion", "new media"]}} }
|
42
|
+
it { expect(playlist.tags).to eq ["promotion", "new media"] }
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'given a snippet without tags' do
|
46
|
+
let(:attrs) { {snippet: {}} }
|
47
|
+
it { expect(playlist.tags).to eq [] }
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe '#thumbnail_url' do
|
52
|
+
context 'given a snippet with thumbnails' do
|
53
|
+
let(:attrs) { {snippet: {"thumbnails"=>{
|
54
|
+
"default"=>{"url"=> "http://example.com/88x88.jpg"},
|
55
|
+
"medium"=>{"url"=> "http://example.com/240x240.jpg"},
|
56
|
+
}}} }
|
57
|
+
it { expect(playlist.thumbnail_url).to eq 'http://example.com/88x88.jpg' }
|
58
|
+
it { expect(playlist.thumbnail_url 'default').to eq 'http://example.com/88x88.jpg' }
|
59
|
+
it { expect(playlist.thumbnail_url :default).to eq 'http://example.com/88x88.jpg' }
|
60
|
+
it { expect(playlist.thumbnail_url :medium).to eq 'http://example.com/240x240.jpg' }
|
61
|
+
it { expect(playlist.thumbnail_url :large).to be_nil }
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'given a snippet without thumbnails' do
|
65
|
+
let(:attrs) { {snippet: {}} }
|
66
|
+
it { expect(playlist.thumbnail_url).to be_nil }
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe '#channel_id' do
|
71
|
+
context 'given a snippet with a channel ID' do
|
72
|
+
let(:attrs) { {snippet: {"channelId"=>"UCxO1tY8h1AhOz0T4ENwmpow"}} }
|
73
|
+
it { expect(playlist.channel_id).to eq 'UCxO1tY8h1AhOz0T4ENwmpow' }
|
74
|
+
end
|
75
|
+
|
76
|
+
context 'given a snippet without a channel ID' do
|
77
|
+
let(:attrs) { {snippet: {}} }
|
78
|
+
it { expect(playlist.channel_id).to be_nil }
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe '#channel_title' do
|
83
|
+
context 'given a snippet with a channel title' do
|
84
|
+
let(:attrs) { {snippet: {"channelTitle"=>"Fullscreen"}} }
|
85
|
+
it { expect(playlist.channel_title).to eq 'Fullscreen' }
|
86
|
+
end
|
87
|
+
|
88
|
+
context 'given a snippet without a channel title' do
|
89
|
+
let(:attrs) { {snippet: {}} }
|
90
|
+
it { expect(playlist.channel_title).to be_nil }
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
7
94
|
describe '#exists?' do
|
8
95
|
context 'given a playlist with an id' do
|
9
96
|
let(:attrs) { {id: 'PLSWYkYzOr'} }
|
data/spec/models/snippet_spec.rb
CHANGED
@@ -3,7 +3,6 @@ require 'yt/models/snippet'
|
|
3
3
|
|
4
4
|
describe Yt::Snippet do
|
5
5
|
subject(:snippet) { Yt::Snippet.new data: data }
|
6
|
-
let(:data) { {} }
|
7
6
|
|
8
7
|
describe '#data' do
|
9
8
|
let(:data) { {"key"=>"value"} }
|
@@ -11,120 +10,4 @@ describe Yt::Snippet do
|
|
11
10
|
expect(snippet.data).to eq data
|
12
11
|
end
|
13
12
|
end
|
14
|
-
|
15
|
-
describe '#title' do
|
16
|
-
context 'given a snippet with a title' do
|
17
|
-
let(:data) { {"title"=>"Fullscreen"} }
|
18
|
-
it { expect(snippet.title).to eq 'Fullscreen' }
|
19
|
-
end
|
20
|
-
|
21
|
-
context 'given a snippet without a title' do
|
22
|
-
it { expect(snippet.title).to eq '' }
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe '#published_at' do
|
27
|
-
context 'given a snippet with a timestamp' do # always returned by YouTube
|
28
|
-
let(:data) { {"publishedAt"=>"2014-04-22T19:14:49.000Z"} }
|
29
|
-
it { expect(snippet.published_at.year).to be 2014 }
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe '#description' do
|
34
|
-
context 'given a snippet with a description' do
|
35
|
-
let(:data) { {"description"=>"The first media company for the connected generation."} }
|
36
|
-
it { expect(snippet.description).to eq 'The first media company for the connected generation.' }
|
37
|
-
end
|
38
|
-
|
39
|
-
context 'given a snippet without a description' do
|
40
|
-
it { expect(snippet.description).to eq '' }
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe '#tags' do
|
45
|
-
context 'given a snippet with tags' do
|
46
|
-
let(:data) { {"tags"=>["promotion", "new media"]} }
|
47
|
-
it { expect(snippet.tags).to eq ["promotion", "new media"] }
|
48
|
-
end
|
49
|
-
|
50
|
-
context 'given a snippet without tags' do
|
51
|
-
it { expect(snippet.tags).to eq [] }
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe '#thumbnail_url' do
|
56
|
-
context 'given a snippet with thumbnails' do
|
57
|
-
let(:data) { {"thumbnails"=>{
|
58
|
-
"default"=>{"url"=> "http://example.com/88x88.jpg"},
|
59
|
-
"medium"=>{"url"=> "http://example.com/240x240.jpg"},
|
60
|
-
}} }
|
61
|
-
it { expect(snippet.thumbnail_url).to eq 'http://example.com/88x88.jpg' }
|
62
|
-
it { expect(snippet.thumbnail_url 'default').to eq 'http://example.com/88x88.jpg' }
|
63
|
-
it { expect(snippet.thumbnail_url :default).to eq 'http://example.com/88x88.jpg' }
|
64
|
-
it { expect(snippet.thumbnail_url :medium).to eq 'http://example.com/240x240.jpg' }
|
65
|
-
it { expect(snippet.thumbnail_url :large).to be_nil }
|
66
|
-
end
|
67
|
-
|
68
|
-
context 'given a snippet without thumbnails' do
|
69
|
-
it { expect(snippet.thumbnail_url).to be_nil }
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe '#channel_id' do
|
74
|
-
context 'given a snippet with a channel ID' do
|
75
|
-
let(:data) { {"channelId"=>"UCxO1tY8h1AhOz0T4ENwmpow"} }
|
76
|
-
it { expect(snippet.channel_id).to eq 'UCxO1tY8h1AhOz0T4ENwmpow' }
|
77
|
-
end
|
78
|
-
|
79
|
-
context 'given a snippet without a channel ID' do
|
80
|
-
it { expect(snippet.channel_id).to be_nil }
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
describe '#channel_title' do
|
85
|
-
context 'given a snippet with a channel title' do
|
86
|
-
let(:data) { {"channelTitle"=>"Fullscreen"} }
|
87
|
-
it { expect(snippet.channel_title).to eq 'Fullscreen' }
|
88
|
-
end
|
89
|
-
|
90
|
-
context 'given a snippet without a channel title' do
|
91
|
-
it { expect(snippet.channel_title).to be_nil }
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
describe '#category_id' do
|
96
|
-
context 'given a snippet with a category ID' do
|
97
|
-
let(:data) { {"categoryId"=>"22"} }
|
98
|
-
it { expect(snippet.category_id).to eq '22' }
|
99
|
-
end
|
100
|
-
|
101
|
-
context 'given a snippet without a category ID' do
|
102
|
-
it { expect(snippet.category_id).to be_nil }
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
describe '#live_broadcast_content' do
|
107
|
-
context 'given a snippet with live broadcast content' do
|
108
|
-
let(:data) { {"liveBroadcastContent"=>"live"} }
|
109
|
-
it { expect(snippet.live_broadcast_content).to eq 'live' }
|
110
|
-
end
|
111
|
-
|
112
|
-
context 'given a snippet without live broadcast content' do
|
113
|
-
it { expect(snippet.live_broadcast_content).to be_nil }
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
describe '#video_id and #video' do
|
118
|
-
context 'given a snippet with a video resource' do
|
119
|
-
let(:data) { {"resourceId"=>{"kind"=>"youtube#video","videoId"=>"W4GhTprSsOY"}} }
|
120
|
-
it { expect(snippet.video_id).to eq 'W4GhTprSsOY' }
|
121
|
-
it { expect(snippet.video).to be_a Yt::Models::Video }
|
122
|
-
it { expect(snippet.video.id).to eq 'W4GhTprSsOY' }
|
123
|
-
end
|
124
|
-
|
125
|
-
context 'given a snippet without a video resource' do
|
126
|
-
it { expect(snippet.video_id).to be_nil }
|
127
|
-
it { expect(snippet.video).to be_nil }
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
13
|
+
end
|
@@ -3,7 +3,6 @@ require 'yt/models/statistics_set'
|
|
3
3
|
|
4
4
|
describe Yt::StatisticsSet do
|
5
5
|
subject(:statistics_set) { Yt::StatisticsSet.new data: data }
|
6
|
-
let(:value) { 42 }
|
7
6
|
|
8
7
|
describe '#data' do
|
9
8
|
let(:data) { {"key"=>"value"} }
|
@@ -11,66 +10,4 @@ describe Yt::StatisticsSet do
|
|
11
10
|
expect(statistics_set.data).to eq data
|
12
11
|
end
|
13
12
|
end
|
14
|
-
|
15
|
-
# TODO: Remove these specs when these methods are tested in video, channel, ..
|
16
|
-
describe '#view_count' do
|
17
|
-
context 'given a video with views' do
|
18
|
-
let(:data) { {"viewCount"=>value} }
|
19
|
-
it { expect(statistics_set.view_count).to be value }
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe '#comment_count' do
|
24
|
-
context 'given a video with comments' do
|
25
|
-
let(:data) { {"commentCount"=>value} }
|
26
|
-
it { expect(statistics_set.comment_count).to be value }
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe '#like_count' do
|
31
|
-
context 'given a video with likes' do
|
32
|
-
let(:data) { {"likeCount"=>value} }
|
33
|
-
it { expect(statistics_set.like_count).to be value }
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe '#dislike_count' do
|
38
|
-
context 'given a video with dislikes' do
|
39
|
-
let(:data) { {"dislikeCount"=>value} }
|
40
|
-
it { expect(statistics_set.dislike_count).to be value }
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe '#favorite_count' do
|
45
|
-
context 'given a video with favorites' do
|
46
|
-
let(:data) { {"favoriteCount"=>value} }
|
47
|
-
it { expect(statistics_set.favorite_count).to be value }
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
describe '#video_count' do
|
52
|
-
context 'given a video with videos' do
|
53
|
-
let(:data) { {"videoCount"=>value} }
|
54
|
-
it { expect(statistics_set.video_count).to be value }
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
describe '#subscriber_count' do
|
59
|
-
context 'given a video with subscribers' do
|
60
|
-
let(:data) { {"subscriberCount"=>value} }
|
61
|
-
it { expect(statistics_set.subscriber_count).to be value }
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
describe '#subscriber_count_visible?' do
|
66
|
-
context 'given a video with publicly visible subscribers' do
|
67
|
-
let(:data) { {"hiddenSubscriberCount"=>false} }
|
68
|
-
it { expect(statistics_set).to be_subscriber_count_visible }
|
69
|
-
end
|
70
|
-
|
71
|
-
context 'given a video with hidden subscribers' do
|
72
|
-
let(:data) { {"hiddenSubscriberCount"=>true} }
|
73
|
-
it { expect(statistics_set).not_to be_subscriber_count_visible }
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
13
|
+
end
|
data/spec/models/video_spec.rb
CHANGED
@@ -11,6 +11,118 @@ describe Yt::Video do
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
+
|
15
|
+
describe '#title' do
|
16
|
+
context 'given a snippet with a title' do
|
17
|
+
let(:attrs) { {snippet: {"title"=>"Fullscreen Creator Platform"}} }
|
18
|
+
it { expect(video.title).to eq 'Fullscreen Creator Platform' }
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'given a snippet without a title' do
|
22
|
+
let(:attrs) { {snippet: {}} }
|
23
|
+
it { expect(video.title).to eq '' }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#description' do
|
28
|
+
context 'given a snippet with a description' do
|
29
|
+
let(:attrs) { {snippet: {"description"=>"A cool video."}} }
|
30
|
+
it { expect(video.description).to eq 'A cool video.' }
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'given a snippet without a description' do
|
34
|
+
let(:attrs) { {snippet: {}} }
|
35
|
+
it { expect(video.description).to eq '' }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe '#thumbnail_url' do
|
40
|
+
context 'given a snippet with thumbnails' do
|
41
|
+
let(:attrs) { {snippet: {"thumbnails"=>{
|
42
|
+
"default"=>{"url"=> "http://example.com/120x90.jpg"},
|
43
|
+
"medium"=>{"url"=> "http://example.com/320x180.jpg"},
|
44
|
+
}}} }
|
45
|
+
it { expect(video.thumbnail_url).to eq 'http://example.com/120x90.jpg' }
|
46
|
+
it { expect(video.thumbnail_url 'default').to eq 'http://example.com/120x90.jpg' }
|
47
|
+
it { expect(video.thumbnail_url :default).to eq 'http://example.com/120x90.jpg' }
|
48
|
+
it { expect(video.thumbnail_url :medium).to eq 'http://example.com/320x180.jpg' }
|
49
|
+
it { expect(video.thumbnail_url :high).to be_nil }
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'given a snippet without thumbnails' do
|
53
|
+
let(:attrs) { {snippet: {}} }
|
54
|
+
it { expect(video.thumbnail_url).to be_nil }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '#published_at' do
|
59
|
+
context 'given a snippet with a timestamp' do
|
60
|
+
let(:attrs) { {snippet: {"publishedAt"=>"2014-04-22T19:14:49.000Z"}} }
|
61
|
+
it { expect(video.published_at.year).to be 2014 }
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe '#channel_id' do
|
66
|
+
context 'given a snippet with a channel ID' do
|
67
|
+
let(:attrs) { {snippet: {"channelId"=>"UCxO1tY8h1AhOz0T4ENwmpow"}} }
|
68
|
+
it { expect(video.channel_id).to eq 'UCxO1tY8h1AhOz0T4ENwmpow' }
|
69
|
+
end
|
70
|
+
|
71
|
+
context 'given a snippet without a channel ID' do
|
72
|
+
let(:attrs) { {snippet: {}} }
|
73
|
+
it { expect(video.channel_id).to be_nil }
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe '#channel_title' do
|
78
|
+
context 'given a snippet with a channel title' do
|
79
|
+
let(:attrs) { {snippet: {"channelTitle"=>"Fullscreen"}} }
|
80
|
+
it { expect(video.channel_title).to eq 'Fullscreen' }
|
81
|
+
end
|
82
|
+
|
83
|
+
context 'given a snippet without a channel title' do
|
84
|
+
let(:attrs) { {snippet: {}} }
|
85
|
+
it { expect(video.channel_title).to be_nil }
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe '#live_broadcast_content' do
|
90
|
+
context 'given a snippet with live broadcast content' do
|
91
|
+
let(:attrs) { {snippet: {"liveBroadcastContent"=>"live"}} }
|
92
|
+
it { expect(video.live_broadcast_content).to eq 'live' }
|
93
|
+
end
|
94
|
+
|
95
|
+
context 'given a snippet without live broadcast content' do
|
96
|
+
let(:attrs) { {snippet: {}} }
|
97
|
+
it { expect(video.live_broadcast_content).to be_nil }
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe '#tags' do
|
102
|
+
context 'given a snippet with tags' do
|
103
|
+
let(:attrs) { {snippet: {"tags"=>["promotion", "new media"]}} }
|
104
|
+
it { expect(video.tags).to eq ["promotion", "new media"] }
|
105
|
+
end
|
106
|
+
|
107
|
+
context 'given a snippet without tags' do
|
108
|
+
let(:attrs) { {snippet: {}} }
|
109
|
+
it { expect(video.tags).to eq [] }
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe '#category_id' do
|
114
|
+
context 'given a snippet with a category ID' do
|
115
|
+
let(:attrs) { {snippet: {"categoryId"=>"22"}} }
|
116
|
+
it { expect(video.category_id).to eq '22' }
|
117
|
+
end
|
118
|
+
|
119
|
+
context 'given a snippet without a category ID' do
|
120
|
+
let(:attrs) { {snippet: {}} }
|
121
|
+
it { expect(video.category_id).to be_nil }
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
|
14
126
|
describe '#deleted?' do
|
15
127
|
context 'given fetching a status returns uploadStatus "deleted"' do
|
16
128
|
let(:attrs) { {status: {"uploadStatus"=>"deleted"}} }
|
@@ -13,7 +13,7 @@ describe Yt::Channel, :device_app do
|
|
13
13
|
expect(channel.description).to be_a String
|
14
14
|
expect(channel.thumbnail_url).to be_a String
|
15
15
|
expect(channel.published_at).to be_a Time
|
16
|
-
expect(channel.privacy_status).to
|
16
|
+
expect(channel.privacy_status).to be_a String
|
17
17
|
expect(channel.view_count).to be_an Integer
|
18
18
|
expect(channel.comment_count).to be_an Integer
|
19
19
|
expect(channel.video_count).to be_an Integer
|
@@ -18,7 +18,7 @@ describe Yt::PlaylistItem, :device_app do
|
|
18
18
|
expect(item.position).to be_an Integer
|
19
19
|
expect(item.video_id).to be_a String
|
20
20
|
expect(item.video).to be_a Yt::Video
|
21
|
-
expect(item.privacy_status).to
|
21
|
+
expect(item.privacy_status).to be_a String
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -17,7 +17,7 @@ describe Yt::Playlist, :device_app do
|
|
17
17
|
expect(playlist.tags).to be_an Array
|
18
18
|
expect(playlist.channel_id).to be_a String
|
19
19
|
expect(playlist.channel_title).to be_a String
|
20
|
-
expect(playlist.privacy_status).to
|
20
|
+
expect(playlist.privacy_status).to be_a String
|
21
21
|
end
|
22
22
|
|
23
23
|
it { expect(playlist.playlist_items.first).to be_a Yt::PlaylistItem }
|
@@ -16,12 +16,12 @@ describe Yt::Video, :device_app do
|
|
16
16
|
expect(video.description).to be_a String
|
17
17
|
expect(video.thumbnail_url).to be_a String
|
18
18
|
expect(video.published_at).to be_a Time
|
19
|
-
expect(video.privacy_status).to
|
19
|
+
expect(video.privacy_status).to be_a String
|
20
20
|
expect(video.tags).to be_an Array
|
21
21
|
expect(video.channel_id).to be_a String
|
22
22
|
expect(video.channel_title).to be_a String
|
23
23
|
expect(video.category_id).to be_a String
|
24
|
-
expect(video.live_broadcast_content).to
|
24
|
+
expect(video.live_broadcast_content).to be_a String
|
25
25
|
expect(video.view_count).to be_an Integer
|
26
26
|
expect(video.like_count).to be_an Integer
|
27
27
|
expect(video.dislike_count).to be_an Integer
|