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