このコミットが含まれているのは:
2026-11-03 13:37:09 +09:00
コミット ad04c03e14
34個のファイルの変更、554行の追加、114行の削除
+43 -14
ファイルの表示
@@ -174,20 +174,20 @@ RSpec.describe 'nico:sync' do
def create_post_version_for!(post, version_no: 1, event_type: 'create', created_by_user: nil)
PostVersion.create!(
post: post,
version_no: version_no,
event_type: event_type,
title: post.title,
url: post.url,
thumbnail_base: post.thumbnail_base,
tags: snapshot_tags(post),
tags_json: post.snapshot_tags_json,
parent_post_ids: post.snapshot_parent_post_ids.join(' '),
original_created_from: post.original_created_from,
original_created_before: post.original_created_before,
created_at: Time.current,
created_by_user: created_by_user
)
event_id: create_event!(event_type: 'unknown').id,
post: post,
version_no: version_no,
event_type: event_type,
title: post.title,
url: post.url,
thumbnail_base: post.thumbnail_base,
tags: snapshot_tags(post),
tags_json: post.snapshot_tags_json,
parent_post_ids: post.snapshot_parent_post_ids.join(' '),
original_created_from: post.original_created_from,
original_created_before: post.original_created_before,
created_at: Time.current,
created_by_user: created_by_user)
end
it '新規 post 作成時に version 1 を作る' do
@@ -209,6 +209,7 @@ RSpec.describe 'nico:sync' do
expect {
run_rake_task('nico:sync')
}.to change(PostVersion, :count).by(1)
.and change { event_rows.length }.by(1)
post = Post.find_by!(url: 'https://www.nicovideo.jp/watch/sm9')
version = post.post_versions.order(:version_no).last
@@ -217,6 +218,32 @@ RSpec.describe 'nico:sync' do
expect(version.event_type).to eq('create')
expect(version.created_by_user).to be_nil
expect(version.tags).to eq(snapshot_tags(post.reload))
event = event_rows.last
expect(event).to include('event_type' => 'posts.sync', 'created_by_user_id' => nil)
expect(version.event_id).to eq(event.fetch('id'))
end
it 'groups created and updated post histories into one sync event' do
existing = create(:post, title: 'old', url: 'https://www.nicovideo.jp/watch/sm9')
stub_python([
{ 'code' => 'sm9', 'title' => 'updated', 'tags' => [] },
{ 'code' => 'sm10', 'title' => 'created', 'tags' => [] }])
allow(URI).to receive(:open).and_return(StringIO.new('<html></html>'))
previous_post_ids = PostVersion.pluck(:id)
previous_tag_ids = TagVersion.pluck(:id)
expect { run_rake_task('nico: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)
created = Post.find_by!(url: 'https://www.nicovideo.jp/watch/sm10')
versions = PostVersion.where.not(id: previous_post_ids)
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')])
end
it '既存 post の内容または tags が変わったとき update version を作る' do
@@ -282,6 +309,7 @@ RSpec.describe 'nico:sync' do
}])
allow(URI).to receive(:open).and_return(StringIO.new('<html></html>'))
events = event_rows
expect {
run_rake_task('nico:sync')
@@ -291,6 +319,7 @@ RSpec.describe 'nico:sync' do
expect(version.version_no).to eq(1)
expect(version.event_type).to eq('create')
expect(version.tags).to eq(snapshot_tags(post.reload))
expect(event_rows).to eq(events)
end
it '新規 nico tag に nico tag version を作る' do