Merge remote-tracking branch 'parent/main' into upstream-20240906

This commit is contained in:
KMY 2024-09-06 08:42:24 +09:00
commit f18eabfe75
689 changed files with 4369 additions and 2434 deletions

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Dimension::InstanceAccountsDimension do
RSpec.describe Admin::Metrics::Dimension::InstanceAccountsDimension do
subject { described_class.new(start_at, end_at, limit, params) }
let(:start_at) { 2.days.ago }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Dimension::InstanceLanguagesDimension do
RSpec.describe Admin::Metrics::Dimension::InstanceLanguagesDimension do
subject { described_class.new(start_at, end_at, limit, params) }
let(:start_at) { 2.days.ago }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Dimension::LanguagesDimension do
RSpec.describe Admin::Metrics::Dimension::LanguagesDimension do
subject { described_class.new(start_at, end_at, limit, params) }
let(:start_at) { 2.days.ago }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Dimension::ServersDimension do
RSpec.describe Admin::Metrics::Dimension::ServersDimension do
subject { described_class.new(start_at, end_at, limit, params) }
let(:start_at) { 2.days.ago }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Dimension::SoftwareVersionsDimension do
RSpec.describe Admin::Metrics::Dimension::SoftwareVersionsDimension do
subject { described_class.new(start_at, end_at, limit, params) }
let(:start_at) { 2.days.ago }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Dimension::SourcesDimension do
RSpec.describe Admin::Metrics::Dimension::SourcesDimension do
subject { described_class.new(start_at, end_at, limit, params) }
let(:start_at) { 2.days.ago }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Dimension::SpaceUsageDimension do
RSpec.describe Admin::Metrics::Dimension::SpaceUsageDimension do
subject { described_class.new(start_at, end_at, limit, params) }
let(:start_at) { 2.days.ago }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Dimension::TagLanguagesDimension do
RSpec.describe Admin::Metrics::Dimension::TagLanguagesDimension do
subject { described_class.new(start_at, end_at, limit, params) }
let(:start_at) { 2.days.ago }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Dimension::TagServersDimension do
RSpec.describe Admin::Metrics::Dimension::TagServersDimension do
subject { described_class.new(start_at, end_at, limit, params) }
let(:start_at) { 2.days.ago }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Dimension do
RSpec.describe Admin::Metrics::Dimension do
describe '.retrieve' do
subject { described_class.retrieve(reports, start_at, end_at, 5, params) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Measure::ActiveUsersMeasure do
RSpec.describe Admin::Metrics::Measure::ActiveUsersMeasure do
subject { described_class.new(start_at, end_at, params) }
let(:start_at) { 2.days.ago }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Measure::InstanceAccountsMeasure do
RSpec.describe Admin::Metrics::Measure::InstanceAccountsMeasure do
subject { described_class.new(start_at, end_at, params) }
let(:domain) { 'example.com' }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Measure::InstanceFollowersMeasure do
RSpec.describe Admin::Metrics::Measure::InstanceFollowersMeasure do
subject { described_class.new(start_at, end_at, params) }
let(:domain) { 'example.com' }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Measure::InstanceFollowsMeasure do
RSpec.describe Admin::Metrics::Measure::InstanceFollowsMeasure do
subject { described_class.new(start_at, end_at, params) }
let(:domain) { 'example.com' }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Measure::InstanceMediaAttachmentsMeasure do
RSpec.describe Admin::Metrics::Measure::InstanceMediaAttachmentsMeasure do
subject { described_class.new(start_at, end_at, params) }
let(:domain) { 'example.com' }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Measure::InstanceReportsMeasure do
RSpec.describe Admin::Metrics::Measure::InstanceReportsMeasure do
subject { described_class.new(start_at, end_at, params) }
let(:domain) { 'example.com' }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Measure::InstanceStatusesMeasure do
RSpec.describe Admin::Metrics::Measure::InstanceStatusesMeasure do
subject { described_class.new(start_at, end_at, params) }
let(:domain) { 'example.com' }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Measure::InteractionsMeasure do
RSpec.describe Admin::Metrics::Measure::InteractionsMeasure do
subject { described_class.new(start_at, end_at, params) }
let(:start_at) { 2.days.ago }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Measure::NewUsersMeasure do
RSpec.describe Admin::Metrics::Measure::NewUsersMeasure do
subject { described_class.new(start_at, end_at, params) }
let(:start_at) { 2.days.ago }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Measure::OpenedReportsMeasure do
RSpec.describe Admin::Metrics::Measure::OpenedReportsMeasure do
subject { described_class.new(start_at, end_at, params) }
let(:start_at) { 2.days.ago }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Measure::ResolvedReportsMeasure do
RSpec.describe Admin::Metrics::Measure::ResolvedReportsMeasure do
subject { described_class.new(start_at, end_at, params) }
let(:start_at) { 2.days.ago }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Measure::TagAccountsMeasure do
RSpec.describe Admin::Metrics::Measure::TagAccountsMeasure do
subject { described_class.new(start_at, end_at, params) }
let!(:tag) { Fabricate(:tag) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Measure::TagServersMeasure do
RSpec.describe Admin::Metrics::Measure::TagServersMeasure do
subject { described_class.new(start_at, end_at, params) }
let!(:tag) { Fabricate(:tag) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Measure::TagUsesMeasure do
RSpec.describe Admin::Metrics::Measure::TagUsesMeasure do
subject { described_class.new(start_at, end_at, params) }
let!(:tag) { Fabricate(:tag) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::Metrics::Measure do
RSpec.describe Admin::Metrics::Measure do
describe '.retrieve' do
subject { described_class.retrieve(reports, start_at, end_at, params) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::SystemCheck::BaseCheck do
RSpec.describe Admin::SystemCheck::BaseCheck do
subject(:check) { described_class.new(user) }
let(:user) { Fabricate(:user) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::SystemCheck::DatabaseSchemaCheck do
RSpec.describe Admin::SystemCheck::DatabaseSchemaCheck do
subject(:check) { described_class.new(user) }
let(:user) { Fabricate(:user) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::SystemCheck::ElasticsearchCheck do
RSpec.describe Admin::SystemCheck::ElasticsearchCheck do
subject(:check) { described_class.new(user) }
let(:user) { Fabricate(:user) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::SystemCheck::MediaPrivacyCheck do
RSpec.describe Admin::SystemCheck::MediaPrivacyCheck do
subject(:check) { described_class.new(user) }
let(:user) { Fabricate(:user) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::SystemCheck::Message do
RSpec.describe Admin::SystemCheck::Message do
subject(:check) { described_class.new(:key_value, :value_value, :action_value, :critical_value) }
it 'providers readers when initialized' do

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::SystemCheck::RulesCheck do
RSpec.describe Admin::SystemCheck::RulesCheck do
subject(:check) { described_class.new(user) }
let(:user) { Fabricate(:user) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::SystemCheck::SidekiqProcessCheck do
RSpec.describe Admin::SystemCheck::SidekiqProcessCheck do
subject(:check) { described_class.new(user) }
let(:user) { Fabricate(:user) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::SystemCheck::SoftwareVersionCheck do
RSpec.describe Admin::SystemCheck::SoftwareVersionCheck do
include RoutingHelper
subject(:check) { described_class.new(user) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Admin::SystemCheck do
RSpec.describe Admin::SystemCheck do
let(:user) { Fabricate(:user) }
describe 'perform' do

View file

@ -0,0 +1,16 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe AnnualReport do
describe '#generate' do
subject { described_class.new(account, Time.zone.now.year) }
let(:account) { Fabricate :account }
it 'builds a report for an account' do
expect { subject.generate }
.to change(GeneratedAnnualReport, :count).by(1)
end
end
end

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe CacheBuster do
RSpec.describe CacheBuster do
subject { described_class.new(secret_header: secret_header, secret: secret, http_method: http_method) }
let(:secret_header) { nil }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe ConnectionPool::SharedConnectionPool do
RSpec.describe ConnectionPool::SharedConnectionPool do
subject { described_class.new(size: 5, timeout: 5) { |site| mini_connection_class.new(site) } }
let(:mini_connection_class) do

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe ConnectionPool::SharedTimedStack do
RSpec.describe ConnectionPool::SharedTimedStack do
subject { described_class.new(5) { |site| mini_connection_class.new(site) } }
let(:mini_connection_class) do

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe ContentSecurityPolicy do
RSpec.describe ContentSecurityPolicy do
subject { described_class.new }
around do |example|

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe DeliveryFailureTracker do
RSpec.describe DeliveryFailureTracker do
subject { described_class.new('http://example.com/inbox') }
describe '#track_success!' do

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Extractor do
RSpec.describe Extractor do
describe 'extract_mentions_or_lists_with_indices' do
it 'returns an empty array if the given string does not have at signs' do
text = 'a string without at signs'

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe FastIpMap do
RSpec.describe FastIpMap do
describe '#include?' do
subject { described_class.new([IPAddr.new('20.4.0.0/16'), IPAddr.new('145.22.30.0/24'), IPAddr.new('189.45.86.3')]) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe HashtagNormalizer do
RSpec.describe HashtagNormalizer do
subject { described_class.new }
describe '#normalize' do

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Importer::AccountsIndexImporter do
RSpec.describe Importer::AccountsIndexImporter do
describe 'import!' do
let(:pool) { Concurrent::FixedThreadPool.new(5) }
let(:importer) { described_class.new(batch_size: 123, executor: pool) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Importer::BaseImporter do
RSpec.describe Importer::BaseImporter do
describe 'import!' do
let(:pool) { Concurrent::FixedThreadPool.new(5) }
let(:importer) { described_class.new(batch_size: 123, executor: pool) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Importer::PublicStatusesIndexImporter do
RSpec.describe Importer::PublicStatusesIndexImporter do
describe 'import!' do
let(:pool) { Concurrent::FixedThreadPool.new(5) }
let(:importer) { described_class.new(batch_size: 123, executor: pool) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Importer::StatusesIndexImporter do
RSpec.describe Importer::StatusesIndexImporter do
describe 'import!' do
let(:pool) { Concurrent::FixedThreadPool.new(5) }
let(:importer) { described_class.new(batch_size: 123, executor: pool) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Importer::TagsIndexImporter do
RSpec.describe Importer::TagsIndexImporter do
describe 'import!' do
let(:pool) { Concurrent::FixedThreadPool.new(5) }
let(:importer) { described_class.new(batch_size: 123, executor: pool) }

View file

@ -3,7 +3,7 @@
require 'rails_helper'
require 'mastodon/cli/accounts'
describe Mastodon::CLI::Accounts do
RSpec.describe Mastodon::CLI::Accounts do
subject { cli.invoke(action, arguments, options) }
let(:cli) { described_class.new }
@ -613,6 +613,25 @@ describe Mastodon::CLI::Accounts do
end
end
describe '#fix_duplicates' do
let(:action) { :fix_duplicates }
let(:service_double) { instance_double(ActivityPub::FetchRemoteAccountService, call: nil) }
let(:uri) { 'https://host.example/same/value' }
context 'when there are duplicate URI accounts' do
before do
Fabricate.times(2, :account, domain: 'host.example', uri: uri)
allow(ActivityPub::FetchRemoteAccountService).to receive(:new).and_return(service_double)
end
it 'finds the duplicates and calls fetch remote account service' do
expect { subject }
.to output_results('Duplicates found')
expect(service_double).to have_received(:call).with(uri)
end
end
end
describe '#backup' do
let(:action) { :backup }

View file

@ -3,7 +3,7 @@
require 'rails_helper'
require 'mastodon/cli/cache'
describe Mastodon::CLI::Cache do
RSpec.describe Mastodon::CLI::Cache do
subject { cli.invoke(action, arguments, options) }
let(:cli) { described_class.new }

View file

@ -3,7 +3,7 @@
require 'rails_helper'
require 'mastodon/cli/canonical_email_blocks'
describe Mastodon::CLI::CanonicalEmailBlocks do
RSpec.describe Mastodon::CLI::CanonicalEmailBlocks do
subject { cli.invoke(action, arguments, options) }
let(:cli) { described_class.new }

View file

@ -3,7 +3,7 @@
require 'rails_helper'
require 'mastodon/cli/domains'
describe Mastodon::CLI::Domains do
RSpec.describe Mastodon::CLI::Domains do
subject { cli.invoke(action, arguments, options) }
let(:cli) { described_class.new }

View file

@ -3,7 +3,7 @@
require 'rails_helper'
require 'mastodon/cli/email_domain_blocks'
describe Mastodon::CLI::EmailDomainBlocks do
RSpec.describe Mastodon::CLI::EmailDomainBlocks do
subject { cli.invoke(action, arguments, options) }
let(:cli) { described_class.new }

View file

@ -3,7 +3,7 @@
require 'rails_helper'
require 'mastodon/cli/emoji'
describe Mastodon::CLI::Emoji do
RSpec.describe Mastodon::CLI::Emoji do
subject { cli.invoke(action, arguments, options) }
let(:cli) { described_class.new }

View file

@ -3,7 +3,7 @@
require 'rails_helper'
require 'mastodon/cli/feeds'
describe Mastodon::CLI::Feeds do
RSpec.describe Mastodon::CLI::Feeds do
subject { cli.invoke(action, arguments, options) }
let(:cli) { described_class.new }

View file

@ -3,7 +3,7 @@
require 'rails_helper'
require 'mastodon/cli/ip_blocks'
describe Mastodon::CLI::IpBlocks do
RSpec.describe Mastodon::CLI::IpBlocks do
subject { cli.invoke(action, arguments, options) }
let(:cli) { described_class.new }

View file

@ -3,7 +3,7 @@
require 'rails_helper'
require 'mastodon/cli/main'
describe Mastodon::CLI::Main do
RSpec.describe Mastodon::CLI::Main do
subject { cli.invoke(action, arguments, options) }
let(:cli) { described_class.new }

View file

@ -3,7 +3,7 @@
require 'rails_helper'
require 'mastodon/cli/maintenance'
describe Mastodon::CLI::Maintenance do
RSpec.describe Mastodon::CLI::Maintenance do
subject { cli.invoke(action, arguments, options) }
let(:cli) { described_class.new }

View file

@ -3,7 +3,7 @@
require 'rails_helper'
require 'mastodon/cli/media'
describe Mastodon::CLI::Media do
RSpec.describe Mastodon::CLI::Media do
subject { cli.invoke(action, arguments, options) }
let(:cli) { described_class.new }

View file

@ -3,7 +3,7 @@
require 'rails_helper'
require 'mastodon/cli/preview_cards'
describe Mastodon::CLI::PreviewCards do
RSpec.describe Mastodon::CLI::PreviewCards do
subject { cli.invoke(action, arguments, options) }
let(:cli) { described_class.new }

View file

@ -3,7 +3,7 @@
require 'rails_helper'
require 'mastodon/cli/search'
describe Mastodon::CLI::Search do
RSpec.describe Mastodon::CLI::Search do
subject { cli.invoke(action, arguments, options) }
let(:cli) { described_class.new }

View file

@ -3,7 +3,7 @@
require 'rails_helper'
require 'mastodon/cli/settings'
describe Mastodon::CLI::Settings do
RSpec.describe Mastodon::CLI::Settings do
it_behaves_like 'CLI Command'
describe 'subcommand "registrations"' do

View file

@ -3,7 +3,7 @@
require 'rails_helper'
require 'mastodon/cli/statuses'
describe Mastodon::CLI::Statuses do
RSpec.describe Mastodon::CLI::Statuses do
subject { cli.invoke(action, arguments, options) }
let(:cli) { described_class.new }

View file

@ -3,7 +3,7 @@
require 'rails_helper'
require 'mastodon/cli/upgrade'
describe Mastodon::CLI::Upgrade do
RSpec.describe Mastodon::CLI::Upgrade do
subject { cli.invoke(action, arguments, options) }
let(:cli) { described_class.new }

View file

@ -3,7 +3,7 @@
require 'rails_helper'
require 'mastodon/migration_warning'
describe Mastodon::MigrationWarning do
RSpec.describe Mastodon::MigrationWarning do
describe 'migration_duration_warning' do
before do
allow(migration).to receive(:valid_environment?).and_return(true)

View file

@ -0,0 +1,263 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Mastodon::RedisConfiguration do
let(:redis_environment) { described_class.new }
before do
# We use one numbered namespace per parallel test runner
# in the test env. This here should test the non-test
# behavior, so we disable it temporarily.
allow(Rails.env).to receive(:test?).and_return(false)
end
shared_examples 'setting a different driver' do
context 'when setting the `REDIS_DRIVER` variable to `ruby`' do
around do |example|
ClimateControl.modify REDIS_DRIVER: 'ruby' do
example.run
end
end
it 'sets the driver accordingly' do
expect(subject[:driver]).to eq :ruby
end
end
end
shared_examples 'setting a namespace' do
context 'when setting the `REDIS_NAMESPACE` variable' do
around do |example|
ClimateControl.modify REDIS_NAMESPACE: 'testns' do
example.run
end
end
it 'uses the value for the namespace' do
expect(subject[:namespace]).to eq 'testns'
end
end
end
shared_examples 'secondary configuration' do |prefix|
context "when no `#{prefix}_REDIS_` environment variables are present" do
it 'uses the url from the base config' do
expect(subject[:url]).to eq 'redis://localhost:6379/0'
end
context 'when the base config uses sentinel' do
around do |example|
ClimateControl.modify REDIS_SENTINELS: '192.168.0.1:3000,192.168.0.2:4000', REDIS_SENTINEL_MASTER: 'mainsentinel' do
example.run
end
end
it 'uses the sentinel configuration from base config' do
expect(subject[:url]).to eq 'redis://mainsentinel/0'
expect(subject[:name]).to eq 'mainsentinel'
expect(subject[:sentinels]).to contain_exactly({ host: '192.168.0.1', port: 3000 }, { host: '192.168.0.2', port: 4000 })
end
end
end
context "when the `#{prefix}_REDIS_URL` environment variable is present" do
around do |example|
ClimateControl.modify "#{prefix}_REDIS_URL": 'redis::/user@other.example.com/4' do
example.run
end
end
it 'uses the provided URL' do
expect(subject[:url]).to eq 'redis::/user@other.example.com/4'
end
end
context 'when giving separate environment variables' do
around do |example|
ClimateControl.modify "#{prefix}_REDIS_PASSWORD": 'testpass1', "#{prefix}_REDIS_HOST": 'redis2.example.com', "#{prefix}_REDIS_PORT": '3322', "#{prefix}_REDIS_DB": '8' do
example.run
end
end
it 'constructs the url from them' do
expect(subject[:url]).to eq 'redis://:testpass1@redis2.example.com:3322/8'
end
end
end
shared_examples 'sentinel support' do |prefix = nil|
prefix = prefix ? "#{prefix}_" : ''
context 'when configuring sentinel support' do
around do |example|
ClimateControl.modify "#{prefix}REDIS_PASSWORD": 'testpass1', "#{prefix}REDIS_HOST": 'redis2.example.com', "#{prefix}REDIS_SENTINELS": '192.168.0.1:3000,192.168.0.2:4000', "#{prefix}REDIS_SENTINEL_MASTER": 'mainsentinel' do
example.run
end
end
it 'constructs the url using the sentinel master name' do
expect(subject[:url]).to eq 'redis://:testpass1@mainsentinel/0'
end
it 'uses the redis password to authenticate with sentinels' do
expect(subject[:sentinel_password]).to eq 'testpass1'
end
it 'includes the sentinel master name and list of sentinels' do
expect(subject[:name]).to eq 'mainsentinel'
expect(subject[:sentinels]).to contain_exactly({ host: '192.168.0.1', port: 3000 }, { host: '192.168.0.2', port: 4000 })
end
context "when giving dedicated credentials in `#{prefix}REDIS_SENTINEL_USERNAME` and `#{prefix}REDIS_SENTINEL_PASSWORD`" do
around do |example|
ClimateControl.modify "#{prefix}REDIS_SENTINEL_USERNAME": 'sentinel_user', "#{prefix}REDIS_SENTINEL_PASSWORD": 'sentinel_pass1' do
example.run
end
end
it 'uses the credential to authenticate with sentinels' do
expect(subject[:sentinel_username]).to eq 'sentinel_user'
expect(subject[:sentinel_password]).to eq 'sentinel_pass1'
end
end
end
context 'when giving sentinels without port numbers' do
context "when no default port is given via `#{prefix}REDIS_SENTINEL_PORT`" do
around do |example|
ClimateControl.modify "#{prefix}REDIS_SENTINELS": '192.168.0.1,192.168.0.2', "#{prefix}REDIS_SENTINEL_MASTER": 'mainsentinel' do
example.run
end
end
it 'uses the default sentinel port' do
expect(subject[:sentinels]).to contain_exactly({ host: '192.168.0.1', port: 26_379 }, { host: '192.168.0.2', port: 26_379 })
end
end
context 'when adding port numbers to some, but not all sentinels' do
around do |example|
ClimateControl.modify "#{prefix}REDIS_SENTINELS": '192.168.0.1:5678,192.168.0.2', "#{prefix}REDIS_SENTINEL_MASTER": 'mainsentinel' do
example.run
end
end
it 'uses the given port number when available and the default otherwise' do
expect(subject[:sentinels]).to contain_exactly({ host: '192.168.0.1', port: 5678 }, { host: '192.168.0.2', port: 26_379 })
end
end
context "when a default port is given via `#{prefix}REDIS_SENTINEL_PORT`" do
around do |example|
ClimateControl.modify "#{prefix}REDIS_SENTINEL_PORT": '1234', "#{prefix}REDIS_SENTINELS": '192.168.0.1,192.168.0.2', "#{prefix}REDIS_SENTINEL_MASTER": 'mainsentinel' do
example.run
end
end
it 'uses the given port number' do
expect(subject[:sentinels]).to contain_exactly({ host: '192.168.0.1', port: 1234 }, { host: '192.168.0.2', port: 1234 })
end
end
end
end
describe '#base' do
subject { redis_environment.base }
context 'when no `REDIS_` environment variables are present' do
it 'uses defaults' do
expect(subject).to eq({
url: 'redis://localhost:6379/0',
driver: :hiredis,
namespace: nil,
})
end
end
context 'when the `REDIS_URL` environment variable is present' do
around do |example|
ClimateControl.modify REDIS_URL: 'redis::/user@example.com/2' do
example.run
end
end
it 'uses the provided URL' do
expect(subject).to eq({
url: 'redis::/user@example.com/2',
driver: :hiredis,
namespace: nil,
})
end
end
context 'when giving separate environment variables' do
around do |example|
ClimateControl.modify REDIS_PASSWORD: 'testpass', REDIS_HOST: 'redis.example.com', REDIS_PORT: '3333', REDIS_DB: '3' do
example.run
end
end
it 'constructs the url from them' do
expect(subject).to eq({
url: 'redis://:testpass@redis.example.com:3333/3',
driver: :hiredis,
namespace: nil,
})
end
end
include_examples 'setting a different driver'
include_examples 'setting a namespace'
include_examples 'sentinel support'
end
describe '#sidekiq' do
subject { redis_environment.sidekiq }
include_examples 'secondary configuration', 'SIDEKIQ'
include_examples 'setting a different driver'
include_examples 'setting a namespace'
include_examples 'sentinel support', 'SIDEKIQ'
end
describe '#cache' do
subject { redis_environment.cache }
it 'includes extra configuration' do
expect(subject).to eq({
url: 'redis://localhost:6379/0',
driver: :hiredis,
namespace: 'cache',
expires_in: 10.minutes,
connect_timeout: 5,
pool: {
size: 5,
timeout: 5,
},
})
end
context 'when `REDIS_NAMESPACE` is not set' do
it 'uses the `cache` namespace' do
expect(subject[:namespace]).to eq 'cache'
end
end
context 'when setting the `REDIS_NAMESPACE` variable' do
around do |example|
ClimateControl.modify REDIS_NAMESPACE: 'testns' do
example.run
end
end
it 'attaches the `_cache` postfix to the namespace' do
expect(subject[:namespace]).to eq 'testns_cache'
end
end
include_examples 'secondary configuration', 'CACHE'
include_examples 'setting a different driver'
include_examples 'sentinel support', 'CACHE'
end
end

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe OStatus::TagManager do
RSpec.describe OStatus::TagManager do
describe '#unique_tag' do
it 'returns a unique tag' do
expect(described_class.instance.unique_tag(Time.utc(2000), 12, 'Status')).to eq 'tag:cb6e6126.ngrok.io,2000-01-01:objectId=12:objectType=Status'

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Paperclip::ResponseWithLimitAdapter do
RSpec.describe Paperclip::ResponseWithLimitAdapter do
subject { described_class.new(response_with_limit) }
before { stub_request(:get, url).to_return(headers: headers, body: body) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe PermalinkRedirector do
RSpec.describe PermalinkRedirector do
let(:remote_account) { Fabricate(:account, username: 'alice', domain: 'example.com', url: 'https://example.com/@alice', id: 2) }
describe '#redirect_url' do

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe RequestPool do
RSpec.describe RequestPool do
subject { described_class.new }
describe '#with' do

View file

@ -3,7 +3,7 @@
require 'rails_helper'
require 'securerandom'
describe Request do
RSpec.describe Request do
subject { described_class.new(:get, 'http://example.com') }
describe '#headers' do

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Sanitize::Config do
RSpec.describe Sanitize::Config do
describe '::MASTODON_STRICT' do
subject { described_class::MASTODON_STRICT }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe ScopeTransformer do
RSpec.describe ScopeTransformer do
describe '#apply' do
subject { described_class.new.apply(ScopeParser.new.parse(input)) }

View file

@ -3,7 +3,7 @@
require 'rails_helper'
require 'parslet/rig/rspec'
describe SearchQueryParser do
RSpec.describe SearchQueryParser do
let(:parser) { described_class.new }
context 'with term' do

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe SearchQueryTransformer do
RSpec.describe SearchQueryTransformer do
subject { described_class.new.apply(parser, current_account: account, searchability: :public) }
let(:account) { Fabricate(:account) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe StatusCacheHydrator do
RSpec.describe StatusCacheHydrator do
let(:status) { Fabricate(:status) }
let(:account) { Fabricate(:account) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe StatusFilter do
RSpec.describe StatusFilter do
describe '#filtered?' do
let(:status) { Fabricate(:status) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe StatusFinder do
RSpec.describe StatusFinder do
include RoutingHelper
describe '#status' do

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe StatusReachFinder do
RSpec.describe StatusReachFinder do
describe '#inboxes' do
context 'with a local status' do
subject { described_class.new(status) }

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe WebfingerResource do
RSpec.describe WebfingerResource do
around do |example|
before_local = Rails.configuration.x.local_domain
before_web = Rails.configuration.x.web_domain

View file

@ -2,7 +2,7 @@
require 'rails_helper'
describe Webhooks::PayloadRenderer do
RSpec.describe Webhooks::PayloadRenderer do
subject(:renderer) { described_class.new(json) }
let(:event) { Webhooks::EventPresenter.new(type, object) }