resources/asciidoctor/spec/care_admonition_spec.rb (247 lines of code) (raw):

# frozen_string_literal: true require 'care_admonition/extension' RSpec.describe CareAdmonition do before(:each) do Asciidoctor::Extensions.register CareAdmonition # These can't be rendered without docbook compat at this point. Asciidoctor::Extensions.register DocbookCompat end after(:each) do Asciidoctor::Extensions.unregister_all end include_context 'convert without logs' shared_examples 'care admonition' do context 'block form' do def expect_block_admonition(body) expect(converted).to include <<~HTML <div class="#{admon_class} admon"> <div class="icon"></div> <div class="admon_content"> #{body} </div> </div> HTML end context 'with text' do let(:input) do <<~ASCIIDOC #{key}::[words] ASCIIDOC end it "renders with Elastic's custom template" do expect_block_admonition '<p>words</p>' end end context 'with complex content' do let(:input) do <<~ASCIIDOC #{key}::[See <<some-reference>>] [[some-reference]] == Some Reference ASCIIDOC end it "renders with Elastic's custom template" do expect_block_admonition <<~HTML.strip <p>See <a class="xref" href="#some-reference" title="Some Reference"><em>Some Reference</em></a></p> HTML end end context 'without content' do let(:input) do <<~ASCIIDOC #{key}::[] ASCIIDOC end it 'has default text' do expect_block_admonition "<p>#{default_text}</p>" end end context 'when written without ::' do let(:input) do <<~ASCIIDOC #{key}[] ASCIIDOC end it "isn't invoked" do expect(converted).to include "<p>#{key}[]</p>" end end context 'when only a Github issue link is provided' do let(:input) do <<~ASCIIDOC #{key}::[https://github.com/elastic/docs/issues/505] ASCIIDOC end it 'has default text and github text' do expect_block_admonition <<~HTML.strip <p>#{default_text} For feature status, see <a href="https://github.com/elastic/docs/issues/505" class="ulink" target="_top">#505</a>.</p> HTML end end context 'when only an {issue} link is provided' do let(:input) do <<~ASCIIDOC :issue: https://github.com/elastic/docs/issues/ #{key}::[{issue}505] ASCIIDOC end it 'has default text and github text' do expect_block_admonition <<~HTML.strip <p>#{default_text} For feature status, see <a href="https://github.com/elastic/docs/issues/505" class="ulink" target="_top">#505</a>.</p> HTML end end context 'when custom text and a Github issue link are provided' do let(:input) do <<~ASCIIDOC #{key}::["Custom text." https://github.com/elastic/docs/issues/505] ASCIIDOC end it 'has custom text and github text' do expect_block_admonition <<~HTML.strip <p>Custom text. For feature status, see <a href="https://github.com/elastic/docs/issues/505" class="ulink" target="_top">#505</a>.</p> HTML end end context 'when custom text and an {issue} link are provided' do let(:input) do <<~ASCIIDOC :issue: https://github.com/elastic/docs/issues/ #{key}::["Custom text." {issue}505] ASCIIDOC end it 'has custom text and github text' do expect_block_admonition <<~HTML.strip <p>Custom text. For feature status, see <a href="https://github.com/elastic/docs/issues/505" class="ulink" target="_top">#505</a>.</p> HTML end end end context 'inline form' do def expect_inline_admonition(text) expect(converted).to include <<~HTML.strip <span class="Admonishment Admonishment--#{key}"> [<span class="Admonishment-title u-mono">#{key}</span>] <span class="Admonishment-detail"> #{text} </span> </span> HTML end context 'with text' do let(:input) do <<~ASCIIDOC Words #{key}:[admon words] words. ASCIIDOC end it "renders with Elastic's custom template" do expect_inline_admonition 'admon words' end end context 'without text' do let(:input) do <<~ASCIIDOC Words #{key}:[] words. ASCIIDOC end it 'has default text' do expect_inline_admonition default_text end end context 'inside the document title' do let(:standalone) { true } let(:convert_attributes) do { # Shrink the output slightly so it is easier to read 'stylesheet!' => false, } end let(:input) do <<~ASCIIDOC = Title #{key}:[] ASCIIDOC end context 'the title' do it "doesn't include the admonition" do expect(converted).to include '<title>Title | Elastic</title>' end end context 'the heading' do it 'includes the admonition' do expect(converted).to include <<~HTML.strip <h1 class="title"><a id="id-1"></a>Title <span class="Admonishment HTML # Comment to fix syntax highlighting: ">HTML end it 'has default text' do expect_inline_admonition default_text end end end context 'inside a title' do let(:input) do <<~ASCIIDOC == Foo #{key}:[] ASCIIDOC end it 'has default text' do expect_inline_admonition default_text end it "doesn't modify the id" do expect(converted).to include 'id="_foo"' end end context 'inside a floating title' do let(:input) do <<~ASCIIDOC [float] == Foo #{key}:[] ASCIIDOC end it 'has default text' do expect_inline_admonition default_text end it "doesn't modify the id" do expect(converted).to include 'id="_foo"' end end context 'when written without the :' do let(:input) do <<~ASCIIDOC Words #{key}[] words. ASCIIDOC end it "isn't invoked" do expect(converted).to include "<p>Words #{key}[] words.</p>" end end end end context 'beta' do let(:key) { 'beta' } let(:admon_class) { 'warning' } let(:default_text) do <<~TEXT.strip This functionality is in beta and is subject to change. The design and code is less mature than official GA features and is being provided as-is with no warranties. Beta features are not subject to the support SLA of official GA features. TEXT end include_examples 'care admonition' end context 'dev' do let(:key) { 'dev' } let(:admon_class) { 'warning' } let(:default_text) do <<~TEXT.strip This functionality is in development and may be changed or removed completely in a future release. These features are unsupported and not subject to the support SLA of official GA features. TEXT end include_examples 'care admonition' end context 'experimental' do let(:key) { 'preview' } let(:admon_class) { 'warning' } let(:default_text) do <<~TEXT.strip This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. TEXT end include_examples 'care admonition' end context 'preview' do let(:key) { 'preview' } let(:admon_class) { 'warning' } let(:default_text) do <<~TEXT.strip This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. TEXT end include_examples 'care admonition' end end