gitlab-org--gitlab-foss/spec/lib/banzai/reference_parser/design_parser_spec.rb

91 lines
2.4 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Banzai::ReferenceParser::DesignParser do
include ReferenceParserHelpers
include DesignManagementTestHelpers
let_it_be(:issue) { create(:issue) }
let_it_be(:design) { create(:design, :with_versions, issue: issue) }
let_it_be(:user) { create(:user, developer_projects: [issue.project]) }
subject(:instance) { described_class.new(Banzai::RenderContext.new(issue.project, user)) }
let(:link) { design_link(design) }
before do
enable_design_management
end
describe '#nodes_visible_to_user' do
it_behaves_like 'referenced feature visibility', 'issues' do
let(:project) { issue.project }
end
describe 'specific states' do
let_it_be(:public_project) { create(:project, :public) }
let_it_be(:other_project_link) do
design_link(create(:design, :with_versions))
end
let_it_be(:public_link) do
design_link(create(:design, :with_versions, issue: create(:issue, project: public_project)))
end
let_it_be(:public_but_confidential_link) do
design_link(create(:design, :with_versions, issue: create(:issue, :confidential, project: public_project)))
end
subject(:visible_nodes) do
nodes = [link,
other_project_link,
public_link,
public_but_confidential_link]
instance.nodes_visible_to_user(user, nodes)
end
it 'redacts links we should not have access to' do
expect(visible_nodes).to contain_exactly(link, public_link)
end
context 'design management is not available' do
before do
enable_design_management(false)
end
it 'redacts all nodes' do
expect(visible_nodes).to be_empty
end
end
end
end
describe '#process' do
it 'returns the correct designs' do
frag = document([design, create(:design, :with_versions)])
expect(subject.process([frag])[:visible]).to contain_exactly(design)
end
end
def design_link(design)
node = empty_html_link
node['class'] = 'gfm'
node['data-reference-type'] = 'design'
node['data-project'] = design.project.id.to_s
node['data-issue'] = design.issue.id.to_s
node['data-design'] = design.id.to_s
node
end
def document(designs)
frag = Nokogiri::HTML.fragment('')
designs.each do |design|
frag.add_child(design_link(design))
end
frag
end
end