resources/asciidoctor/spec/change_admonition_spec.rb (198 lines of code) (raw):

# frozen_string_literal: true require 'change_admonition/extension' RSpec.describe ChangeAdmonition do before(:each) do Asciidoctor::Extensions.register ChangeAdmonition # 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 'change 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 content' do let(:input) do <<~ASCIIDOC #{key}::[7.0.0-beta1, words] ASCIIDOC end it "renders with Elastic's custom template" do expect_block_admonition <<~HTML.strip <p class="admon_title">#{message} in 7.0.0-beta1.</p> <p>words</p> HTML end end context 'without content' do let(:input) do <<~ASCIIDOC #{key}::[7.0.0-beta1] ASCIIDOC end it 'has default text' do expect_block_admonition "<p>#{message} in 7.0.0-beta1.</p>" end end context 'with complex content' do let(:input) do <<~ASCIIDOC #{key}::[7.0.0-beta1, Like 2^7^] ASCIIDOC end it "renders with Elastic's custom template" do expect_block_admonition <<~HTML.strip <p class="admon_title">#{message} in 7.0.0-beta1.</p> <p>Like 2<sup>7</sup></p> HTML end end context 'with the ::' do let(:input) do <<~ASCIIDOC #{key}[7.0.0-beta1] ASCIIDOC end it "doesn't render" do expect(converted).to include <<~HTML <p>#{key}[7.0.0-beta1]</p> HTML end end end context 'inline form' do def expect_inline_admonition(version, text) expect(converted).to include <<~HTML.strip <span class="Admonishment Admonishment--change"> [<span class="Admonishment-version u-mono#{extra_class}">#{version}</span>] <span class="Admonishment-detail"> #{text} </span> </span> HTML end context 'with text' do let(:input) do <<~ASCIIDOC Words #{key}:[7.0.0-beta1, admon words] words. ASCIIDOC end it "renders with Elastic's custom template" do expect_inline_admonition( '7.0.0-beta1', "#{message} in 7.0.0-beta1. admon words" ) end end context 'without text' do let(:input) do <<~ASCIIDOC Words #{key}:[7.0.0-beta1] words. ASCIIDOC end it 'has default text' do expect_inline_admonition( '7.0.0-beta1', "#{message} in 7.0.0-beta1." ) 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}:[7.0.0-beta1] 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( '7.0.0-beta1', "#{message} in 7.0.0-beta1." ) end end end context 'inside a title' do let(:input) do <<~ASCIIDOC == Foo #{key}:[7.0.0-beta1] ASCIIDOC end it 'has default text' do expect_inline_admonition( '7.0.0-beta1', "#{message} in 7.0.0-beta1." ) 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}:[7.0.0-beta1] ASCIIDOC end it 'has default text' do expect_inline_admonition( '7.0.0-beta1', "#{message} in 7.0.0-beta1." ) end it "doesn't modify the id" do expect(converted).to include 'id="_foo"' end end context 'without :' do let(:input) do <<~ASCIIDOC Words #{key}[7.0.0-beta1] words. ASCIIDOC end it 'has default text' do expect(converted).to include <<~HTML <p>Words #{key}[7.0.0-beta1] words.</p> HTML end end end end context 'added' do let(:key) { 'added' } let(:admon_class) { 'note' } let(:message) { 'Added' } let(:extra_class) { '' } include_examples 'change admonition' end context 'coming' do let(:key) { 'coming' } let(:admon_class) { 'note' } let(:message) { 'Coming' } let(:extra_class) { '' } include_examples 'change admonition' end context 'deprecated' do let(:key) { 'deprecated' } let(:admon_class) { 'warning' } let(:message) { 'Deprecated' } let(:extra_class) { ' u-strikethrough' } include_examples 'change admonition' end end