diff options
author | Claire <claire.github-309c@sitedethib.com> | 2023-04-09 22:43:21 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-09 22:43:21 +0200 |
commit | 14aa7b3c76c4d011a9ea3c05b007343b8ca1e203 (patch) | |
tree | d3147d9d92763b38631731422a3f4f9af3386314 /spec | |
parent | ff168ef2024626f37fa776fde5739dcd58ecb9f2 (diff) | |
parent | 63a39ae2faba65d0234a9f9e261e31dbf4bd5adb (diff) |
Merge pull request #2170 from ClearlyClaire/glitch-soc/merge-upstream
* Bump addressable from 2.8.1 to 2.8.2 (#24392) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump typescript from 4.9.5 to 5.0.3 (#24398) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Add typechecking in CI (#24405) * HTML string attributes set as booleans (#24408) * Ensure tabIndex is number instead of string (#24409) * Fix styling regressions from RTL layout refactor (#24415) * Enable Stylelint property-no-unknown (#24404) * SUBMIT doesn't exist on XMLHttpRequest (#24423) * Set marginRight as string (#24422) * Update display_media typing to string (#24416) * Bump aws-sdk-s3 from 1.119.2 to 1.120.0 (#24401) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump capybara from 3.38.0 to 3.39.0 (#24395) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump puma from 6.1.1 to 6.2.1 (#24402) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump rubocop from 1.48.1 to 1.49.0 (#24387) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Fix height of announcements not being updated when using reduced animations (#24354) * Check for missing JSON translations (#24338) * Fix user archive takeouts when using OpenStack Swift (#24431) * Fix DevContainer post-create warnings (#23977) * New Crowdin updates (#24378) Co-authored-by: Yamagishi Kazutoshi <ykzts@desire.sh> * Bump version to v4.1.2 (#24427) * Fix user settings migration script failing in some cases (#24453) * Fix account header image missing in low-res (#24433) * Remove Array.prototype.includes polyfill (#24234) * Remove duplicate ca-certificates Docker install (#24231) * Remove unused methods in 2FA OTP Auth Controller (#24220) * Update Node.js to 16.20.0 (#24316) * Expand coverage for "system checks" (#24216) * Fix loading spinner + infinite scroll for private mentions (#24446) * Fix tooltip for dates without time (#24244) * Fix crash in NotifyService when trying to send an email notification for post edits (#24460) * [Glitch] HTML string attributes set as booleans Port a425915ce7d1148e9505c87889936c4c497061dd to glitch-soc Signed-off-by: Claire <claire.github-309c@sitedethib.com> * [Glitch] SUBMIT doesn't exist on XMLHttpRequest Port ab3f23da916c8578148fe92fe008da19b8a7ed02 to glitch-soc Signed-off-by: Claire <claire.github-309c@sitedethib.com> * [Glitch] Set marginRight as string Port 927b2fd1386bce6fda1d2ff53ceadd82289d77ce to glitch-soc Signed-off-by: Claire <claire.github-309c@sitedethib.com> * [Glitch] Update display_media typing to string Port 17b2fd217730e6fd598aa6664373d8d7779c28c1 to glitch-soc Signed-off-by: Claire <claire.github-309c@sitedethib.com> * [Glitch] Fix height of announcements not being updated when using reduced animations Port ffd5b2eea4503c2ee389c7aa5dff9c51dbf9f846 to glitch-soc Signed-off-by: Claire <claire.github-309c@sitedethib.com> * [Glitch] Fix account header image missing in low-res Port d7b8c6db7ec4d9b3fe39cbf8f1b32d152e70b8f1 to glitch-soc Signed-off-by: Claire <claire.github-309c@sitedethib.com> * [Glitch] Remove Array.prototype.includes polyfill Port c0886dee1480cecedb7e8b152c848f061ab7f81e to glitch-soc Signed-off-by: Claire <claire.github-309c@sitedethib.com> * [Glitch] Fix tooltip for dates without time Port aa136cf2fa177af1fea59279cb8bab0b2a042b2b to glitch-soc Signed-off-by: Claire <claire.github-309c@sitedethib.com> * [Glitch] Enable Stylelint property-no-unknown Port cd14f712ad9f5a6ebdbec8c9b87740cd76d949e7 to glitch-soc Signed-off-by: Claire <claire.github-309c@sitedethib.com> * [Glitch] Fix loading spinner + infinite scroll for private mentions Port 9ef9974ff207fe91291c81c7a9b9bb83e0df8e16 to glitch-soc Signed-off-by: Claire <claire.github-309c@sitedethib.com> * [Glitch] Ensure tabIndex is number instead of string Port ec0c104bf25f2689c31bb79f9f447be1a9b3da7f to glitch-soc Signed-off-by: Claire <claire.github-309c@sitedethib.com> * [Glitch] Fix user settings migration script failing in some cases * Move glitch-soc-only translation strings out of `app/javascript/mastodono/locales` * Run `yarn manage:translations` --------- Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: Claire <claire.github-309c@sitedethib.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Nick Schonning <nschonni@gmail.com> Co-authored-by: Christian Schmidt <github@chsc.dk> Co-authored-by: Eugen Rochko <eugen@zeonfederated.com> Co-authored-by: Yamagishi Kazutoshi <ykzts@desire.sh> Co-authored-by: Matt Jankowski <matt@jankowski.online>
Diffstat (limited to 'spec')
-rw-r--r-- | spec/lib/admin/system_check/base_check_spec.rb | 27 | ||||
-rw-r--r-- | spec/lib/admin/system_check/database_schema_check_spec.rb | 45 | ||||
-rw-r--r-- | spec/lib/admin/system_check/elasticsearch_check_spec.rb | 100 | ||||
-rw-r--r-- | spec/lib/admin/system_check/media_privacy_check_spec.rb | 33 | ||||
-rw-r--r-- | spec/lib/admin/system_check/message_spec.rb | 14 | ||||
-rw-r--r-- | spec/lib/admin/system_check/rules_check_spec.rb | 53 | ||||
-rw-r--r-- | spec/lib/admin/system_check/sidekiq_process_check_spec.rb | 45 | ||||
-rw-r--r-- | spec/lib/admin/system_check_spec.rb | 15 | ||||
-rw-r--r-- | spec/support/examples/lib/admin/checks.rb | 21 |
9 files changed, 353 insertions, 0 deletions
diff --git a/spec/lib/admin/system_check/base_check_spec.rb b/spec/lib/admin/system_check/base_check_spec.rb new file mode 100644 index 000000000..fdd9f6b6c --- /dev/null +++ b/spec/lib/admin/system_check/base_check_spec.rb @@ -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 diff --git a/spec/lib/admin/system_check/database_schema_check_spec.rb b/spec/lib/admin/system_check/database_schema_check_spec.rb new file mode 100644 index 000000000..db1dcb52f --- /dev/null +++ b/spec/lib/admin/system_check/database_schema_check_spec.rb @@ -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 diff --git a/spec/lib/admin/system_check/elasticsearch_check_spec.rb b/spec/lib/admin/system_check/elasticsearch_check_spec.rb new file mode 100644 index 000000000..1ffac89ee --- /dev/null +++ b/spec/lib/admin/system_check/elasticsearch_check_spec.rb @@ -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 diff --git a/spec/lib/admin/system_check/media_privacy_check_spec.rb b/spec/lib/admin/system_check/media_privacy_check_spec.rb new file mode 100644 index 000000000..316bf1215 --- /dev/null +++ b/spec/lib/admin/system_check/media_privacy_check_spec.rb @@ -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 diff --git a/spec/lib/admin/system_check/message_spec.rb b/spec/lib/admin/system_check/message_spec.rb new file mode 100644 index 000000000..c0671f345 --- /dev/null +++ b/spec/lib/admin/system_check/message_spec.rb @@ -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 diff --git a/spec/lib/admin/system_check/rules_check_spec.rb b/spec/lib/admin/system_check/rules_check_spec.rb new file mode 100644 index 000000000..fb3293fb2 --- /dev/null +++ b/spec/lib/admin/system_check/rules_check_spec.rb @@ -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 diff --git a/spec/lib/admin/system_check/sidekiq_process_check_spec.rb b/spec/lib/admin/system_check/sidekiq_process_check_spec.rb new file mode 100644 index 000000000..9bd9daddf --- /dev/null +++ b/spec/lib/admin/system_check/sidekiq_process_check_spec.rb @@ -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 diff --git a/spec/lib/admin/system_check_spec.rb b/spec/lib/admin/system_check_spec.rb new file mode 100644 index 000000000..30048fd3a --- /dev/null +++ b/spec/lib/admin/system_check_spec.rb @@ -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 diff --git a/spec/support/examples/lib/admin/checks.rb b/spec/support/examples/lib/admin/checks.rb new file mode 100644 index 000000000..b50faa77b --- /dev/null +++ b/spec/support/examples/lib/admin/checks.rb @@ -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 |