1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Markup::RenderingService, feature_category: :groups_and_projects do
describe '#execute' do
let_it_be(:project) { create(:project, :repository) }
let_it_be(:user) do
user = create(:user, username: 'gfm')
project.add_maintainer(user)
user
end
let_it_be(:context) { { project: project } }
let_it_be(:postprocess_context) { { current_user: user } }
let(:file_name) { nil }
let(:text) { 'Noël' }
subject do
described_class
.new(text, file_name: file_name, context: context, postprocess_context: postprocess_context)
.execute
end
context 'when text is missing' do
let(:text) { nil }
it 'returns an empty string' do
is_expected.to eq('')
end
end
context 'when file_name is missing' do
it 'returns html (rendered by Banzai)' do
expected_html = '<p data-sourcepos="1:1-1:5" dir="auto">Noël</p>'
expect(Banzai).to receive(:render).with(text, context) { expected_html }
is_expected.to eq(expected_html)
end
end
context 'when postprocess_context is missing' do
let(:file_name) { 'foo.txt' }
let(:postprocess_context) { nil }
it 'returns html (rendered by Banzai)' do
expected_html = '<pre class="plain-readme">Noël</pre>'
expect(Banzai).not_to receive(:post_process) { expected_html }
is_expected.to eq(expected_html)
end
end
context 'when rendered context is present' do
let(:rendered) { 'rendered text' }
let(:file_name) { 'foo.md' }
it 'returns an empty string' do
context[:rendered] = rendered
is_expected.to eq(rendered)
end
end
context 'when file is a markdown file' do
let(:file_name) { 'foo.md' }
it 'returns html (rendered by Banzai)' do
expected_html = '<p data-sourcepos="1:1-1:5" dir="auto">Noël</p>'
expect(Banzai).to receive(:render).with(text, context) { expected_html }
is_expected.to eq(expected_html)
end
end
context 'when file is asciidoc file' do
let(:file_name) { 'foo.adoc' }
it 'returns html (rendered by Gitlab::Asciidoc)' do
expected_html = "<div>\n<p>Noël</p>\n</div>"
expect(Gitlab::Asciidoc).to receive(:render).with(text, context) { expected_html }
is_expected.to eq(expected_html)
end
end
context 'when file is a regular text file' do
let(:file_name) { 'foo.txt' }
let(:text) { 'Noël <form>' }
it 'returns html (rendered by ActionView::TagHelper)' do
expect(ActionController::Base.helpers).to receive(:content_tag).and_call_original
is_expected.to eq('<pre class="plain-readme">Noël <form></pre>')
end
end
context 'when file has an unknown type' do
let(:file_name) { 'foo.tex' }
it 'returns html (rendered by Gitlab::OtherMarkup)' do
expected_html = 'Noël'
expect(Gitlab::OtherMarkup).to receive(:render).with(file_name, text, context) { expected_html }
is_expected.to eq(expected_html)
end
end
context 'with reStructuredText' do
let(:file_name) { 'foo.rst' }
let(:text) { "####\nPART\n####" }
it 'returns rendered html' do
is_expected.to eq("<h1>PART</h1>\n\n")
end
context 'when input has an invalid syntax' do
let(:text) { "####\nPART\n##" }
it 'uses a simple formatter for html' do
is_expected.to eq("<p>####\n<br>PART\n<br>##</p>")
end
end
end
end
end
|