77 lines
2.6 KiB
Ruby
77 lines
2.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.shared_examples 'User views AsciiDoc page with includes' do
|
|
let_it_be(:wiki_content_selector) { '[data-qa-selector=wiki_page_content]' } # rubocop:disable QA/SelectorUsage
|
|
let!(:included_wiki_page) { create_wiki_page('included_page', content: 'Content from the included page')}
|
|
let!(:wiki_page) { create_wiki_page('home', content: "Content from the main page.\ninclude::included_page.asciidoc[]") }
|
|
|
|
def create_wiki_page(title, content:)
|
|
attrs = {
|
|
title: title,
|
|
content: content,
|
|
format: :asciidoc
|
|
}
|
|
|
|
create(:wiki_page, wiki: wiki, **attrs)
|
|
end
|
|
|
|
before do
|
|
sign_in(user)
|
|
end
|
|
|
|
context 'when the file being included exists', :js do
|
|
it 'includes the file contents' do
|
|
visit(wiki_page_path(wiki, wiki_page))
|
|
|
|
page.within(:css, wiki_content_selector) do
|
|
expect(page).to have_content('Content from the main page. Content from the included page')
|
|
end
|
|
end
|
|
|
|
context 'when there are multiple versions of the wiki pages' do
|
|
before do
|
|
# rubocop:disable Rails/SaveBang
|
|
included_wiki_page.update(message: 'updated included file', content: 'Updated content from the included page')
|
|
wiki_page.update(message: 'updated wiki page', content: "Updated content from the main page.\ninclude::included_page.asciidoc[]")
|
|
# rubocop:enable Rails/SaveBang
|
|
end
|
|
|
|
let(:latest_version_id) { wiki_page.versions.first.id }
|
|
let(:oldest_version_id) { wiki_page.versions.last.id }
|
|
|
|
context 'viewing the latest version' do
|
|
it 'includes the latest content' do
|
|
visit(wiki_page_path(wiki, wiki_page, version_id: latest_version_id))
|
|
|
|
page.within(:css, wiki_content_selector) do
|
|
expect(page).to have_content('Updated content from the main page. Updated content from the included page')
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'viewing the original version' do
|
|
it 'includes the content from the original version' do
|
|
visit(wiki_page_path(wiki, wiki_page, version_id: oldest_version_id))
|
|
|
|
page.within(:css, wiki_content_selector) do
|
|
expect(page).to have_content('Content from the main page. Content from the included page')
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when the file being included does not exist', :js do
|
|
before do
|
|
included_wiki_page.delete
|
|
end
|
|
|
|
it 'outputs an error' do
|
|
visit(wiki_page_path(wiki, wiki_page))
|
|
|
|
page.within(:css, wiki_content_selector) do
|
|
expect(page).to have_content('Content from the main page. [ERROR: include::included_page.asciidoc[] - unresolved directive]')
|
|
end
|
|
end
|
|
end
|
|
end
|