spec/lib/release_tools/security/related_issues_finder_spec.rb (99 lines of code) (raw):
# frozen_string_literal: true
require 'spec_helper'
describe ReleaseTools::Security::RelatedIssuesFinder do
subject(:finder) { described_class.new(security_issue) }
let(:client) { stub_const('ReleaseTools::GitlabClient', spy) }
let(:raw_security_issue) do
create(:issue, iid: 1, project_id: 1, references: { full: 'gitlab-org/security/gitlab#1' })
end
let(:security_issue) do
ReleaseTools::Security::ImplementationIssue.new(raw_security_issue, [])
end
let(:canonical_issue) do
create(:issue, iid: 2, project_id: 2, references: { full: 'gitlab-org/gitlab#1' })
end
let(:cve_issue) do
create(:issue, references: { full: 'gitlab-org/cves#1' })
end
describe '#cves_issue' do
before do
allow(finder)
.to receive(:canonical_issue)
.and_return(canonical_issue)
end
context 'when the security issue has a cve issue associated' do
before do
allow(client)
.to receive(:issue_links)
.with(security_issue.project_id, security_issue.iid)
.and_return([cve_issue])
end
it 'returns the cve issue' do
expect(finder.cves_issue).to eq(cve_issue)
end
end
context 'when the canonical issue has a cve issue associated' do
before do
allow(client)
.to receive(:issue_links)
.with(security_issue.project_id, security_issue.iid)
.and_return([])
allow(client)
.to receive(:issue_links)
.with(canonical_issue.project_id, canonical_issue.iid)
.and_return([cve_issue])
end
it 'returns the cve issue' do
expect(finder.cves_issue).to eq(cve_issue)
end
end
context 'when there is no cve issue associated' do
before do
allow(client)
.to receive(:issue_links)
.and_return([])
end
it 'returns nothing' do
expect(finder.cves_issue).to be_nil
end
end
context 'when there is no canonical issue' do
let(:canonical_issue) { nil }
before do
allow(client)
.to receive(:issue_links)
.with(security_issue.project_id, security_issue.iid)
.and_return([cve_issue])
end
it 'returns the cve issue associated to the security issue' do
expect(finder.cves_issue).to eq(cve_issue)
end
context 'with no cve issue associated' do
before do
allow(client)
.to receive(:issue_links)
.and_return([])
end
it 'returns nothing' do
expect(finder.cves_issue).to be_nil
end
end
end
end
describe '#canonical_issue' do
it 'returns the canonical issue associated' do
allow(client)
.to receive(:issue_links)
.with(security_issue.project_id, security_issue.iid)
.and_return([canonical_issue, cve_issue])
expect(finder.canonical_issue).to eq(canonical_issue)
end
context 'with no canonical issue' do
it 'returns nothing' do
allow(client)
.to receive(:issue_links)
.and_return([])
expect(finder.canonical_issue).to be_nil
end
end
end
end