このコミットが含まれているのは:
2026-11-03 13:37:09 +09:00
コミット ad04c03e14
34個のファイルの変更、554行の追加、114行の削除
+39 -16
ファイルの表示
@@ -50,6 +50,8 @@ RSpec.describe 'Posts API', type: :request do
post:,
version_no: 1,
event_type: 'create',
event_id: create_event!(
event_type: 'posts.create', created_by_user: post.uploaded_user).id,
title: post.title,
url: post.url,
thumbnail_base: post.thumbnail_base,
@@ -1027,7 +1029,7 @@ RSpec.describe 'Posts API', type: :request do
it 'dry-runs without persisting posts or new tags' do
sign_in_as(member)
counts = [Post.count, Tag.count, TagName.count]
counts = [Post.count, Tag.count, TagName.count, event_rows.length]
post '/posts?dry=1', params: post_write_params(
title: 'dry-run post',
@@ -1043,7 +1045,7 @@ RSpec.describe 'Posts API', type: :request do
[{ 'name' => 'new_dry_run_tag',
'category' => 'character',
'section_literals' => [] }])
expect([Post.count, Tag.count, TagName.count]).to eq(counts)
expect([Post.count, Tag.count, TagName.count, event_rows.length]).to eq(counts)
end
it 'dry-runs an existing URL without validating its upload' do
@@ -2218,20 +2220,20 @@ RSpec.describe 'Posts API', type: :request do
def create_post_version! post, version_no:, event_type:, created_by_user:, created_at:
PostVersion.create!(
post:,
version_no:,
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:,
created_by_user:
)
event_id: create_event!(event_type: 'unknown').id,
post:,
version_no:,
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:,
created_by_user:)
end
let!(:v1) do
@@ -2559,6 +2561,7 @@ RSpec.describe 'Posts API', type: :request do
tags: 'spec_tag',
thumbnail: dummy_upload)
end.to change(PostVersion, :count).by(1)
.and change { event_rows.length }.by(1)
expect(response).to have_http_status(:created)
@@ -2570,6 +2573,13 @@ RSpec.describe 'Posts API', type: :request do
expect(version.url).to eq('https://example.com/versioned-post')
expect(version.created_by_user_id).to eq(member.id)
expect(version.tags).to eq(snapshot_tags(created_post))
event = event_rows.last
expect(event).to include(
'event_type' => 'posts.create', 'created_by_user_id' => member.id)
expect(version.event_id).to eq(event.fetch('id'))
tag_versions = TagVersion.where(tag_id: created_post.tags.select(:id))
expect(tag_versions).not_to be_empty
expect(tag_versions.pluck(:event_id).uniq).to eq([event.fetch('id')])
end
it 'creates next version on PUT /posts/:id when snapshot changes' do
@@ -2585,6 +2595,7 @@ RSpec.describe 'Posts API', type: :request do
title: 'updated title',
tags: 'spec_tag_2')
end.to change(PostVersion, :count).by(1)
.and change { event_rows.length }.by(1)
expect(response).to have_http_status(:ok)
@@ -2594,6 +2605,12 @@ RSpec.describe 'Posts API', type: :request do
expect(version.title).to eq('updated title')
expect(version.created_by_user_id).to eq(member.id)
expect(version.tags).to eq(snapshot_tags(post_record.reload))
event = event_rows.last
expect(event).to include(
'event_type' => 'posts.update', 'created_by_user_id' => member.id)
expect(version.event_id).to eq(event.fetch('id'))
tag_version = TagVersion.find_by!(tag_id: tag_name2.reload.tag_id, version_no: 1)
expect(tag_version.event_id).to eq(event.fetch('id'))
end
it 'does not create a new version on PUT /posts/:id when snapshot is unchanged' do
@@ -2602,6 +2619,7 @@ RSpec.describe 'Posts API', type: :request do
PostTag.create!(post: post_record, tag: Tag.no_deerjikist)
base_version = create_post_version_for!(post_record.reload)
events = event_rows
expect {
put "/posts/#{post_record.id}", params: post_write_params(
base_version_no: base_version.version_no,
@@ -2615,10 +2633,12 @@ RSpec.describe 'Posts API', type: :request do
expect(version.version_no).to eq(1)
expect(version.event_type).to eq('create')
expect(version.tags).to eq(snapshot_tags(post_record))
expect(event_rows).to eq(events)
end
it 'does not create a version when POST /posts is invalid' do
sign_in_as(member)
events = event_rows
expect do
post '/posts', params: post_write_params(
@@ -2629,11 +2649,13 @@ RSpec.describe 'Posts API', type: :request do
end.not_to change(PostVersion, :count)
expect(response).to have_http_status(:unprocessable_entity)
expect(event_rows).to eq(events)
end
it 'does not create a version when PUT /posts/:id is invalid' do
sign_in_as(member)
base_version = create_post_version_for!(post_record)
events = event_rows
expect do
put "/posts/#{post_record.id}", params: post_write_params(
@@ -2645,6 +2667,7 @@ RSpec.describe 'Posts API', type: :request do
end.not_to change(PostVersion, :count)
expect(response).to have_http_status(:unprocessable_entity)
expect(event_rows).to eq(events)
end
it 'rejects second-bearing original created timestamps on POST /posts' do