spec/lib/release_tools/security/app_sec_issue_spec.rb (91 lines of code) (raw):

# frozen_string_literal: true require 'spec_helper' describe ReleaseTools::Security::AppSecIssue do subject(:appsec_issue) { described_class.new } let(:versions) do [ ReleaseTools::Version.new('12.7.4'), ReleaseTools::Version.new('12.6.6'), ReleaseTools::Version.new('12.5.9') ] end let(:security_issues) do [ ReleaseTools::Security::ImplementationIssue.new(create(:issue), []), ReleaseTools::Security::ImplementationIssue.new(create(:issue), []) ] end let(:coordinator) { instance_double(ReleaseTools::PatchRelease::Coordinator, versions: versions) } let(:fetcher) { instance_double(ReleaseTools::Security::IssuesFetcher, execute: security_issues) } let(:tracking_issue) { build(:issue, due_date: '2024-04-01') } let(:comms_issue) { build(:issue) } before do allow(ReleaseTools::PatchRelease::Coordinator) .to receive(:new) .and_return(coordinator) allow(ReleaseTools::Security::IssuesFetcher) .to receive(:new) .and_return(fetcher) allow(ReleaseTools::GitlabClient) .to receive_messages( next_security_tracking_issue: tracking_issue, security_communication_issue: comms_issue ) security_issues.each do |security_issue| allow(security_issue) .to receive_messages(cves_issue: build(:issue), canonical_issue: build(:issue)) end end it_behaves_like 'issuable #initialize' describe '#title' do it 'returns the title' do expect(appsec_issue.title).to eq('AppSec Task Issue for Patch Release: 12.7.4, 12.6.6, 12.5.9') end end describe '#confidential?' do it 'returns true' do expect(appsec_issue).to be_confidential end end describe '#labels' do it 'returns the appropriate labels' do expect(appsec_issue.labels).to eq('AppSecWorkType::SecurityReleaseRotation') end end describe '#security_issues' do it 'returns security issues' do expect(appsec_issue.security_issues).to eq(security_issues) end end describe '#due_date' do it 'returns the same date as the tracking issue' do expect(appsec_issue.due_date).to eq('2024-04-01') end end describe '#assignees' do let(:schedule) { instance_spy(ReleaseTools::ReleaseManagers::Schedule) } before do allow(ReleaseTools::ReleaseManagers::Schedule) .to receive(:new) .and_return(schedule) end it 'returns AppSec release managers' do expect(schedule) .to receive(:active_appsec_release_managers) .and_return([build(:user, id: 1), build(:user, id: 2)]) expect(appsec_issue.assignees).to eq([1, 2]) end context 'when something goes wrong' do it 'returns nil' do allow(schedule) .to receive(:active_appsec_release_managers) .and_raise(ReleaseTools::ReleaseManagers::Schedule::VersionNotFoundError) expect(appsec_issue.assignees).to be_nil end end end describe '#description' do it 'generates the description' do expect(appsec_issue.description).to be_present end end end