require 'spec_helper' describe Gitlab::HookData::BaseBuilder do describe '#absolute_image_urls' do let(:subclass) do Class.new(described_class) do public :absolute_image_urls end end using RSpec::Parameterized::TableSyntax context 'with an upload prefix specified' do let(:project_with_path) { double(full_path: 'baz/bar') } let(:object_with_project) { double(project: project_with_path) } subject { subclass.new(object_with_project) } where do { 'relative image URL' => { input: '', output: "" }, 'absolute upload URL' => { input: '', output: "" }, 'absolute non-upload URL' => { input: '', output: "" } } end with_them do it { expect(subject.absolute_image_urls(input)).to eq(output) } end end context 'without an upload prefix specified' do subject { subclass.new(nil) } where do { 'relative image URL' => { input: '', output: "" }, 'absolute upload URL' => { input: '', output: "" }, 'absolute non-upload URL' => { input: '', output: "" }, 'HTTP URL' => { input: '', output: '' }, 'HTTPS URL' => { input: '', output: '' }, 'protocol-relative URL' => { input: '', output: '' }, 'URL reference by title' => { input: "![foo]\n\n[foo]: foo.png", output: "![foo]\n\n[foo]: foo.png" }, 'URL reference by label' => { input: "![][foo]\n\n[foo]: foo.png", output: "![][foo]\n\n[foo]: foo.png" }, 'in Markdown inline code block' => { input: '``', output: "``" }, 'in HTML tag on the same line' => { input: '

', output: "
" }, 'in Markdown multi-line code block' => { input: "```\n\n```", output: "```\n\n```" }, 'in HTML tag on different lines' => { input: "\n\n
", output: "\n\n
" } } end with_them do it { expect(subject.absolute_image_urls(input)).to eq(output) } end end end end