このコミットが含まれているのは:
@@ -42,6 +42,41 @@ RSpec.describe Youtube::Sync do
|
||||
end
|
||||
|
||||
describe '#sync!' do
|
||||
it 'groups created and updated post histories into one sync event' do
|
||||
allow(PostVersionRecorder).to receive(:record!).and_call_original
|
||||
allow(PostVersionRecorder).to receive(:ensure_snapshot!).and_call_original
|
||||
existing = create(:post, url: 'https://youtu.be/video-1', title: 'old title')
|
||||
allow(sync).to receive(:query_terms).and_return([])
|
||||
allow(sync).to receive(:playlist_ids).and_return(['PL123'])
|
||||
allow(client).to receive(:playlist_items).with(playlist_id: 'PL123', page_token: nil)
|
||||
.and_return('items' => [
|
||||
{ 'contentDetails' => { 'videoId' => 'video-1' } },
|
||||
{ 'contentDetails' => { 'videoId' => 'video-2' } }])
|
||||
allow(client).to receive(:videos).with(['video-1', 'video-2'])
|
||||
.and_return('items' => [
|
||||
youtube_video_item(id: 'video-1', title: 'updated', channel_id: 'UC_NONE'),
|
||||
youtube_video_item(id: 'video-2', title: 'created', channel_id: 'UC_NONE')])
|
||||
previous_post_ids = PostVersion.pluck(:id)
|
||||
previous_tag_ids = TagVersion.pluck(:id)
|
||||
|
||||
expect { sync.sync! }.to change { event_rows.length }.by(1)
|
||||
|
||||
event = event_rows.last
|
||||
expect(event).to include('event_type' => 'posts.sync', 'created_by_user_id' => nil)
|
||||
versions = PostVersion.where.not(id: previous_post_ids)
|
||||
created = Post.find_by!(url: 'https://www.youtube.com/watch?v=video-2')
|
||||
expect(versions.pluck(:post_id).uniq).to contain_exactly(existing.id, created.id)
|
||||
expect(versions.pluck(:event_type)).to include('create', 'update')
|
||||
expect(versions.pluck(:event_id).uniq).to eq([event.fetch('id')])
|
||||
tag_versions = TagVersion.where.not(id: previous_tag_ids)
|
||||
expect(tag_versions).not_to be_empty
|
||||
expect(tag_versions.pluck(:event_id).uniq).to eq([event.fetch('id')])
|
||||
|
||||
events = event_rows
|
||||
expect { sync.sync! }.not_to change(PostVersion, :count)
|
||||
expect(event_rows).to eq(events)
|
||||
end
|
||||
|
||||
it 'returns without fetching video details when no video ids are discovered' do
|
||||
allow(sync).to receive(:query_terms).and_return([])
|
||||
allow(sync).to receive(:playlist_ids).and_return([])
|
||||
|
||||
新しいイシューから参照
ユーザーをブロックする