このコミットが含まれているのは:
@@ -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)
|
||||
|
||||
新しいイシューから参照
ユーザーをブロックする