Expand coverage for "system checks" (#24216)
This commit is contained in:
		
							
								
								
									
										27
									
								
								spec/lib/admin/system_check/base_check_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								spec/lib/admin/system_check/base_check_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | # frozen_string_literal: true | ||||||
|  |  | ||||||
|  | require 'rails_helper' | ||||||
|  |  | ||||||
|  | describe Admin::SystemCheck::BaseCheck do | ||||||
|  |   subject(:check) { described_class.new(user) } | ||||||
|  |  | ||||||
|  |   let(:user) { Fabricate(:user) } | ||||||
|  |  | ||||||
|  |   describe 'skip?' do | ||||||
|  |     it 'returns false' do | ||||||
|  |       expect(check.skip?).to be false | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   describe 'pass?' do | ||||||
|  |     it 'raises not implemented error' do | ||||||
|  |       expect { check.pass? }.to raise_error(NotImplementedError) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   describe 'message' do | ||||||
|  |     it 'raises not implemented error' do | ||||||
|  |       expect { check.message }.to raise_error(NotImplementedError) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
							
								
								
									
										45
									
								
								spec/lib/admin/system_check/database_schema_check_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								spec/lib/admin/system_check/database_schema_check_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | |||||||
|  | # frozen_string_literal: true | ||||||
|  |  | ||||||
|  | require 'rails_helper' | ||||||
|  |  | ||||||
|  | describe Admin::SystemCheck::DatabaseSchemaCheck do | ||||||
|  |   subject(:check) { described_class.new(user) } | ||||||
|  |  | ||||||
|  |   let(:user) { Fabricate(:user) } | ||||||
|  |  | ||||||
|  |   it_behaves_like 'a check available to devops users' | ||||||
|  |  | ||||||
|  |   describe 'pass?' do | ||||||
|  |     context 'when database needs migration' do | ||||||
|  |       before do | ||||||
|  |         context = instance_double(ActiveRecord::MigrationContext, needs_migration?: true) | ||||||
|  |         allow(ActiveRecord::Base.connection).to receive(:migration_context).and_return(context) | ||||||
|  |       end | ||||||
|  |  | ||||||
|  |       it 'returns false' do | ||||||
|  |         expect(check.pass?).to be false | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |  | ||||||
|  |     context 'when database does not need migration' do | ||||||
|  |       before do | ||||||
|  |         context = instance_double(ActiveRecord::MigrationContext, needs_migration?: false) | ||||||
|  |         allow(ActiveRecord::Base.connection).to receive(:migration_context).and_return(context) | ||||||
|  |       end | ||||||
|  |  | ||||||
|  |       it 'returns true' do | ||||||
|  |         expect(check.pass?).to be true | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   describe 'message' do | ||||||
|  |     it 'sends class name symbol to message instance' do | ||||||
|  |       allow(Admin::SystemCheck::Message).to receive(:new).with(:database_schema_check) | ||||||
|  |  | ||||||
|  |       check.message | ||||||
|  |  | ||||||
|  |       expect(Admin::SystemCheck::Message).to have_received(:new).with(:database_schema_check) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
							
								
								
									
										100
									
								
								spec/lib/admin/system_check/elasticsearch_check_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								spec/lib/admin/system_check/elasticsearch_check_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,100 @@ | |||||||
|  | # frozen_string_literal: true | ||||||
|  |  | ||||||
|  | require 'rails_helper' | ||||||
|  |  | ||||||
|  | describe Admin::SystemCheck::ElasticsearchCheck do | ||||||
|  |   subject(:check) { described_class.new(user) } | ||||||
|  |  | ||||||
|  |   let(:user) { Fabricate(:user) } | ||||||
|  |  | ||||||
|  |   it_behaves_like 'a check available to devops users' | ||||||
|  |  | ||||||
|  |   describe 'pass?' do | ||||||
|  |     context 'when chewy is enabled' do | ||||||
|  |       before { allow(Chewy).to receive(:enabled?).and_return(true) } | ||||||
|  |  | ||||||
|  |       context 'when running version is present and high enough' do | ||||||
|  |         before do | ||||||
|  |           allow(Chewy.client).to receive(:info) | ||||||
|  |             .and_return({ 'version' => { 'number' => '999.99.9' } }) | ||||||
|  |         end | ||||||
|  |  | ||||||
|  |         it 'returns true' do | ||||||
|  |           expect(check.pass?).to be true | ||||||
|  |         end | ||||||
|  |       end | ||||||
|  |  | ||||||
|  |       context 'when running version is present and too low' do | ||||||
|  |         context 'when compatible version is too low' do | ||||||
|  |           before do | ||||||
|  |             allow(Chewy.client).to receive(:info) | ||||||
|  |               .and_return({ 'version' => { 'number' => '1.2.3', 'minimum_wire_compatibility_version' => '1.0' } }) | ||||||
|  |           end | ||||||
|  |  | ||||||
|  |           it 'returns false' do | ||||||
|  |             expect(check.pass?).to be false | ||||||
|  |           end | ||||||
|  |         end | ||||||
|  |  | ||||||
|  |         context 'when compatible version is high enough' do | ||||||
|  |           before do | ||||||
|  |             allow(Chewy.client).to receive(:info) | ||||||
|  |               .and_return({ 'version' => { 'number' => '1.2.3', 'minimum_wire_compatibility_version' => '99.9' } }) | ||||||
|  |           end | ||||||
|  |  | ||||||
|  |           it 'returns true' do | ||||||
|  |             expect(check.pass?).to be true | ||||||
|  |           end | ||||||
|  |         end | ||||||
|  |       end | ||||||
|  |  | ||||||
|  |       context 'when running version is missing' do | ||||||
|  |         before do | ||||||
|  |           client = instance_double(Elasticsearch::Transport::Client) | ||||||
|  |           allow(client).to receive(:info).and_raise(Elasticsearch::Transport::Transport::Error) | ||||||
|  |           allow(Chewy).to receive(:client).and_return(client) | ||||||
|  |         end | ||||||
|  |  | ||||||
|  |         it 'returns false' do | ||||||
|  |           expect(check.pass?).to be false | ||||||
|  |         end | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |  | ||||||
|  |     context 'when chewy is not enabled' do | ||||||
|  |       before { allow(Chewy).to receive(:enabled?).and_return(false) } | ||||||
|  |  | ||||||
|  |       it 'returns true' do | ||||||
|  |         expect(check.pass?).to be true | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   describe 'message' do | ||||||
|  |     context 'when running version is present' do | ||||||
|  |       before { allow(Chewy.client).to receive(:info).and_return({ 'version' => { 'number' => '999.99.9' } }) } | ||||||
|  |  | ||||||
|  |       it 'sends class name symbol to message instance' do | ||||||
|  |         allow(Admin::SystemCheck::Message).to receive(:new) | ||||||
|  |           .with(:elasticsearch_version_check, anything) | ||||||
|  |  | ||||||
|  |         check.message | ||||||
|  |  | ||||||
|  |         expect(Admin::SystemCheck::Message).to have_received(:new) | ||||||
|  |           .with(:elasticsearch_version_check, 'Elasticsearch 999.99.9 is running while 7.x is required') | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |  | ||||||
|  |     context 'when running version is missing' do | ||||||
|  |       it 'sends class name symbol to message instance' do | ||||||
|  |         allow(Admin::SystemCheck::Message).to receive(:new) | ||||||
|  |           .with(:elasticsearch_running_check) | ||||||
|  |  | ||||||
|  |         check.message | ||||||
|  |  | ||||||
|  |         expect(Admin::SystemCheck::Message).to have_received(:new) | ||||||
|  |           .with(:elasticsearch_running_check) | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
							
								
								
									
										33
									
								
								spec/lib/admin/system_check/media_privacy_check_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								spec/lib/admin/system_check/media_privacy_check_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | |||||||
|  | # frozen_string_literal: true | ||||||
|  |  | ||||||
|  | require 'rails_helper' | ||||||
|  |  | ||||||
|  | describe Admin::SystemCheck::MediaPrivacyCheck do | ||||||
|  |   subject(:check) { described_class.new(user) } | ||||||
|  |  | ||||||
|  |   let(:user) { Fabricate(:user) } | ||||||
|  |  | ||||||
|  |   it_behaves_like 'a check available to devops users' | ||||||
|  |  | ||||||
|  |   describe 'pass?' do | ||||||
|  |     context 'when the media cannot be listed' do | ||||||
|  |       before do | ||||||
|  |         stub_request(:get, /ngrok.io/).to_return(status: 200, body: 'a list of no files') | ||||||
|  |       end | ||||||
|  |  | ||||||
|  |       it 'returns true' do | ||||||
|  |         expect(check.pass?).to be true | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   describe 'message' do | ||||||
|  |     it 'sends values to message instance' do | ||||||
|  |       allow(Admin::SystemCheck::Message).to receive(:new).with(nil, nil, nil, true) | ||||||
|  |  | ||||||
|  |       check.message | ||||||
|  |  | ||||||
|  |       expect(Admin::SystemCheck::Message).to have_received(:new).with(nil, nil, nil, true) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
							
								
								
									
										14
									
								
								spec/lib/admin/system_check/message_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								spec/lib/admin/system_check/message_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | # frozen_string_literal: true | ||||||
|  |  | ||||||
|  | require 'rails_helper' | ||||||
|  |  | ||||||
|  | describe Admin::SystemCheck::Message do | ||||||
|  |   subject(:check) { described_class.new(:key_value, :value_value, :action_value, :critical_value) } | ||||||
|  |  | ||||||
|  |   it 'providers readers when initialized' do | ||||||
|  |     expect(check.key).to eq :key_value | ||||||
|  |     expect(check.value).to eq :value_value | ||||||
|  |     expect(check.action).to eq :action_value | ||||||
|  |     expect(check.critical).to eq :critical_value | ||||||
|  |   end | ||||||
|  | end | ||||||
							
								
								
									
										53
									
								
								spec/lib/admin/system_check/rules_check_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								spec/lib/admin/system_check/rules_check_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | |||||||
|  | # frozen_string_literal: true | ||||||
|  |  | ||||||
|  | require 'rails_helper' | ||||||
|  |  | ||||||
|  | describe Admin::SystemCheck::RulesCheck do | ||||||
|  |   subject(:check) { described_class.new(user) } | ||||||
|  |  | ||||||
|  |   let(:user) { Fabricate(:user) } | ||||||
|  |  | ||||||
|  |   describe 'skip?' do | ||||||
|  |     context 'when user can manage rules' do | ||||||
|  |       before { allow(user).to receive(:can?).with(:manage_rules).and_return(true) } | ||||||
|  |  | ||||||
|  |       it 'returns false' do | ||||||
|  |         expect(check.skip?).to be false | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |  | ||||||
|  |     context 'when user cannot manage rules' do | ||||||
|  |       before { allow(user).to receive(:can?).with(:manage_rules).and_return(false) } | ||||||
|  |  | ||||||
|  |       it 'returns true' do | ||||||
|  |         expect(check.skip?).to be true | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   describe 'pass?' do | ||||||
|  |     context 'when there is not a kept rule' do | ||||||
|  |       it 'returns false' do | ||||||
|  |         expect(check.pass?).to be false | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |  | ||||||
|  |     context 'when there is a kept rule' do | ||||||
|  |       before { Fabricate(:rule) } | ||||||
|  |  | ||||||
|  |       it 'returns true' do | ||||||
|  |         expect(check.pass?).to be true | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   describe 'message' do | ||||||
|  |     it 'sends class name symbol to message instance' do | ||||||
|  |       allow(Admin::SystemCheck::Message).to receive(:new).with(:rules_check, nil, '/admin/rules') | ||||||
|  |  | ||||||
|  |       check.message | ||||||
|  |  | ||||||
|  |       expect(Admin::SystemCheck::Message).to have_received(:new).with(:rules_check, nil, '/admin/rules') | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
							
								
								
									
										45
									
								
								spec/lib/admin/system_check/sidekiq_process_check_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								spec/lib/admin/system_check/sidekiq_process_check_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | |||||||
|  | # frozen_string_literal: true | ||||||
|  |  | ||||||
|  | require 'rails_helper' | ||||||
|  |  | ||||||
|  | describe Admin::SystemCheck::SidekiqProcessCheck do | ||||||
|  |   subject(:check) { described_class.new(user) } | ||||||
|  |  | ||||||
|  |   let(:user) { Fabricate(:user) } | ||||||
|  |  | ||||||
|  |   it_behaves_like 'a check available to devops users' | ||||||
|  |  | ||||||
|  |   describe 'pass?' do | ||||||
|  |     context 'when missing queues is empty' do | ||||||
|  |       before do | ||||||
|  |         process_set = instance_double(Sidekiq::ProcessSet, reduce: []) | ||||||
|  |         allow(Sidekiq::ProcessSet).to receive(:new).and_return(process_set) | ||||||
|  |       end | ||||||
|  |  | ||||||
|  |       it 'returns true' do | ||||||
|  |         expect(check.pass?).to be true | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |  | ||||||
|  |     context 'when missing queues is not empty' do | ||||||
|  |       before do | ||||||
|  |         process_set = instance_double(Sidekiq::ProcessSet, reduce: [:something]) | ||||||
|  |         allow(Sidekiq::ProcessSet).to receive(:new).and_return(process_set) | ||||||
|  |       end | ||||||
|  |  | ||||||
|  |       it 'returns false' do | ||||||
|  |         expect(check.pass?).to be false | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   describe 'message' do | ||||||
|  |     it 'sends values to message instance' do | ||||||
|  |       allow(Admin::SystemCheck::Message).to receive(:new).with(:sidekiq_process_check, 'default, push, mailers, pull, scheduler, ingress') | ||||||
|  |  | ||||||
|  |       check.message | ||||||
|  |  | ||||||
|  |       expect(Admin::SystemCheck::Message).to have_received(:new).with(:sidekiq_process_check, 'default, push, mailers, pull, scheduler, ingress') | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
							
								
								
									
										15
									
								
								spec/lib/admin/system_check_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								spec/lib/admin/system_check_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | |||||||
|  | # frozen_string_literal: true | ||||||
|  |  | ||||||
|  | require 'rails_helper' | ||||||
|  |  | ||||||
|  | describe Admin::SystemCheck do | ||||||
|  |   let(:user) { Fabricate(:user) } | ||||||
|  |  | ||||||
|  |   describe 'perform' do | ||||||
|  |     let(:result) { described_class.perform(user) } | ||||||
|  |  | ||||||
|  |     it 'runs all the checks' do | ||||||
|  |       expect(result).to be_an(Array) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
							
								
								
									
										21
									
								
								spec/support/examples/lib/admin/checks.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								spec/support/examples/lib/admin/checks.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | |||||||
|  | # frozen_string_literal: true | ||||||
|  |  | ||||||
|  | shared_examples 'a check available to devops users' do | ||||||
|  |   describe 'skip?' do | ||||||
|  |     context 'when user can view devops' do | ||||||
|  |       before { allow(user).to receive(:can?).with(:view_devops).and_return(true) } | ||||||
|  |  | ||||||
|  |       it 'returns false' do | ||||||
|  |         expect(check.skip?).to be false | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |  | ||||||
|  |     context 'when user cannot view devops' do | ||||||
|  |       before { allow(user).to receive(:can?).with(:view_devops).and_return(false) } | ||||||
|  |  | ||||||
|  |       it 'returns true' do | ||||||
|  |         expect(check.skip?).to be true | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
		Reference in New Issue
	
	Block a user