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.
- 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
|