# frozen_string_literal: true require 'spec_helper' RSpec.describe Banzai::Filter::FeatureFlagReferenceFilter do include FilterSpecHelper let_it_be(:project) { create(:project, :public) } let_it_be(:feature_flag) { create(:operations_feature_flag, project: project) } let_it_be(:reference) { feature_flag.to_reference } it 'requires project context' do expect { described_class.call('') }.to raise_error(ArgumentError, /:project/) end %w(pre code a style).each do |elem| it "ignores valid references contained inside '#{elem}' element" do exp = act = "<#{elem}>Feature Flag #{reference}" expect(reference_filter(act).to_html).to eq exp end end context 'with internal reference' do it 'links to a valid reference' do doc = reference_filter("See #{reference}") expect(doc.css('a').first.attr('href')).to eq urls.edit_project_feature_flag_url(project, feature_flag) end it 'links with adjacent text' do doc = reference_filter("Feature Flag (#{reference}.)") expect(doc.to_html).to match(%r{\(#{Regexp.escape(reference)}\.\)}) end it 'ignores invalid feature flag IIDs' do exp = act = "Check [feature_flag:#{non_existing_record_id}]" expect(reference_filter(act).to_html).to eq exp end it 'includes a title attribute' do doc = reference_filter("Feature Flag #{reference}") expect(doc.css('a').first.attr('title')).to eq feature_flag.name end it 'escapes the title attribute' do allow(feature_flag).to receive(:name).and_return(%{">whatever#{Regexp.escape(feature_flag.to_reference(project))}\.\)}) end it 'ignores invalid feature flag IIDs on the referenced project' do act = "See #{invalidate_reference(reference)}" expect(reference_filter(act).to_html).to match(%r{#{Regexp.escape(invalidate_reference(reference))}}) end end context 'with group context' do let_it_be(:group) { create(:group) } it 'links to a valid reference' do reference = "[feature_flag:#{project.full_path}/#{feature_flag.iid}]" result = reference_filter("See #{reference}", { project: nil, group: group } ) expect(result.css('a').first.attr('href')).to eq(urls.edit_project_feature_flag_url(project, feature_flag)) end it 'ignores internal references' do exp = act = "See [feature_flag:#{feature_flag.iid}]" expect(reference_filter(act, project: nil, group: group).to_html).to eq exp end end end