diff options
Diffstat (limited to 'spec/models/service_spec.rb')
-rw-r--r-- | spec/models/service_spec.rb | 116 |
1 files changed, 103 insertions, 13 deletions
diff --git a/spec/models/service_spec.rb b/spec/models/service_spec.rb index db3cf19a03f..402c1a3d19b 100644 --- a/spec/models/service_spec.rb +++ b/spec/models/service_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' RSpec.describe Service do + using RSpec::Parameterized::TableSyntax + let_it_be(:group) { create(:group) } let_it_be(:project) { create(:project, group: group) } @@ -15,8 +17,6 @@ RSpec.describe Service do end describe 'validations' do - using RSpec::Parameterized::TableSyntax - it { is_expected.to validate_presence_of(:type) } where(:project_id, :group_id, :template, :instance, :valid) do @@ -208,27 +208,27 @@ RSpec.describe Service do end end - describe '.find_or_initialize_integration' do + describe '.find_or_initialize_non_project_specific_integration' do let!(:service1) { create(:jira_service, project_id: nil, group_id: group.id) } let!(:service2) { create(:jira_service) } it 'returns the right service' do - expect(Service.find_or_initialize_integration('jira', group_id: group)).to eq(service1) + expect(Service.find_or_initialize_non_project_specific_integration('jira', group_id: group)).to eq(service1) end it 'does not create a new service' do - expect { Service.find_or_initialize_integration('redmine', group_id: group) }.not_to change { Service.count } + expect { Service.find_or_initialize_non_project_specific_integration('redmine', group_id: group) }.not_to change { Service.count } end end - describe '.find_or_initialize_all' do + describe '.find_or_initialize_all_non_project_specific' do shared_examples 'service instances' do it 'returns the available service instances' do - expect(Service.find_or_initialize_all(Service.for_instance).pluck(:type)).to match_array(Service.available_services_types) + expect(Service.find_or_initialize_all_non_project_specific(Service.for_instance).pluck(:type)).to match_array(Service.available_services_types(include_project_specific: false)) end it 'does not create service instances' do - expect { Service.find_or_initialize_all(Service.for_instance) }.not_to change { Service.count } + expect { Service.find_or_initialize_all_non_project_specific(Service.for_instance) }.not_to change { Service.count } end end @@ -237,7 +237,7 @@ RSpec.describe Service do context 'with all existing instances' do before do Service.insert_all( - Service.available_services_types.map { |type| { instance: true, type: type } } + Service.available_services_types(include_project_specific: false).map { |type| { instance: true, type: type } } ) end @@ -265,13 +265,13 @@ RSpec.describe Service do describe 'template' do shared_examples 'retrieves service templates' do it 'returns the available service templates' do - expect(Service.find_or_create_templates.pluck(:type)).to match_array(Service.available_services_types) + expect(Service.find_or_create_templates.pluck(:type)).to match_array(Service.available_services_types(include_project_specific: false)) end end describe '.find_or_create_templates' do it 'creates service templates' do - expect { Service.find_or_create_templates }.to change { Service.count }.from(0).to(Service.available_services_names.size) + expect { Service.find_or_create_templates }.to change { Service.count }.from(0).to(Service.available_services_names(include_project_specific: false).size) end it_behaves_like 'retrieves service templates' @@ -279,7 +279,7 @@ RSpec.describe Service do context 'with all existing templates' do before do Service.insert_all( - Service.available_services_types.map { |type| { template: true, type: type } } + Service.available_services_types(include_project_specific: false).map { |type| { template: true, type: type } } ) end @@ -305,7 +305,7 @@ RSpec.describe Service do end it 'creates the rest of the service templates' do - expect { Service.find_or_create_templates }.to change { Service.count }.from(1).to(Service.available_services_names.size) + expect { Service.find_or_create_templates }.to change { Service.count }.from(1).to(Service.available_services_names(include_project_specific: false).size) end it_behaves_like 'retrieves service templates' @@ -599,6 +599,23 @@ RSpec.describe Service do end end + describe '.inherited_descendants_from_self_or_ancestors_from' do + let_it_be(:subgroup1) { create(:group, parent: group) } + let_it_be(:subgroup2) { create(:group, parent: group) } + let_it_be(:project1) { create(:project, group: subgroup1) } + let_it_be(:project2) { create(:project, group: subgroup2) } + let_it_be(:group_integration) { create(:prometheus_service, group: group, project: nil) } + let_it_be(:subgroup_integration1) { create(:prometheus_service, group: subgroup1, project: nil, inherit_from_id: group_integration.id) } + let_it_be(:subgroup_integration2) { create(:prometheus_service, group: subgroup2, project: nil) } + let_it_be(:project_integration1) { create(:prometheus_service, group: nil, project: project1, inherit_from_id: group_integration.id) } + let_it_be(:project_integration2) { create(:prometheus_service, group: nil, project: project2, inherit_from_id: subgroup_integration2.id) } + + it 'returns the groups and projects inheriting from integration ancestors', :aggregate_failures do + expect(described_class.inherited_descendants_from_self_or_ancestors_from(group_integration)).to eq([subgroup_integration1, project_integration1]) + expect(described_class.inherited_descendants_from_self_or_ancestors_from(subgroup_integration2)).to eq([project_integration2]) + end + end + describe "{property}_changed?" do let(:service) do BambooService.create( @@ -826,5 +843,78 @@ RSpec.describe Service do service.log_error(test_message, additional_argument: 'some argument') end + + context 'when project is nil' do + let(:project) { nil } + let(:arguments) do + { + service_class: service.class.name, + project_path: nil, + project_id: nil, + message: test_message, + additional_argument: 'some argument' + } + end + + it 'logs info messages using json logger' do + expect(Gitlab::JsonLogger).to receive(:info).with(arguments) + + service.log_info(test_message, additional_argument: 'some argument') + end + end + end + + describe '#external_issue_tracker?' do + where(:category, :active, :result) do + :issue_tracker | true | true + :issue_tracker | false | false + :common | true | false + end + + with_them do + it 'returns the right result' do + expect(build(:service, category: category, active: active).external_issue_tracker?).to eq(result) + end + end + end + + describe '#external_wiki?' do + where(:type, :active, :result) do + 'ExternalWikiService' | true | true + 'ExternalWikiService' | false | false + 'SlackService' | true | false + end + + with_them do + it 'returns the right result' do + expect(build(:service, type: type, active: active).external_wiki?).to eq(result) + end + end + end + + describe '.available_services_names' do + it 'calls the right methods' do + expect(described_class).to receive(:services_names).and_call_original + expect(described_class).to receive(:dev_services_names).and_call_original + expect(described_class).to receive(:project_specific_services_names).and_call_original + + described_class.available_services_names + end + + it 'does not call project_specific_services_names with include_project_specific false' do + expect(described_class).to receive(:services_names).and_call_original + expect(described_class).to receive(:dev_services_names).and_call_original + expect(described_class).not_to receive(:project_specific_services_names) + + described_class.available_services_names(include_project_specific: false) + end + + it 'does not call dev_services_names with include_dev false' do + expect(described_class).to receive(:services_names).and_call_original + expect(described_class).not_to receive(:dev_services_names) + expect(described_class).to receive(:project_specific_services_names).and_call_original + + described_class.available_services_names(include_dev: false) + end end end |