#314 #314 #314 #314 #314 Co-authored-by: miteruzo <miteruzo@naver.com> Reviewed-on: #340
This commit was merged in pull request #340.
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Youtube::VideoItem do
|
||||
describe '#initialize' do
|
||||
it 'extracts fields from YouTube video API item' do
|
||||
item = {
|
||||
'id' => 'video-1',
|
||||
'snippet' => {
|
||||
'title' => 'テスト動画',
|
||||
'channelId' => 'UC123',
|
||||
'publishedAt' => '2026-05-01T12:34:56Z',
|
||||
'tags' => ['tag-a', 'tag-b'],
|
||||
'thumbnails' => {
|
||||
'high' => {
|
||||
'url' => 'https://img.youtube.com/high.jpg'
|
||||
},
|
||||
'medium' => {
|
||||
'url' => 'https://img.youtube.com/medium.jpg'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
video = described_class.new(item)
|
||||
|
||||
expect(video.id).to eq('video-1')
|
||||
expect(video.title).to eq('テスト動画')
|
||||
expect(video.channel_id).to eq('UC123')
|
||||
expect(video.published_at).to eq(Time.iso8601('2026-05-01T12:34:56Z'))
|
||||
expect(video.thumbnail_url).to eq('https://img.youtube.com/high.jpg')
|
||||
expect(video.raw_tags).to eq(['tag-a', 'tag-b'])
|
||||
expect(video.url).to eq('https://www.youtube.com/watch?v=video-1')
|
||||
end
|
||||
|
||||
it 'uses highest priority thumbnail' do
|
||||
item = {
|
||||
'id' => 'video-1',
|
||||
'snippet' => {
|
||||
'title' => 'テスト動画',
|
||||
'channelId' => 'UC123',
|
||||
'publishedAt' => '2026-05-01T12:34:56Z',
|
||||
'thumbnails' => {
|
||||
'default' => {
|
||||
'url' => 'https://img.youtube.com/default.jpg'
|
||||
},
|
||||
'standard' => {
|
||||
'url' => 'https://img.youtube.com/standard.jpg'
|
||||
},
|
||||
'maxres' => {
|
||||
'url' => 'https://img.youtube.com/maxres.jpg'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
video = described_class.new(item)
|
||||
|
||||
expect(video.thumbnail_url).to eq('https://img.youtube.com/maxres.jpg')
|
||||
end
|
||||
|
||||
it 'falls back to empty raw tags' do
|
||||
item = {
|
||||
'id' => 'video-1',
|
||||
'snippet' => {
|
||||
'title' => 'テスト動画',
|
||||
'channelId' => 'UC123',
|
||||
'publishedAt' => '2026-05-01T12:34:56Z',
|
||||
'thumbnails' => {}
|
||||
}
|
||||
}
|
||||
|
||||
video = described_class.new(item)
|
||||
|
||||
expect(video.raw_tags).to eq([])
|
||||
end
|
||||
|
||||
it 'returns nil thumbnail when no thumbnail exists' do
|
||||
item = {
|
||||
'id' => 'video-1',
|
||||
'snippet' => {
|
||||
'title' => 'テスト動画',
|
||||
'channelId' => 'UC123',
|
||||
'publishedAt' => '2026-05-01T12:34:56Z',
|
||||
'thumbnails' => {}
|
||||
}
|
||||
}
|
||||
|
||||
video = described_class.new(item)
|
||||
|
||||
expect(video.thumbnail_url).to be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user