Reduce RSpec/MultipleExpectations cop max to 8 (#25313)
				
					
				
			This commit is contained in:
		| @@ -394,7 +394,7 @@ RSpec/MessageSpies: | ||||
|     - 'spec/validators/status_length_validator_spec.rb' | ||||
|  | ||||
| RSpec/MultipleExpectations: | ||||
|   Max: 19 | ||||
|   Max: 8 | ||||
|  | ||||
| # Configuration parameters: AllowSubject. | ||||
| RSpec/MultipleMemoizedHelpers: | ||||
|   | ||||
| @@ -48,10 +48,14 @@ describe Api::V1::Accounts::RelationshipsController do | ||||
|         expect(response).to have_http_status(200) | ||||
|       end | ||||
|  | ||||
|       it 'returns JSON with correct data' do | ||||
|         json = body_as_json | ||||
|       context 'when there is returned JSON data' do | ||||
|         let(:json) { body_as_json } | ||||
|  | ||||
|         it 'returns an enumerable json' do | ||||
|           expect(json).to be_a Enumerable | ||||
|         end | ||||
|  | ||||
|         it 'returns a correct first element' do | ||||
|           expect(json.first[:id]).to eq simon.id.to_s | ||||
|           expect(json.first[:following]).to be true | ||||
|           expect(json.first[:showing_reblogs]).to be true | ||||
| @@ -59,7 +63,9 @@ describe Api::V1::Accounts::RelationshipsController do | ||||
|           expect(json.first[:muting]).to be false | ||||
|           expect(json.first[:requested]).to be false | ||||
|           expect(json.first[:domain_blocking]).to be false | ||||
|         end | ||||
|  | ||||
|         it 'returns a correct second element' do | ||||
|           expect(json.second[:id]).to eq lewis.id.to_s | ||||
|           expect(json.second[:following]).to be false | ||||
|           expect(json.second[:showing_reblogs]).to be false | ||||
| @@ -68,6 +74,7 @@ describe Api::V1::Accounts::RelationshipsController do | ||||
|           expect(json.second[:requested]).to be false | ||||
|           expect(json.second[:domain_blocking]).to be false | ||||
|         end | ||||
|       end | ||||
|  | ||||
|       it 'returns JSON with correct data on cached requests too' do | ||||
|         get :index, params: { id: [simon.id] } | ||||
|   | ||||
| @@ -56,18 +56,11 @@ describe Settings::TwoFactorAuthentication::ConfirmationsController do | ||||
|         end | ||||
|  | ||||
|         describe 'when creation succeeds' do | ||||
|           let!(:otp_backup_codes) { user.generate_otp_backup_codes! } | ||||
|  | ||||
|           it 'renders page with success' do | ||||
|             otp_backup_codes = user.generate_otp_backup_codes! | ||||
|             expect_any_instance_of(User).to receive(:generate_otp_backup_codes!) do |value| | ||||
|               expect(value).to eq user | ||||
|               otp_backup_codes | ||||
|             end | ||||
|             expect_any_instance_of(User).to receive(:validate_and_consume_otp!) do |value, code, options| | ||||
|               expect(value).to eq user | ||||
|               expect(code).to eq '123456' | ||||
|               expect(options).to eq({ otp_secret: 'thisisasecretforthespecofnewview' }) | ||||
|               true | ||||
|             end | ||||
|             prepare_user_otp_generation | ||||
|             prepare_user_otp_consumption | ||||
|  | ||||
|             expect do | ||||
|               post :create, | ||||
| @@ -80,6 +73,22 @@ describe Settings::TwoFactorAuthentication::ConfirmationsController do | ||||
|             expect(response).to have_http_status(200) | ||||
|             expect(response).to render_template('settings/two_factor_authentication/recovery_codes/index') | ||||
|           end | ||||
|  | ||||
|           def prepare_user_otp_generation | ||||
|             expect_any_instance_of(User).to receive(:generate_otp_backup_codes!) do |value| | ||||
|               expect(value).to eq user | ||||
|               otp_backup_codes | ||||
|             end | ||||
|           end | ||||
|  | ||||
|           def prepare_user_otp_consumption | ||||
|             expect_any_instance_of(User).to receive(:validate_and_consume_otp!) do |value, code, options| | ||||
|               expect(value).to eq user | ||||
|               expect(code).to eq '123456' | ||||
|               expect(options).to eq({ otp_secret: 'thisisasecretforthespecofnewview' }) | ||||
|               true | ||||
|             end | ||||
|           end | ||||
|         end | ||||
|  | ||||
|         describe 'when creation fails' do | ||||
|   | ||||
| @@ -245,19 +245,46 @@ RSpec.describe Form::Import do | ||||
|         expect(account.bulk_imports.first.rows.pluck(:data)).to match_array(expected_rows) | ||||
|       end | ||||
|  | ||||
|       it 'creates a BulkImport with expected attributes' do | ||||
|         bulk_import = account.bulk_imports.first | ||||
|       context 'with a BulkImport' do | ||||
|         let(:bulk_import) { account.bulk_imports.first } | ||||
|  | ||||
|         it 'creates a non-nil bulk import' do | ||||
|           expect(bulk_import).to_not be_nil | ||||
|         end | ||||
|  | ||||
|         it 'matches the subjects type' do | ||||
|           expect(bulk_import.type.to_sym).to eq subject.type.to_sym | ||||
|         end | ||||
|  | ||||
|         it 'matches the subjects original filename' do | ||||
|           expect(bulk_import.original_filename).to eq subject.data.original_filename | ||||
|         end | ||||
|  | ||||
|         it 'matches the subjects likely_mismatched? value' do | ||||
|           expect(bulk_import.likely_mismatched?).to eq subject.likely_mismatched? | ||||
|         end | ||||
|  | ||||
|         it 'matches the subject overwrite value' do | ||||
|           expect(bulk_import.overwrite?).to eq !!subject.overwrite # rubocop:disable Style/DoubleNegation | ||||
|         end | ||||
|  | ||||
|         it 'has zero processed items' do | ||||
|           expect(bulk_import.processed_items).to eq 0 | ||||
|         end | ||||
|  | ||||
|         it 'has zero imported items' do | ||||
|           expect(bulk_import.imported_items).to eq 0 | ||||
|         end | ||||
|  | ||||
|         it 'has a correct total_items value' do | ||||
|           expect(bulk_import.total_items).to eq bulk_import.rows.count | ||||
|         end | ||||
|  | ||||
|         it 'defaults to unconfirmed true' do | ||||
|           expect(bulk_import.unconfirmed?).to be true | ||||
|         end | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     it_behaves_like 'on successful import', 'following', 'merge', 'imports.txt', (%w(user@example.com user@test.com).map { |acct| { 'acct' => acct } }) | ||||
|     it_behaves_like 'on successful import', 'following', 'overwrite', 'imports.txt', (%w(user@example.com user@test.com).map { |acct| { 'acct' => acct } }) | ||||
|   | ||||
| @@ -99,74 +99,88 @@ RSpec.describe Notification do | ||||
|         ] | ||||
|       end | ||||
|  | ||||
|       it 'preloads target status' do | ||||
|         # mention | ||||
|       context 'with a preloaded target status' do | ||||
|         it 'preloads mention' do | ||||
|           expect(subject[0].type).to eq :mention | ||||
|           expect(subject[0].association(:mention)).to be_loaded | ||||
|           expect(subject[0].mention.association(:status)).to be_loaded | ||||
|         end | ||||
|  | ||||
|         # status | ||||
|         it 'preloads status' do | ||||
|           expect(subject[1].type).to eq :status | ||||
|           expect(subject[1].association(:status)).to be_loaded | ||||
|         end | ||||
|  | ||||
|         # reblog | ||||
|         it 'preloads reblog' do | ||||
|           expect(subject[2].type).to eq :reblog | ||||
|           expect(subject[2].association(:status)).to be_loaded | ||||
|           expect(subject[2].status.association(:reblog)).to be_loaded | ||||
|         end | ||||
|  | ||||
|         # follow: nothing | ||||
|         it 'preloads follow as nil' do | ||||
|           expect(subject[3].type).to eq :follow | ||||
|           expect(subject[3].target_status).to be_nil | ||||
|         end | ||||
|  | ||||
|         # follow_request: nothing | ||||
|         it 'preloads follow_request as nill' do | ||||
|           expect(subject[4].type).to eq :follow_request | ||||
|           expect(subject[4].target_status).to be_nil | ||||
|         end | ||||
|  | ||||
|         # favourite | ||||
|         it 'preloads favourite' do | ||||
|           expect(subject[5].type).to eq :favourite | ||||
|           expect(subject[5].association(:favourite)).to be_loaded | ||||
|           expect(subject[5].favourite.association(:status)).to be_loaded | ||||
|         end | ||||
|  | ||||
|         # poll | ||||
|         it 'preloads poll' do | ||||
|           expect(subject[6].type).to eq :poll | ||||
|           expect(subject[6].association(:poll)).to be_loaded | ||||
|           expect(subject[6].poll.association(:status)).to be_loaded | ||||
|         end | ||||
|       end | ||||
|  | ||||
|       it 'replaces to cached status' do | ||||
|         # mention | ||||
|       context 'with a cached status' do | ||||
|         it 'replaces mention' do | ||||
|           expect(subject[0].type).to eq :mention | ||||
|           expect(subject[0].target_status.association(:account)).to be_loaded | ||||
|           expect(subject[0].target_status).to eq mention.status | ||||
|         end | ||||
|  | ||||
|         # status | ||||
|         it 'replaces status' do | ||||
|           expect(subject[1].type).to eq :status | ||||
|           expect(subject[1].target_status.association(:account)).to be_loaded | ||||
|           expect(subject[1].target_status).to eq status | ||||
|         end | ||||
|  | ||||
|         # reblog | ||||
|         it 'replaces reblog' do | ||||
|           expect(subject[2].type).to eq :reblog | ||||
|           expect(subject[2].target_status.association(:account)).to be_loaded | ||||
|           expect(subject[2].target_status).to eq reblog.reblog | ||||
|         end | ||||
|  | ||||
|         # follow: nothing | ||||
|         it 'replaces follow' do | ||||
|           expect(subject[3].type).to eq :follow | ||||
|           expect(subject[3].target_status).to be_nil | ||||
|         end | ||||
|  | ||||
|         # follow_request: nothing | ||||
|         it 'replaces follow_request' do | ||||
|           expect(subject[4].type).to eq :follow_request | ||||
|           expect(subject[4].target_status).to be_nil | ||||
|         end | ||||
|  | ||||
|         # favourite | ||||
|         it 'replaces favourite' do | ||||
|           expect(subject[5].type).to eq :favourite | ||||
|           expect(subject[5].target_status.association(:account)).to be_loaded | ||||
|           expect(subject[5].target_status).to eq favourite.status | ||||
|         end | ||||
|  | ||||
|         # poll | ||||
|         it 'replaces poll' do | ||||
|           expect(subject[6].type).to eq :poll | ||||
|           expect(subject[6].target_status.association(:account)).to be_loaded | ||||
|           expect(subject[6].target_status).to eq poll.status | ||||
|         end | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
|   | ||||
| @@ -152,24 +152,33 @@ RSpec.describe TranslateStatusService, type: :service do | ||||
|     describe 'status has poll' do | ||||
|       let(:poll) { Fabricate(:poll, options: %w(Blue Green)) } | ||||
|  | ||||
|       context 'with source texts from the service' do | ||||
|         let!(:source_texts) { service.send(:source_texts) } | ||||
|  | ||||
|         it 'returns formatted poll options' do | ||||
|         source_texts = service.send(:source_texts) | ||||
|           expect(source_texts.size).to eq 3 | ||||
|           expect(source_texts.values).to eq %w(<p>Hello</p> Blue Green) | ||||
|         end | ||||
|  | ||||
|         it 'has a first key with content' do | ||||
|           expect(source_texts.keys.first).to eq :content | ||||
|         end | ||||
|  | ||||
|         it 'has the first option in the second key with correct options' do | ||||
|           option1 = source_texts.keys.second | ||||
|           expect(option1).to be_a Poll::Option | ||||
|           expect(option1.id).to eq '0' | ||||
|           expect(option1.title).to eq 'Blue' | ||||
|         end | ||||
|  | ||||
|         it 'has the second option in the third key with correct options' do | ||||
|           option2 = source_texts.keys.third | ||||
|           expect(option2).to be_a Poll::Option | ||||
|           expect(option2.id).to eq '1' | ||||
|           expect(option2.title).to eq 'Green' | ||||
|         end | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     describe 'status has poll with custom emoji' do | ||||
|       let(:poll) { Fabricate(:poll, options: ['Blue', 'Green :highfive:']) } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user