このコミットが含まれているのは:
2026-10-15 20:20:00 +09:00
コミット 1e464107a8
36個のファイルの変更、566行の追加、2082行の削除
+35 -63
ファイルの表示
@@ -19,7 +19,7 @@ RSpec.describe 'Wiki API', type: :request do
deprecated_at: Time.zone.local(2026, 6, 1))
end
let!(:page) do
seed_wiki_page(
seed_description(
tag_name: tn,
body: 'init',
created_by_user: user,
@@ -113,9 +113,9 @@ RSpec.describe 'Wiki API', type: :request do
it "rejects frozen creation of #{ title } without history writes" do
expect do
post endpoint, params: { title:, body: 'initial' }, headers: auth_headers(member)
end.to change(WikiPage, :count).by(0)
.and change(WikiRevision, :count).by(0)
.and change(WikiVersion, :count).by(0)
end.to change(TagDescription, :count).by(0)
.and change(TagDescriptionVersion, :count).by(0)
expect(response.status).to be_between(400, 499)
end
end
@@ -132,7 +132,7 @@ RSpec.describe 'Wiki API', type: :request do
let!(:test_tag_name) { create(:tag, primary_name: 'TestPage').tag_name('ja') }
let!(:page) do
seed_wiki_page(
seed_description(
tag_name: test_tag_name,
body: "a\nb",
created_by_user: member,
@@ -166,7 +166,7 @@ RSpec.describe 'Wiki API', type: :request do
context 'when success' do
it 'creates new revision and returns 200' do
current_id = page.wiki_revisions.maximum(:id)
current_id = description_versions(page).maximum(:id)
expect do
put "/wiki/#{page.id}",
@@ -174,26 +174,22 @@ RSpec.describe 'Wiki API', type: :request do
base_revision_id: current_id },
headers: auth_headers(member)
end
.to change(WikiRevision, :count).by(1)
.and change(WikiVersion, :count).by(1)
.to change(TagDescriptionVersion, :count).by(1)
version = page.wiki_versions.order(:version_no).last
version = description_versions(page).order(:version_no).last
expect(version).to have_attributes(
event_type: 'update',
title: 'TestPage',
body: "x\ny",
created_by_user_id: member.id
)
created_by_user_id: member.id)
expect(response).to have_http_status(:ok)
page.reload
rev = page.current_revision
expect(rev).to be_content
expect(rev.message).to eq('edit')
rev = current_description_version(page)
expect(page.body).to eq("x\ny")
expect(rev.base_revision_id).to eq(current_id)
expect(rev.version_no).to eq(2)
end
it 'wiki body だけを変更しても tag version は作成しない' do
@@ -206,13 +202,13 @@ RSpec.describe 'Wiki API', type: :request do
created_by_user: member)
linked_page =
seed_wiki_page(
seed_description(
tag_name: linked_tag_name,
body: 'before',
created_by_user: member,
message: 'init')
current_id = linked_page.current_revision.id
current_id = current_description_version(linked_page).id
before_count = linked_tag.reload.tag_versions.count
expect {
@@ -225,8 +221,8 @@ RSpec.describe 'Wiki API', type: :request do
},
headers: auth_headers(member)
}
.to change(WikiRevision, :count).by(1)
.and change(WikiVersion, :count).by(1)
.to change(TagDescriptionVersion, :count).by(1)
expect(response).to have_http_status(:ok)
expect(linked_tag.reload.tag_versions.count).to eq(before_count)
@@ -236,10 +232,10 @@ RSpec.describe 'Wiki API', type: :request do
context 'when conflict' do
it 'returns 409 when base_revision_id mismatches' do
# 先に別ユーザ(同じ member でもOK)が 1 回更新して先頭を進める
Wiki::Commit.content!(page: page, body: "zzz", created_user: member, message: 'other edit')
TagDescriptionOperation.update!(tag: page.tag, body: "zzz", updated_by_user: member, message: 'other edit')
page.reload
stale_id = page.wiki_revisions.order(:id).first.id # わざと古い id
stale_id = description_versions(page).order(:id).first.id # わざと古い id
put "/wiki/#{page.id}",
params: { title: 'TestPage', body: 'x', base_revision_id: stale_id },
headers: auth_headers(member)
@@ -281,13 +277,13 @@ RSpec.describe 'Wiki API', type: :request do
describe 'GET /wiki/search' do
before do
search_tag = create(:tag, primary_name: 'spec_wiki_title_2')
seed_wiki_page(
seed_description(
tag_name: search_tag.tag_name('ja'),
body: 'search body 2',
created_by_user: user,
message: 'init')
seed_wiki_page(
seed_description(
tag_name: create(:tag_name, name: 'unrelated_title'),
body: 'unrelated body',
created_by_user: user,
@@ -318,13 +314,13 @@ RSpec.describe 'Wiki API', type: :request do
describe 'GET /wiki/changes' do
let!(:rev1) do
Wiki::Commit.content!(page: page, body: "a\nb", created_user: user, message: 'r1')
page.current_revision
TagDescriptionOperation.update!(tag: page.tag, body: "a\nb", updated_by_user: user, message: 'r1')
current_description_version(page)
end
let!(:rev2) do
Wiki::Commit.content!(page: page, body: "a\nc", created_user: user, message: 'r2')
page.current_revision
TagDescriptionOperation.update!(tag: page.tag, body: "a\nc", updated_by_user: user, message: 'r2')
current_description_version(page)
end
it 'returns latest revisions (optionally filtered by page id)' do
@@ -359,11 +355,8 @@ RSpec.describe 'Wiki API', type: :request do
# 別ページを作って revision 無し
tn2 = create(:tag_name, name: 'spec_no_rev')
# 異常データ: revision 無し WikiPage を直接作る
p2 = WikiPage.create!(
tag_name: tn2,
body: 'init',
created_user: user,
updated_user: user)
p2 = TagDescription.create!(
tag: tn2.tag, language_code: 'ja', body: 'init', version_no: 1)
get "/wiki/changes?id=#{p2.id}"
expect(response).to have_http_status(:ok)
@@ -399,13 +392,13 @@ RSpec.describe 'Wiki API', type: :request do
describe 'GET /wiki/:id/diff' do
let!(:rev_a) do
Wiki::Commit.content!(page: page, body: "a\nb\nc", created_user: user, message: 'A')
page.current_revision
TagDescriptionOperation.update!(tag: page.tag, body: "a\nb\nc", updated_by_user: user, message: 'A')
current_description_version(page)
end
let!(:rev_b) do
Wiki::Commit.content!(page: page, body: "a\nx\nc", created_user: user, message: 'B')
page.current_revision
TagDescriptionOperation.update!(tag: page.tag, body: "a\nx\nc", updated_by_user: user, message: 'B')
current_description_version(page)
end
it 'returns diff json between revisions' do
@@ -431,44 +424,23 @@ RSpec.describe 'Wiki API', type: :request do
expect(response).to have_http_status(:ok)
expect(json['older_revision_id']).to eq(rev_a.id)
expect(json['newer_revision_id']).to eq(page.current_revision.id)
expect(json['newer_revision_id']).to eq(current_description_version(page).id)
end
end
describe 'Wiki::Commit.redirect!' do
it 'raises because redirect revisions are deprecated' do
target_tag_name = create(:tag_name, name: 'redirect_deprecated_target')
target =
seed_wiki_page(
tag_name: target_tag_name,
body: 'target',
created_by_user: user,
message: 'init')
expect {
Wiki::Commit.redirect!(
page: page,
redirect_page: target,
created_user: user,
message: 'redirect',
base_revision_id: page.current_revision.id
)
}.to raise_error(RuntimeError, '廃止しました.')
end
end
it 'wiki title を変更すると対応する tag の version を作成する' do
linked_tag_name = create(:tag_name, name: 'wiki_linked_tag_for_version')
linked_tag = create(:tag, primary_tag_name: linked_tag_name, category: :general)
linked_page =
seed_wiki_page(
seed_description(
tag_name: linked_tag_name,
body: 'before',
created_by_user: user,
message: 'init')
current_id = linked_page.current_revision.id
current_id = current_description_version(linked_page).id
expect {
put "/wiki/#{ linked_page.id }",
@@ -480,8 +452,8 @@ RSpec.describe 'Wiki API', type: :request do
},
headers: auth_headers(user)
}
.to change(WikiRevision, :count).by(1)
.and change(WikiVersion, :count).by(1)
.to change(TagDescriptionVersion, :count).by(1)
.and change { linked_tag.reload.tag_versions.count }.by(2)
expect(response).to have_http_status(:ok)