require 'rails_helper' RSpec.describe 'Wiki title collision', type: :request do let!(:user) { create_member_user! } def auth_headers user { 'X-Transfer-Code' => user.inheritance_code } end def create_wiki_page title:, body: Wiki::Commit.create_content!( tag_name: TagName.create!(name: title), body:, created_by_user: user, message: 'init') end it 'returns 422 when renaming wiki title to existing title' do source = create_wiki_page(title: 'wiki_collision_source', body: 'source body') create_wiki_page(title: 'wiki_collision_target', body: 'target body') source_revision_count = source.wiki_revisions.count source_version_count = source.wiki_versions.count old_title = source.title old_body = source.body put "/wiki/#{ source.id }", params: { title: 'wiki_collision_target', body: 'new body', message: 'rename collision', base_revision_id: source.current_revision.id, }, headers: auth_headers(user) expect(response).to have_http_status(:unprocessable_entity) source.reload expect(source.title).to eq(old_title) expect(source.body).to eq(old_body) expect(source.wiki_revisions.count).to eq(source_revision_count) expect(source.wiki_versions.count).to eq(source_version_count) end it 'returns 422 when creating wiki with existing title' do create_wiki_page(title: 'wiki_collision_create', body: 'already exists') expect { post '/wiki', params: { title: 'wiki_collision_create', body: 'new body', message: 'duplicate create', }, headers: auth_headers(user) } .not_to change(WikiPage, :count) expect(response).to have_http_status(:unprocessable_entity) end end