diff --git a/.rubocop.yml b/.rubocop.yml index 9e9e5f7a..caa76467 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -52,6 +52,10 @@ RSpec/ExpectChange: RSpec/ImplicitSubject: EnforcedStyle: require_implicit +# aggregate_failures is defined with derived metadata for every spec +RSpec/MultipleExpectations: + Enabled: false + RSpec/MultipleMemoizedHelpers: Enabled: false diff --git a/spec/graphql/types/user_session_type_spec.rb b/spec/graphql/types/user_session_type_spec.rb index 6b850d4c..6599f09b 100644 --- a/spec/graphql/types/user_session_type_spec.rb +++ b/spec/graphql/types/user_session_type_spec.rb @@ -39,7 +39,7 @@ before { post_graphql query, headers: { authorization: "Session #{session.token}" } } - it 'does not expose token', :aggregate_failures do + it 'does not expose token' do expect(graphql_data_at(:current_authorization, :__typename)).to eq('UserSession') expect(graphql_data_at(:current_authorization, :id)).to eq(session.to_global_id.to_s) expect(graphql_data_at(:current_authorization, :token)).to be_nil diff --git a/spec/lib/sagittarius/context_spec.rb b/spec/lib/sagittarius/context_spec.rb index c83c8c5e..171318cc 100644 --- a/spec/lib/sagittarius/context_spec.rb +++ b/spec/lib/sagittarius/context_spec.rb @@ -4,7 +4,7 @@ RSpec.describe Sagittarius::Context do describe '.with_context' do - it 'builds a context with values from the previous one', :aggregate_failures do + it 'builds a context with values from the previous one' do inner = nil outer = nil @@ -19,7 +19,7 @@ expect(data_from(inner)).to eq(log_hash(described_class::CORRELATION_ID_KEY => 'hello', 'user' => 'username')) end - it 'builds a context with overwritten key/values in the newer context', :aggregate_failures do + it 'builds a context with overwritten key/values in the newer context' do inner = nil outer = nil @@ -46,7 +46,7 @@ end end - it 'pops the context from the stack when the block fails', :aggregate_failures do + it 'pops the context from the stack when the block fails' do expect { described_class.with_context { |_| raise('broken') } }.to raise_error('broken') expect(contexts).to be_empty @@ -104,7 +104,7 @@ described_class.pop(root_context) end - it 'returns the last context', :aggregate_failures do + it 'returns the last context' do expect(described_class.current).to eq(root_context) new_context = described_class.push @@ -194,7 +194,7 @@ end describe '#merge' do - it 'returns a new context with duplicated data', :aggregate_failures do + it 'returns a new context with duplicated data' do context = described_class.new(user: 'user') new_context = context.merge({}) @@ -211,7 +211,7 @@ expect(data_from(new_context)).to include(log_hash('root_namespace' => 'namespace', 'user' => 'u')) end - it 'removes empty values', :aggregate_failures do + it 'removes empty values' do context = described_class.new(project: 'p', root_namespace: 'n', user: 'u') new_context = context.merge(project: '', user: nil) @@ -221,7 +221,7 @@ described_class.log_key('user')) end - it 'keeps false values', :aggregate_failures do + it 'keeps false values' do context = described_class.new(project: 'p', root_namespace: 'n', flag: false) new_context = context.merge(project: '', false: nil) # rubocop:disable Lint/BooleanSymbol -- intended for this spec @@ -238,7 +238,7 @@ expect(new_context.correlation_id).to eq('hello') end - it 'generates a new correlation id if a blank one was passed', :aggregate_failures do + it 'generates a new correlation id if a blank one was passed' do context = described_class.new old_correlation_id = context.correlation_id diff --git a/spec/lib/sagittarius/database/postgresql_adapter/dump_schema_versions_mixin_spec.rb b/spec/lib/sagittarius/database/postgresql_adapter/dump_schema_versions_mixin_spec.rb index d904af1f..aa44c338 100644 --- a/spec/lib/sagittarius/database/postgresql_adapter/dump_schema_versions_mixin_spec.rb +++ b/spec/lib/sagittarius/database/postgresql_adapter/dump_schema_versions_mixin_spec.rb @@ -26,7 +26,7 @@ def original_dump_schema_information; end let(:instance) { instance_class.new } - it 'calls SchemaMigrations touch_all and skips original implementation', :aggregate_failures do + it 'calls SchemaMigrations touch_all and skips original implementation' do allow(Sagittarius::Database::SchemaMigrations).to receive(:touch_all) allow(instance).to receive(:original_dump_schema_information) diff --git a/spec/lib/sagittarius/database/postgresql_database_tasks/load_schema_versions_mixin_spec.rb b/spec/lib/sagittarius/database/postgresql_database_tasks/load_schema_versions_mixin_spec.rb index b2b173f9..f8253bb4 100644 --- a/spec/lib/sagittarius/database/postgresql_database_tasks/load_schema_versions_mixin_spec.rb +++ b/spec/lib/sagittarius/database/postgresql_database_tasks/load_schema_versions_mixin_spec.rb @@ -27,7 +27,7 @@ def connection; end let(:instance) { instance_class.new } - it 'calls SchemaMigrations load_all', :aggregate_failures do + it 'calls SchemaMigrations load_all' do connection = double('connection') # rubocop:disable RSpec/VerifiedDoubles -- we don't need an actual connection here allow(instance).to receive(:connection).and_return(connection) allow(instance).to receive(:original_structure_load) diff --git a/spec/lib/sagittarius/database/schema_migrations/migrations_spec.rb b/spec/lib/sagittarius/database/schema_migrations/migrations_spec.rb index 8ee2e1fa..770bf6f3 100644 --- a/spec/lib/sagittarius/database/schema_migrations/migrations_spec.rb +++ b/spec/lib/sagittarius/database/schema_migrations/migrations_spec.rb @@ -25,7 +25,7 @@ let(:relative_schema_directory) { 'db/schema_migrations' } - it 'creates a file containing a checksum for each version with a matching migration', :aggregate_failures do + it 'creates a file containing a checksum for each version with a matching migration' do Dir.mktmpdir do |tmpdir| schema_directory = Pathname.new(tmpdir).join(relative_schema_directory) FileUtils.mkdir_p(schema_directory) @@ -65,7 +65,7 @@ context 'when there are no version files' do let(:filenames) { [] } - it 'does nothing', :aggregate_failures do + it 'does nothing' do allow(connection).to receive(:quote_string) allow(connection).to receive(:execute) @@ -76,7 +76,7 @@ end end - context 'when there are version files', :aggregate_failures do + context 'when there are version files' do let(:filenames) { %w[123 456 789] } it 'inserts the missing versions into schema_migrations' do diff --git a/spec/lib/sagittarius/database/transactional_spec.rb b/spec/lib/sagittarius/database/transactional_spec.rb index 0eb8404e..9793ad99 100644 --- a/spec/lib/sagittarius/database/transactional_spec.rb +++ b/spec/lib/sagittarius/database/transactional_spec.rb @@ -12,7 +12,7 @@ expect(described_class.transactional { 1 }).to eq(1) end - it 'can return and rollback', :aggregate_failures do + it 'can return and rollback' do user = nil expect(described_class.transactional do |helper| user = create(:user) diff --git a/spec/lib/sagittarius/middleware/rack/context_spec.rb b/spec/lib/sagittarius/middleware/rack/context_spec.rb index 32a7f1e8..e5f8b040 100644 --- a/spec/lib/sagittarius/middleware/rack/context_spec.rb +++ b/spec/lib/sagittarius/middleware/rack/context_spec.rb @@ -39,7 +39,7 @@ expect(app).to have_received(:call).with(env) end - it 'injects meta headers', :aggregate_failures do + it 'injects meta headers' do Sagittarius::Context.push(metadata) allow(app).to receive(:call).with(env).and_return([nil, {}, nil]) diff --git a/spec/lib/sagittarius/utils_spec.rb b/spec/lib/sagittarius/utils_spec.rb index 76f569a2..c10f99e7 100644 --- a/spec/lib/sagittarius/utils_spec.rb +++ b/spec/lib/sagittarius/utils_spec.rb @@ -5,12 +5,12 @@ RSpec.describe Sagittarius::Utils do describe '.to_boolean' do - it 'accepts booleans', :aggregate_failures do + it 'accepts booleans' do expect(described_class.to_boolean(true)).to be(true) expect(described_class.to_boolean(false)).to be(false) end - it 'converts a valid value to a boolean', :aggregate_failures do + it 'converts a valid value to a boolean' do expect(described_class.to_boolean(true)).to be(true) expect(described_class.to_boolean('true')).to be(true) expect(described_class.to_boolean('YeS')).to be(true) @@ -28,14 +28,14 @@ expect(described_class.to_boolean('oFF')).to be(false) end - it 'converts an invalid value to nil', :aggregate_failures do + it 'converts an invalid value to nil' do expect(described_class.to_boolean('fals')).to be_nil expect(described_class.to_boolean('yeah')).to be_nil expect(described_class.to_boolean('')).to be_nil expect(described_class.to_boolean(nil)).to be_nil end - it 'accepts a default value, and does not return it when a valid value is given', :aggregate_failures do + it 'accepts a default value, and does not return it when a valid value is given' do expect(described_class.to_boolean(true, default: false)).to be(true) expect(described_class.to_boolean('true', default: false)).to be(true) expect(described_class.to_boolean('YeS', default: false)).to be(true) @@ -51,7 +51,7 @@ expect(described_class.to_boolean('oFF', default: 42)).to be(false) end - it 'accepts a default value, and returns it when an invalid value is given', :aggregate_failures do + it 'accepts a default value, and returns it when an invalid value is given' do expect(described_class.to_boolean('fals', default: true)).to be(true) expect(described_class.to_boolean('yeah', default: false)).to be(false) expect(described_class.to_boolean('', default: 'any value')).to eq('any value') diff --git a/spec/requests/graphql/mutation/application_settings/update_mutation_spec.rb b/spec/requests/graphql/mutation/application_settings/update_mutation_spec.rb index 924811ce..acf9111b 100644 --- a/spec/requests/graphql/mutation/application_settings/update_mutation_spec.rb +++ b/spec/requests/graphql/mutation/application_settings/update_mutation_spec.rb @@ -26,7 +26,7 @@ before { post_graphql mutation, variables: variables, current_user: current_user } - it 'updates application settings', :aggregate_failures do + it 'updates application settings' do expect(graphql_data_at(:application_settings_update, :application_settings)).to be_present expect(graphql_data_at(:application_settings_update, :application_settings, :user_registration_enabled)).to be false @@ -42,7 +42,7 @@ context 'when user is not an admin' do let(:current_user) { create(:user) } - it 'returns an error', :aggregate_failures do + it 'returns an error' do expect(graphql_data_at(:application_settings_update, :application_settings)).to be_nil expect(graphql_data_at(:application_settings_update, :errors)).to include('message' => 'permission_missing') end diff --git a/spec/requests/graphql/mutation/team_roles/create_mutation_spec.rb b/spec/requests/graphql/mutation/team_roles/create_mutation_spec.rb index a54e54a9..12c4f7f6 100644 --- a/spec/requests/graphql/mutation/team_roles/create_mutation_spec.rb +++ b/spec/requests/graphql/mutation/team_roles/create_mutation_spec.rb @@ -42,7 +42,7 @@ create(:team_member, team: team, user: current_user) end - it 'creates team role', :aggregate_failures do + it 'creates team role' do mutate! expect(graphql_data_at(:team_roles_create, :team_role, :id)).to be_present @@ -67,7 +67,7 @@ let(:team_role) { create(:team_role, team: team) } let(:input) { { teamId: team.to_global_id.to_s, name: team_role.name } } - it 'returns an error', :aggregate_failures do + it 'returns an error' do mutate! expect(graphql_data_at(:team_roles_create, :team_role)).to be_nil @@ -78,7 +78,7 @@ context 'when team role name is taken in another team' do let(:other_team) { create(:team).tap { |t| create(:team_role, team: t, name: input[:name]) } } - it 'creates team role', :aggregate_failures do + it 'creates team role' do mutate! expect(graphql_data_at(:team_roles_create, :team_role, :id)).to be_present @@ -102,7 +102,7 @@ end context 'when user is not a member of the team' do - it 'returns an error', :aggregate_failures do + it 'returns an error' do mutate! expect(graphql_data_at(:team_roles_create, :team_role)).to be_nil diff --git a/spec/requests/graphql/mutation/teams/create_mutation_spec.rb b/spec/requests/graphql/mutation/teams/create_mutation_spec.rb index ac2b64f0..d72eb455 100644 --- a/spec/requests/graphql/mutation/teams/create_mutation_spec.rb +++ b/spec/requests/graphql/mutation/teams/create_mutation_spec.rb @@ -32,7 +32,7 @@ before { post_graphql mutation, variables: variables, current_user: current_user } - it 'creates team', :aggregate_failures do + it 'creates team' do expect(graphql_data_at(:teams_create, :team, :id)).to be_present team = SagittariusSchema.object_from_id(graphql_data_at(:teams_create, :team, :id)) @@ -54,7 +54,7 @@ let(:team) { create(:team) } let(:input) { { name: team.name } } - it 'returns an error', :aggregate_failures do + it 'returns an error' do expect(graphql_data_at(:teams_create, :team)).to be_nil expect(graphql_data_at(:teams_create, :errors)).to include({ 'attribute' => 'name', 'type' => 'taken' }) end diff --git a/spec/requests/graphql/mutation/users/login_spec.rb b/spec/requests/graphql/mutation/users/login_spec.rb index f71df264..13d79a98 100644 --- a/spec/requests/graphql/mutation/users/login_spec.rb +++ b/spec/requests/graphql/mutation/users/login_spec.rb @@ -37,7 +37,7 @@ } end - it 'creates the user session', :aggregate_failures do + it 'creates the user session' do expect(graphql_data_at(:users_login, :user_session, :id)).to be_present expect(graphql_data_at(:users_login, :user_session, :token)).to be_present @@ -64,7 +64,7 @@ } end - it 'creates the user session', :aggregate_failures do + it 'creates the user session' do expect(graphql_data_at(:users_login, :user_session, :id)).to be_present expect(graphql_data_at(:users_login, :user_session, :token)).to be_present @@ -94,7 +94,7 @@ } end - it 'returns errors', :aggregate_failures do + it 'returns errors' do expect(graphql_data_at(:users_login, :user_session)).not_to be_present expect(graphql_errors).to include( @@ -111,7 +111,7 @@ } end - it 'returns errors', :aggregate_failures do + it 'returns errors' do expect(graphql_data_at(:users_login, :user_session)).not_to be_present expect(graphql_data_at(:users_login, :errors, :message)).to include('invalid_login_data') @@ -126,7 +126,7 @@ } end - it 'returns errors', :aggregate_failures do + it 'returns errors' do expect(graphql_data_at(:users_login, :user_session)).not_to be_present expect(graphql_data_at(:users_login, :errors, :message)).to include('invalid_login_data') @@ -141,7 +141,7 @@ } end - it 'returns errors', :aggregate_failures do + it 'returns errors' do expect(graphql_data_at(:users_login, :user_session)).not_to be_present expect(graphql_data_at(:users_login, :errors, :message)).to include('invalid_login_data') diff --git a/spec/requests/graphql/mutation/users/logout_spec.rb b/spec/requests/graphql/mutation/users/logout_spec.rb index a2aed47a..50d37d4b 100644 --- a/spec/requests/graphql/mutation/users/logout_spec.rb +++ b/spec/requests/graphql/mutation/users/logout_spec.rb @@ -32,7 +32,7 @@ context 'when logging out a session of the same user' do let(:current_user) { user_session.user } - it 'logs out the session', :aggregate_failures do + it 'logs out the session' do expect(graphql_data_at(:users_logout, :user_session, :id)).to eq(user_session_id) expect(graphql_data_at(:users_logout, :user_session, :active)).to be(false) end @@ -41,7 +41,7 @@ context 'when logging out a session of another user' do let(:current_user) { create(:user) } - it 'does not log out the session', :aggregate_failures do + it 'does not log out the session' do expect(graphql_data_at(:users_logout, :errors, :message)).to include('missing_permission') expect(graphql_data_at(:users_logout, :user_session)).to be_nil end diff --git a/spec/requests/graphql/mutation/users/register_spec.rb b/spec/requests/graphql/mutation/users/register_spec.rb index 88250534..40d4c1dd 100644 --- a/spec/requests/graphql/mutation/users/register_spec.rb +++ b/spec/requests/graphql/mutation/users/register_spec.rb @@ -30,7 +30,7 @@ before { post_graphql mutation, variables: variables } - it 'creates the user', :aggregate_failures do + it 'creates the user' do expect(graphql_data_at(:users_register, :user, :id)).to be_present user = SagittariusSchema.object_from_id(graphql_data_at(:users_register, :user, :id)) @@ -56,7 +56,7 @@ } end - it 'returns errors', :aggregate_failures do + it 'returns errors' do expect(graphql_data_at(:users_register, :user)).not_to be_present expect(graphql_data_at(:users_register, :errors)).to include( diff --git a/spec/requests/graphql/query/team_query_spec.rb b/spec/requests/graphql/query/team_query_spec.rb index 07663752..22298224 100644 --- a/spec/requests/graphql/query/team_query_spec.rb +++ b/spec/requests/graphql/query/team_query_spec.rb @@ -23,7 +23,7 @@ before { post_graphql query, variables: variables, current_user: current_user } context 'without an id' do - it 'returns an error', :aggregate_failures do + it 'returns an error' do expect(graphql_data_at(:graphql)).to be_nil expect(graphql_errors).not_to be_empty end @@ -32,7 +32,7 @@ context 'with an invalid id' do let(:team_id) { 'gid://sagittarius/Teams/1' } - it 'returns an error', :aggregate_failures do + it 'returns an error' do expect(graphql_data_at(:team)).to be_nil expect(graphql_errors).not_to be_empty end @@ -41,7 +41,7 @@ context 'with a valid id but out of range' do let(:team_id) { 'gid://sagittarius/Team/0' } - it 'returns only nil', :aggregate_failures do + it 'returns only nil' do expect(graphql_data_at(:team)).to be_nil expect_graphql_errors_to_be_empty end @@ -58,7 +58,7 @@ end end - it 'returns the team', :aggregate_failures do + it 'returns the team' do expect(graphql_data_at(:team, :id)).to eq(team.to_global_id.to_s) expect(graphql_data_at(:team, :name)).to eq(team.name) end @@ -67,14 +67,14 @@ context 'when user is not a member' do let(:current_user) { create(:user) } - it 'returns only nil', :aggregate_failures do + it 'returns only nil' do expect(graphql_data_at(:team)).to be_nil expect_graphql_errors_to_be_empty end end context 'when user is anonymous' do - it 'returns only nil', :aggregate_failures do + it 'returns only nil' do expect(graphql_data_at(:team)).to be_nil expect_graphql_errors_to_be_empty end diff --git a/spec/requests/graphql_spec.rb b/spec/requests/graphql_spec.rb index 4d183052..ab2aa620 100644 --- a/spec/requests/graphql_spec.rb +++ b/spec/requests/graphql_spec.rb @@ -21,7 +21,7 @@ end context 'without authorization' do - it 'resolves the query', :aggregate_failures do + it 'resolves the query' do expect(response).to have_http_status(:ok) expect_graphql_errors_to_be_empty @@ -58,7 +58,7 @@ QUERY end - it 'resolves the query', :aggregate_failures do + it 'resolves the query' do expect(response).to have_http_status(:ok) expect_graphql_errors_to_be_empty @@ -79,7 +79,7 @@ QUERY end - it 'resolves the query', :aggregate_failures do + it 'resolves the query' do expect(response).to have_http_status(:ok) expect_graphql_errors_to_be_empty @@ -133,7 +133,7 @@ let(:user_session) { create(:user_session) } let(:authorization) { "Session #{user_session.token}" } - it 'resolves the query', :aggregate_failures do + it 'resolves the query' do expect(response).to have_http_status(:ok) expect_graphql_errors_to_be_empty @@ -151,7 +151,7 @@ QUERY end - it 'resolves the query', :aggregate_failures do + it 'resolves the query' do expect(response).to have_http_status(:ok) expect_graphql_errors_to_be_empty @@ -163,7 +163,7 @@ context 'with invalid authorization' do let(:authorization) { 'blub' } - it 'returns unauthorized', :aggregate_failures do + it 'returns unauthorized' do expect(response).to have_http_status(:unauthorized) expect(response.body).to be_empty end diff --git a/spec/services/audit_service_spec.rb b/spec/services/audit_service_spec.rb index b1d02706..77c53329 100644 --- a/spec/services/audit_service_spec.rb +++ b/spec/services/audit_service_spec.rb @@ -33,7 +33,7 @@ } end - it 'expands to entity_id and entity_type', :aggregate_failures do + it 'expands to entity_id and entity_type' do event = described_class.audit(:user_registered, payload) expect(event.entity_id).to eq(user.id) expect(event.entity_type).to eq('User') @@ -51,7 +51,7 @@ } end - it 'expands to target_id and target_type', :aggregate_failures do + it 'expands to target_id and target_type' do event = described_class.audit(:user_registered, payload) expect(event.target_id).to eq(user.id) expect(event.target_type).to eq('User') diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 4f01a28f..c38b747b 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -70,6 +70,10 @@ # triggering implicit auto-inclusion in groups with matching metadata. config.shared_context_metadata_behavior = :apply_to_host_groups + config.define_derived_metadata do |metadata| + metadata[:aggregate_failures] = true + end + # The settings below are suggested to provide a good initial experience # with RSpec, but feel free to customize to your heart's content. # # This allows you to limit a spec run to individual examples or groups