summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/asciidoc_spec.rb
blob: 3a860899e1856479b14fe9d2be2d15c374cef902 (plain)
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
require 'spec_helper'
require 'nokogiri'

module Gitlab
  describe Asciidoc, lib: true 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

        let(:asciidoc_opts) { { safe: :safe, attributes: ['foo'] } }

        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

      let(:context) { { project: create(:project) } }

      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(Gitlab::Markdown).to receive(:render)
          .with(html, context.merge(pipeline: :asciidoc))
          .and_return(filtered_html)

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

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