spec/lib/release_tools/security/prepare/fixes_verifier_spec.rb (103 lines of code) (raw):
# frozen_string_literal: true
require 'spec_helper'
describe ReleaseTools::Security::Prepare::FixesVerifier do
subject(:verifier) { described_class.new }
let(:client) { stub_const('ReleaseTools::GitlabClient', spy) }
let(:security_fixes) { [] }
let(:tracking_issue) { create(:issue) }
let(:task_issue) { create(:issue) }
let(:fetcher) do
instance_double(ReleaseTools::Security::IssuesFetcher, execute: security_fixes)
end
let(:notifier) do
stub_const('ReleaseTools::Slack::ReleaseJobEndNotifier', spy)
end
let(:schedule) do
instance_double(
ReleaseTools::ReleaseManagers::Schedule,
active_release_managers: release_managers,
active_appsec_release_managers: appsec_release_managers
)
end
let(:release_managers) do
[create(:user, username: 'foo'), create(:user, username: 'baz')]
end
let(:appsec_release_managers) do
[create(:user, username: 'bar'), create(:user, username: 'bat')]
end
before do
allow(ReleaseTools::Security::IssuesFetcher)
.to receive(:new)
.and_return(fetcher)
allow(ReleaseTools::ReleaseManagers::Schedule)
.to receive(:new)
.and_return(schedule)
allow(ReleaseTools::Versions)
.to receive(:next_versions)
.and_return(['16.11.1', '16.10.4', '16.9.6'])
allow(client)
.to receive_messages(
current_security_task_issue: task_issue,
next_security_tracking_issue: tracking_issue,
security_communication_issue: create(:issue)
)
end
describe '#execute' do
context 'without security fixes' do
it 'notifies Delivery and AppSec release managers' do
expect(client)
.to receive(:create_issue_note)
.with(
ReleaseTools::Project::Release::Tasks,
{
issue: task_issue,
body: a_string_matching(/@foo, @baz :wave/)
}
)
expect(client)
.to receive(:create_issue_note)
.with(
ReleaseTools::Project::GitlabEe,
{
issue: tracking_issue,
body: a_string_matching(/@bar, @bat :wave:/)
}
)
expect(notifier).to receive(:send_notification)
without_dry_run { verifier.execute }
end
it 'requests Delivery to perform a patch release with bug fixes only' do
expect(client)
.to receive(:create_issue_note)
.with(
ReleaseTools::Project::Release::Tasks,
{
issue: task_issue,
body: a_string_matching(/Perform the patch release with only bug fixes/)
}
)
expect(notifier).to receive(:send_notification)
without_dry_run { verifier.execute }
end
end
context 'with security issues' do
let(:security_fixes) do
[
ReleaseTools::Security::ImplementationIssue.new(create(:issue), []),
ReleaseTools::Security::ImplementationIssue.new(create(:issue), [])
]
end
it 'does nothing' do
expect(client).not_to receive(:create_issue_note)
expect(notifier).to receive(:send_notification)
without_dry_run { verifier.execute }
end
end
context 'with dry-run' do
it 'does nothing' do
expect(client).not_to receive(:create_issue_note)
expect(notifier).to receive(:send_notification)
verifier.execute
end
end
end
end