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