104 lines
3.6 KiB
Ruby
104 lines
3.6 KiB
Ruby
![]() |
# frozen_string_literal: true
|
||
|
|
||
|
require 'spec_helper'
|
||
|
|
||
|
# We build URIs to wiki pages manually in various places (most notably
|
||
|
# in markdown generation). To ensure these do not get out of sync, these
|
||
|
# tests verify that our path generation assumptions are sound.
|
||
|
describe 'Wiki path generation assumptions' do
|
||
|
set(:project) { create(:project, :public, :repository) }
|
||
|
|
||
|
let(:project_wiki) { ProjectWiki.new(project, project.owner) }
|
||
|
let(:some_page_name) { 'some-wiki-page' }
|
||
|
let(:wiki_page) do
|
||
|
create(:wiki_page, wiki: project_wiki, attrs: { title: some_page_name })
|
||
|
end
|
||
|
|
||
|
describe 'WikiProject#wiki_page_path', 'routing' do
|
||
|
it 'is consistent with routing to wiki#show' do
|
||
|
uri = URI.parse(project_wiki.wiki_page_path)
|
||
|
path = ::File.join(uri.path, some_page_name)
|
||
|
|
||
|
expect(get('/' + path)).to route_to('projects/wiki_pages#show',
|
||
|
id: some_page_name,
|
||
|
namespace_id: project.namespace.to_param,
|
||
|
project_id: project.to_param)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe 'project_wiki_path', 'routing' do
|
||
|
describe 'GET' do
|
||
|
it 'routes to the :show action' do
|
||
|
path = project_wiki_path(project, wiki_page)
|
||
|
|
||
|
expect(get('/' + path)).to route_to('projects/wiki_pages#show',
|
||
|
id: wiki_page.slug,
|
||
|
namespace_id: project.namespace.to_param,
|
||
|
project_id: project.to_param)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe 'project_wiki_pages_new_path', 'routing' do
|
||
|
describe 'GET' do
|
||
|
it 'routes to the :new action' do
|
||
|
path = project_wiki_pages_new_path(project)
|
||
|
|
||
|
expect(get('/' + path)).to route_to('projects/wiki_pages#new',
|
||
|
namespace_id: project.namespace.to_param,
|
||
|
project_id: project.to_param)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
# Early versions of the wiki paths routed all wiki pages at
|
||
|
# /wikis/:id - this test exists to guarantee that we support
|
||
|
# old URIs that may be out there, saved in bookmarks, on other wikis, etc.
|
||
|
describe 'legacy route support', type: 'request' do
|
||
|
let(:path) { ::File.join(project_wikis_path(project), some_page_name) }
|
||
|
|
||
|
before do
|
||
|
get(path)
|
||
|
end
|
||
|
|
||
|
it 'routes to new wiki paths' do
|
||
|
dest = project_wiki_path(project, wiki_page)
|
||
|
|
||
|
expect(response).to redirect_to(dest)
|
||
|
end
|
||
|
|
||
|
context 'the page is nested in a directory' do
|
||
|
let(:some_page_name) { 'some-dir/some-deep-dir/some-page' }
|
||
|
let(:path) { ::File.join(project_wikis_path(project), some_page_name) }
|
||
|
|
||
|
it 'still routes correctly' do
|
||
|
dest = project_wiki_path(project, wiki_page)
|
||
|
|
||
|
expect(response).to redirect_to(dest)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'the user requested the old history path' do
|
||
|
let(:some_page_name) { 'some-dir/some-deep-dir/some-page' }
|
||
|
let(:path) { ::File.join(project_wikis_path(project), some_page_name, 'history') }
|
||
|
|
||
|
it 'redirects to the new history path' do
|
||
|
dest = project_wiki_history_path(project, wiki_page)
|
||
|
|
||
|
expect(response).to redirect_to(dest)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'the user requested the old edit path' do
|
||
|
let(:some_page_name) { 'some-dir/some-deep-dir/some-page' }
|
||
|
let(:path) { ::File.join(project_wikis_path(project), some_page_name, 'edit') }
|
||
|
|
||
|
it 'redirects to the new history path' do
|
||
|
dest = project_wiki_edit_path(project, wiki_page)
|
||
|
|
||
|
expect(response).to redirect_to(dest)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|