spec/lib/release_tools/internal_release/dedicated_issue_spec.rb (93 lines of code) (raw):
# frozen_string_literal: true
require 'spec_helper'
describe ReleaseTools::InternalRelease::DedicatedIssue do
include ReleaseTools::InternalRelease::IssueHelper
subject(:dedicated_issue) { described_class.new(versions: versions) }
let(:client) { stub_const('ReleaseTools::GitlabClient', spy) }
let(:helper) { stub_const('ReleaseTools::InternalRelease::IssueHelper', spy) }
let(:release_managers) { [build(:user, username: 'a'), build(:user, username: 'b')] }
let(:task_issue) { build(:issue, due_date: '2024-04-01') }
let(:security_issue) { build(:issue, due_date: '2024-04-01', references: { full: 'gitlab-org/security/gitlab#1' }) }
let(:schedule) do
instance_spy(
ReleaseTools::ReleaseManagers::Schedule,
active_release_managers: release_managers
)
end
let(:versions) do
[
ReleaseTools::Version.new('15.2.1-internal1'),
ReleaseTools::Version.new('15.1.2-internal1')
]
end
before do
allow(client)
.to receive_messages(
issues: [task_issue],
issue_links: [security_issue]
)
allow(ReleaseTools::ReleaseManagers::Schedule)
.to receive(:new)
.and_return(schedule)
end
it_behaves_like 'issuable #initialize'
describe '#title' do
it 'returns the title' do
expect(dedicated_issue.title).to eq('Internal release: 15.2.1-internal1, 15.1.2-internal1')
end
end
describe '#assignees' do
let(:dedicated_team_managers_ids) { %w[11218142 20257324 25360079] }
it 'returns list of dedicated team managers GitLab IDs' do
expect(dedicated_issue.assignees).to eq(dedicated_team_managers_ids)
end
end
describe '#confidential?' do
it 'returns true' do
expect(dedicated_issue).to be_confidential
end
end
describe '#labels' do
let(:labels) { 'internal releases, group::GitLab Dedicated, severity::1' }
it 'returns internal releases label' do
expect(dedicated_issue.labels).to eq(labels)
end
end
describe '#internal_versions_info' do
it 'returns the internal versions' do
expect(dedicated_issue.internal_versions_info).to eq('15.2.1-internal1, 15.1.2-internal1')
end
end
describe '#release_versions_info' do
it 'returns the minor versions' do
expect(dedicated_issue.release_versions_info).to eq('15.2, 15.1')
end
end
describe '#due_date' do
it 'returns the same date as the task issue' do
expect(dedicated_issue.due_date).to eq('2024-04-01')
end
end
describe '#planned_due_date' do
it 'returns the same date as the task issue' do
expect(dedicated_issue.due_date).to eq('2024-04-01')
end
context 'when the task issue has no due date' do
let(:task_issue) { build(:issue, due_date: nil) }
let(:planned_due_date) { 'TBD - Release managers will provide an estimated date' }
it 'returns the planned due date as tbd' do
expect(dedicated_issue.planned_due_date).to eq(planned_due_date)
end
end
end
describe '#security_issues' do
it 'returns linked security issues urls' do
expect(dedicated_issue.security_issues).to eq(security_issue.web_url)
end
end
describe '#release_managers_usernames' do
let(:usernames) { '@a @b' }
it 'returns usernames of active release managers' do
expect(dedicated_issue.release_managers_usernames).to eq(usernames)
end
end
end