5002859fc8
#314 #314 #314 #314 #314 Co-authored-by: miteruzo <miteruzo@naver.com> Reviewed-on: #340
94 lines
2.5 KiB
Ruby
94 lines
2.5 KiB
Ruby
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
|