asciidoc_spec.rb 1.7 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
require 'spec_helper'
require 'nokogiri'

module Gitlab
  describe Asciidoc do

    let(:input) { '<b>ascii</b>' }
    let(:context) { {} }
    let(:html) { 'H<sub>2</sub>O' }

    context "without project" do

      it "should convert the input using Asciidoctor and default options" do
        expected_asciidoc_opts = { safe: :secure, backend: :html5,
          attributes: described_class::DEFAULT_ADOC_ATTRS }

        expect(Asciidoctor).to receive(:convert)
          .with(input, expected_asciidoc_opts).and_return(html)

        expect( render(input, context) ).to eql html
      end

      context "with asciidoc_opts" do

25
        let(:asciidoc_opts) { { safe: :safe, attributes: ['foo'] } }
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

        it "should merge the options with default ones" do
          expected_asciidoc_opts = { safe: :safe, backend: :html5,
            attributes: described_class::DEFAULT_ADOC_ATTRS + ['foo'] }

          expect(Asciidoctor).to receive(:convert)
            .with(input, expected_asciidoc_opts).and_return(html)

          render(input, context, asciidoc_opts)
        end
      end
    end

    context "with project in context" do

41
      let(:context) { { project: create(:project) } }
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59

      it "should filter converted input via HTML pipeline and return result" do
        filtered_html = '<b>ASCII</b>'

        allow(Asciidoctor).to receive(:convert).and_return(html)
        expect_any_instance_of(HTML::Pipeline).to receive(:call)
          .with(html, context)
          .and_return(output: Nokogiri::HTML.fragment(filtered_html))

        expect( render('foo', context) ).to eql filtered_html
      end
    end

    def render(*args)
      described_class.render(*args)
    end
  end
end