From 03e1465ca84a9c9b1e8b9c7ebb42ab947dcfea7f Mon Sep 17 00:00:00 2001 From: Morgan Roderick Date: Tue, 28 Jul 2026 15:32:09 +0200 Subject: [PATCH 01/11] chore: fix RSpec/ExcessiveDocstringSpacing offenses --- .rubocop_todo.yml | 4 ---- spec/features/accepting_invitation_spec.rb | 2 +- spec/features/admin/manage_workshop_attendances_spec.rb | 2 +- spec/models/feedback_spec.rb | 2 +- spec/presenters/contact_presenter_spec.rb | 2 +- 5 files changed, 4 insertions(+), 8 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 85df1262f..dc0d1edb2 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -424,10 +424,6 @@ RSpec/ExampleWording: - 'spec/presenters/virtual_workshop_presenter_spec.rb' - 'spec/support/shared_examples/behaves_like_managing_workshop_attendance.rb' -# Offense count: 4 -# This cop supports safe autocorrection (--autocorrect). -RSpec/ExcessiveDocstringSpacing: - Exclude: - 'spec/features/accepting_invitation_spec.rb' - 'spec/features/admin/manage_workshop_attendances_spec.rb' - 'spec/models/feedback_spec.rb' diff --git a/spec/features/accepting_invitation_spec.rb b/spec/features/accepting_invitation_spec.rb index 07767ba69..8a47a56bc 100644 --- a/spec/features/accepting_invitation_spec.rb +++ b/spec/features/accepting_invitation_spec.rb @@ -48,7 +48,7 @@ context 'amend invitation details' do context 'a student' do - scenario 'cannot accept an invitation without a tutorial' do + scenario 'cannot accept an invitation without a tutorial' do invitation.update(attending: nil, tutorial: nil) visit invitation_route diff --git a/spec/features/admin/manage_workshop_attendances_spec.rb b/spec/features/admin/manage_workshop_attendances_spec.rb index d4869cffb..0198dda47 100644 --- a/spec/features/admin/manage_workshop_attendances_spec.rb +++ b/spec/features/admin/manage_workshop_attendances_spec.rb @@ -11,7 +11,7 @@ login_as_admin(member) end - context ' #verify_attendance' do + context '#verify_attendance' do let(:workshop) { Fabricate(:workshop, chapter: chapter, date_and_time: Time.zone.now - 1.day) } scenario 'can verify that a member has attended the workshop' do diff --git a/spec/models/feedback_spec.rb b/spec/models/feedback_spec.rb index 6c1d605fc..688745ff9 100644 --- a/spec/models/feedback_spec.rb +++ b/spec/models/feedback_spec.rb @@ -18,7 +18,7 @@ end context 'with valid token' do - it 'is submitted valid params' do + it 'is submitted valid params' do expect do described_class.submit_feedback(params, feedback_request.token) end.to change { described_class.count }.by(1) diff --git a/spec/presenters/contact_presenter_spec.rb b/spec/presenters/contact_presenter_spec.rb index c0268a746..3d7cb9d1f 100644 --- a/spec/presenters/contact_presenter_spec.rb +++ b/spec/presenters/contact_presenter_spec.rb @@ -15,7 +15,7 @@ expect(contact_presenter.mailing_list_subscription_class).to eq('fa-bell') end - it 'when not subscribed to the Sponsors mailing list it returns the correct css class' do + it 'when not subscribed to the Sponsors mailing list it returns the correct css class' do contact.mailing_list_consent = false expect(contact_presenter.mailing_list_subscription_class).to eq('fa-bell-slash') From 28209f2705de73f8b5a28b29a1a69d9b5d0ceaef Mon Sep 17 00:00:00 2001 From: Morgan Roderick Date: Tue, 28 Jul 2026 15:32:12 +0200 Subject: [PATCH 02/11] chore: fix RSpec/MetadataStyle offenses --- .rubocop_todo.yml | 6 ------ spec/features/admin/add_user_to_workshop_spec.rb | 2 +- spec/features/admin/manage_workshop_attendances_spec.rb | 4 ++-- spec/features/admin/members_spec.rb | 2 +- spec/features/admin/sponsor_spec.rb | 2 +- spec/features/member_feedback_spec.rb | 2 +- spec/features/viewing_a_workshop_invitation_spec.rb | 2 +- spec/features/viewing_pages_spec.rb | 2 +- spec/spec_helper.rb | 2 +- 9 files changed, 9 insertions(+), 15 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index dc0d1edb2..8d6194ae4 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -534,12 +534,6 @@ RSpec/MessageSpies: - 'spec/support/shared_examples/behaves_like_an_invitation.rb' - 'spec/support/shared_examples/behaves_like_sending_workshop_emails.rb' -# Offense count: 9 -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EnforcedStyle. -# SupportedStyles: hash, symbol -RSpec/MetadataStyle: - Exclude: - 'spec/features/admin/add_user_to_workshop_spec.rb' - 'spec/features/admin/manage_workshop_attendances_spec.rb' - 'spec/features/admin/members_spec.rb' diff --git a/spec/features/admin/add_user_to_workshop_spec.rb b/spec/features/admin/add_user_to_workshop_spec.rb index 9d47f71a1..0fde9d9fa 100644 --- a/spec/features/admin/add_user_to_workshop_spec.rb +++ b/spec/features/admin/add_user_to_workshop_spec.rb @@ -1,4 +1,4 @@ -RSpec.describe 'Add a user to an existing workshop', js: true, type: :feature do +RSpec.describe 'Add a user to an existing workshop', :js, type: :feature do let(:member) { Fabricate(:member) } let!(:juliet) { Fabricate(:member, name: 'Juliet', surname: 'Capulet') } diff --git a/spec/features/admin/manage_workshop_attendances_spec.rb b/spec/features/admin/manage_workshop_attendances_spec.rb index 0198dda47..26274da60 100644 --- a/spec/features/admin/manage_workshop_attendances_spec.rb +++ b/spec/features/admin/manage_workshop_attendances_spec.rb @@ -21,7 +21,7 @@ expect(page).to have_css('.fa-check-square') end - scenario 'verifies and unverifies attendance with targeted row replacement', js: true do + scenario 'verifies and unverifies attendance with targeted row replacement', :js do second_invitation = Fabricate(:workshop_invitation, workshop: workshop, attending: true) visit admin_workshop_path(workshop) @@ -63,7 +63,7 @@ expect(page).to have_css('i.fa-hat-wizard') end - scenario 'can rsvp an invited student to the workshop', js: true do + scenario 'can rsvp an invited student to the workshop', :js do login_as_admin(member) other_invitation = Fabricate(:workshop_invitation, workshop: workshop, attending: nil) diff --git a/spec/features/admin/members_spec.rb b/spec/features/admin/members_spec.rb index fb9102fd1..af68a0ad0 100644 --- a/spec/features/admin/members_spec.rb +++ b/spec/features/admin/members_spec.rb @@ -61,7 +61,7 @@ end end - it 'can unsubscribe a member from group', js: true do + it 'can unsubscribe a member from group', :js do within '#subscriptions > li:first-child' do expect do accept_confirm { find('.fa-times').click } diff --git a/spec/features/admin/sponsor_spec.rb b/spec/features/admin/sponsor_spec.rb index 76dc7b01b..0b6ea17dd 100644 --- a/spec/features/admin/sponsor_spec.rb +++ b/spec/features/admin/sponsor_spec.rb @@ -211,7 +211,7 @@ expect(page).to have_text("#{manager.full_name} subscribed Jane Doe with email jane@codebar.io to the Sponsor newsletter") end - it 'can unsubscribe a contact to the sponsor newsletter', wip: true do + it 'can unsubscribe a contact to the sponsor newsletter', :wip do contact = Fabricate(:contact, sponsor: sponsor, mailing_list_consent: true) visit edit_admin_sponsor_path(sponsor) diff --git a/spec/features/member_feedback_spec.rb b/spec/features/member_feedback_spec.rb index 30197d4ad..c425249d9 100644 --- a/spec/features/member_feedback_spec.rb +++ b/spec/features/member_feedback_spec.rb @@ -102,7 +102,7 @@ end context 'Submitting a feedback request' do - scenario 'I can see success page with message and link to homepage when valid data is given', js: true do + scenario 'I can see success page with message and link to homepage when valid data is given', :js do visit feedback_path(valid_token) # Wait for Chosen dropdowns to initialize diff --git a/spec/features/viewing_a_workshop_invitation_spec.rb b/spec/features/viewing_a_workshop_invitation_spec.rb index 15e995783..0d0aa4ee7 100644 --- a/spec/features/viewing_a_workshop_invitation_spec.rb +++ b/spec/features/viewing_a_workshop_invitation_spec.rb @@ -1,4 +1,4 @@ -RSpec.feature 'Viewing a workshop invitation', type: :feature, wip: true do +RSpec.feature 'Viewing a workshop invitation', :wip, type: :feature do let(:invitation) { Fabricate(:workshop_invitation, workshop: workshop) } before do diff --git a/spec/features/viewing_pages_spec.rb b/spec/features/viewing_pages_spec.rb index cb346b1b6..ac5fa8d45 100644 --- a/spec/features/viewing_pages_spec.rb +++ b/spec/features/viewing_pages_spec.rb @@ -13,7 +13,7 @@ expect(page).to have_text('Your privacy means a lot to us') end - scenario 'can access page not found', js: true do + scenario 'can access page not found', :js do visit '/does_not_exist' expect(page).to have_text('Page not found') diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 659006747..b3369b874 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -80,7 +80,7 @@ # under test that does *not* share a database connection with the # specs, so use truncation strategy. This config is order dependent # and must be BELOW the main `config.before(:each)` configuration - config.before(:each, js: true) do + config.before(:each, :js) do DatabaseCleaner.strategy = :truncation end From 133e86f6fd601058b51309b043710ecba01a1887 Mon Sep 17 00:00:00 2001 From: Morgan Roderick Date: Tue, 28 Jul 2026 15:32:16 +0200 Subject: [PATCH 03/11] chore: fix RSpec/HookArgument offenses --- .rubocop_todo.yml | 6 ------ spec/features/admin/filtering_sponsors_list_spec.rb | 2 +- spec/features/admin/sponsor_spec.rb | 2 +- spec/features/coach_accepting_invitation_spec.rb | 2 +- spec/features/internationalization_spec.rb | 2 +- spec/features/viewing_a_meeting_spec.rb | 2 +- spec/presenters/sponsor_presenter_spec.rb | 2 +- spec/spec_helper.rb | 8 ++++---- 8 files changed, 10 insertions(+), 16 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 8d6194ae4..0dcfe6794 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -439,12 +439,6 @@ RSpec/ExpectChange: - 'spec/features/member/login_spec.rb' - 'spec/models/feedback_spec.rb' -# Offense count: 10 -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EnforcedStyle. -# SupportedStyles: implicit, each, example -RSpec/HookArgument: - Exclude: - 'spec/features/admin/filtering_sponsors_list_spec.rb' - 'spec/features/admin/sponsor_spec.rb' - 'spec/features/coach_accepting_invitation_spec.rb' diff --git a/spec/features/admin/filtering_sponsors_list_spec.rb b/spec/features/admin/filtering_sponsors_list_spec.rb index 6c88598c3..762a6ccaa 100644 --- a/spec/features/admin/filtering_sponsors_list_spec.rb +++ b/spec/features/admin/filtering_sponsors_list_spec.rb @@ -8,7 +8,7 @@ describe 'when visiting the sponsors page' do let!(:sponsors) { Fabricate.times(2, :sponsor) } - before(:each) do + before do visit admin_sponsors_path end diff --git a/spec/features/admin/sponsor_spec.rb b/spec/features/admin/sponsor_spec.rb index 0b6ea17dd..c2a07a08f 100644 --- a/spec/features/admin/sponsor_spec.rb +++ b/spec/features/admin/sponsor_spec.rb @@ -88,7 +88,7 @@ context 'Sponsor page' do let(:sponsor) { Fabricate(:sponsor_with_contacts) } - before(:each) do + before do visit admin_sponsor_path(sponsor) end diff --git a/spec/features/coach_accepting_invitation_spec.rb b/spec/features/coach_accepting_invitation_spec.rb index 8b9e87f2b..042d450c7 100644 --- a/spec/features/coach_accepting_invitation_spec.rb +++ b/spec/features/coach_accepting_invitation_spec.rb @@ -20,7 +20,7 @@ end end - before(:each) do + before do login(member) end diff --git a/spec/features/internationalization_spec.rb b/spec/features/internationalization_spec.rb index 74d8f3eb2..86fa735aa 100644 --- a/spec/features/internationalization_spec.rb +++ b/spec/features/internationalization_spec.rb @@ -1,5 +1,5 @@ RSpec.feature 'Internationalization', type: :feature do - after(:each) do + after do I18n.locale = :en end diff --git a/spec/features/viewing_a_meeting_spec.rb b/spec/features/viewing_a_meeting_spec.rb index cdc47e78d..ceaf65169 100644 --- a/spec/features/viewing_a_meeting_spec.rb +++ b/spec/features/viewing_a_meeting_spec.rb @@ -2,7 +2,7 @@ let!(:meeting) { Fabricate(:meeting) } context 'a visitor' do - before(:each) do + before do visit meeting_path(meeting) end diff --git a/spec/presenters/sponsor_presenter_spec.rb b/spec/presenters/sponsor_presenter_spec.rb index fe720be7a..e6eb28f2d 100644 --- a/spec/presenters/sponsor_presenter_spec.rb +++ b/spec/presenters/sponsor_presenter_spec.rb @@ -29,7 +29,7 @@ end context '#sponsorships_count' do - before(:each) do + before do Fabricate(:workshop_sponsor, sponsor: sponsor) Fabricate.times(2, :sponsorship, sponsor: sponsor) end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index b3369b874..b7d530c2a 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -67,7 +67,7 @@ DatabaseCleaner.strategy = :deletion end - config.before(:each) do + config.before do # Stub all Flodesk API endpoints globally so tests don't make external requests # when fabricating members (which trigger Subscription.after_create callback) WebMock.stub_request(:any, /api\.flodesk\.com/) @@ -86,11 +86,11 @@ # This block must be here, do not combine with the other `config.before(:each)` block. # This makes it so Capybara can see the database. - config.before(:each) do + config.before do DatabaseCleaner.start end - config.after(:each) do + config.after do DatabaseCleaner.clean Capybara.reset_sessions! if defined?(Capybara) end @@ -113,7 +113,7 @@ config.example_status_persistence_file_path = 'tmp/spec_failures' if Bullet.enable? - config.around(:each) do |example| + config.around do |example| Bullet.start_request example.run Bullet.perform_out_of_channel_notifications if Bullet.notification? From 999e06f2ec4f9b6f3bbbfdfee71b76f999dc061f Mon Sep 17 00:00:00 2001 From: Morgan Roderick Date: Tue, 28 Jul 2026 15:32:20 +0200 Subject: [PATCH 04/11] chore: fix RSpec/ImplicitExpect offenses --- .rubocop_todo.yml | 6 ------ spec/models/feedback_request_spec.rb | 8 ++++---- spec/models/meeting_spec.rb | 2 +- spec/models/tutorial_spec.rb | 8 ++++---- 4 files changed, 9 insertions(+), 15 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 0dcfe6794..dcf8f301b 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -447,12 +447,6 @@ RSpec/ExpectChange: - 'spec/presenters/sponsor_presenter_spec.rb' - 'spec/spec_helper.rb' -# Offense count: 9 -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EnforcedStyle. -# SupportedStyles: is_expected, should -RSpec/ImplicitExpect: - Exclude: - 'spec/models/feedback_request_spec.rb' - 'spec/models/meeting_spec.rb' - 'spec/models/tutorial_spec.rb' diff --git a/spec/models/feedback_request_spec.rb b/spec/models/feedback_request_spec.rb index 01ef66a0a..71f3cf3b8 100644 --- a/spec/models/feedback_request_spec.rb +++ b/spec/models/feedback_request_spec.rb @@ -1,10 +1,10 @@ RSpec.describe FeedbackRequest do subject { Fabricate(:feedback_request) } - it { should respond_to(:member) } - it { should respond_to(:workshop) } - it { should respond_to(:token) } - it { should respond_to(:submited) } + it { is_expected.to respond_to(:member) } + it { is_expected.to respond_to(:workshop) } + it { is_expected.to respond_to(:token) } + it { is_expected.to respond_to(:submited) } context 'validations' do context 'presence' do diff --git a/spec/models/meeting_spec.rb b/spec/models/meeting_spec.rb index 859377ac4..ce764fb86 100644 --- a/spec/models/meeting_spec.rb +++ b/spec/models/meeting_spec.rb @@ -7,7 +7,7 @@ it { is_expected.to validate_presence_of(:date_and_time) } it { is_expected.to validate_presence_of(:ends_at) } - it { should belong_to(:venue) } + it { is_expected.to belong_to(:venue) } context '#slug' do it 'fails when slug not present' do diff --git a/spec/models/tutorial_spec.rb b/spec/models/tutorial_spec.rb index f73154dc0..bde57b4aa 100644 --- a/spec/models/tutorial_spec.rb +++ b/spec/models/tutorial_spec.rb @@ -1,10 +1,10 @@ RSpec.describe Tutorial do subject(:tutorial) { Fabricate.build(:tutorial) } - it { should respond_to(:title) } - it { should respond_to(:description) } - it { should respond_to(:url) } - it { should respond_to(:workshop) } + it { is_expected.to respond_to(:title) } + it { is_expected.to respond_to(:description) } + it { is_expected.to respond_to(:url) } + it { is_expected.to respond_to(:workshop) } context 'validations' do it '#title' do From 22127f43e9144903bbfd6850906a82691d0e9486 Mon Sep 17 00:00:00 2001 From: Morgan Roderick Date: Tue, 28 Jul 2026 15:32:23 +0200 Subject: [PATCH 05/11] chore: fix RSpec/ExampleWording offenses --- .rubocop_todo.yml | 6 ------ .../admin/workshops_controller_spec.rb | 16 ++++++++-------- spec/lib/tasks/mailing_list_rake_spec.rb | 2 +- spec/models/event_spec.rb | 4 ++-- spec/presenters/sponsor_presenter_spec.rb | 4 ++-- .../virtual_workshop_presenter_spec.rb | 4 ++-- .../behaves_like_managing_workshop_attendance.rb | 2 +- 7 files changed, 16 insertions(+), 22 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index dcf8f301b..104618b45 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -411,12 +411,6 @@ RSpec/ExampleLength: - 'spec/support/shared_examples/behaves_like_an_invitation_route.rb' - 'spec/support/shared_examples/behaves_like_sending_workshop_emails.rb' -# Offense count: 16 -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: CustomTransform, IgnoredWords, DisallowedExamples. -# DisallowedExamples: works -RSpec/ExampleWording: - Exclude: - 'spec/controllers/admin/workshops_controller_spec.rb' - 'spec/lib/tasks/mailing_list_rake_spec.rb' - 'spec/models/event_spec.rb' diff --git a/spec/controllers/admin/workshops_controller_spec.rb b/spec/controllers/admin/workshops_controller_spec.rb index b7eeea555..de012c26f 100644 --- a/spec/controllers/admin/workshops_controller_spec.rb +++ b/spec/controllers/admin/workshops_controller_spec.rb @@ -30,13 +30,13 @@ end context "workshop deletion tried within specific time frame since it's creation" do - it 'should not delete the workshop' do + it 'does not delete the workshop' do expect do delete :destroy, params: { id: workshop.id } end.not_to change { Workshop.count } end - it "should display workshop can't be deleted related flash message" do + it "displays workshop can't be deleted related flash message" do delete :destroy, params: { id: workshop.id } expect(flash[:notice]).to eq(I18n.t('admin.workshop.destroy.failure')) @@ -44,7 +44,7 @@ end context "workshop deletion tried outside specific time frame since it's creation" do - it 'should not delete the workshop' do + it 'does not delete the workshop' do new_current_time = 1.day + Admin::WorkshopsController:: WORKSHOP_DELETION_TIME_FRAME_SINCE_CREATION @@ -55,7 +55,7 @@ end end - it "should display workshop can't be deleted related flash message" do + it "displays workshop can't be deleted related flash message" do new_current_time = 1.day + Admin::WorkshopsController:: WORKSHOP_DELETION_TIME_FRAME_SINCE_CREATION @@ -70,13 +70,13 @@ context "workshop invitations haven't been sent" do context "workshop deletion tried within specific time frame since it's creation" do - it 'should successfully delete the workshop' do + it 'successfully deletes the workshop' do expect do delete :destroy, params: { id: workshop.id } end.to change { Workshop.count }.by(-1) end - it 'should display workshop deleted successfully related flash message' do + it 'displays workshop deleted successfully related flash message' do delete :destroy, params: { id: workshop.id } expect(flash[:notice]).to eq(I18n.t('admin.workshop.destroy.success')) @@ -84,7 +84,7 @@ end context "workshop deletion tried outside specific time frame since it's creation" do - it 'should not delete the workshop' do + it 'does not delete the workshop' do new_current_time = 1.day + Admin::WorkshopsController:: WORKSHOP_DELETION_TIME_FRAME_SINCE_CREATION @@ -95,7 +95,7 @@ end end - it "should display workshop can't be deleted related flash message" do + it "displays workshop can't be deleted related flash message" do new_current_time = 1.day + Admin::WorkshopsController:: WORKSHOP_DELETION_TIME_FRAME_SINCE_CREATION diff --git a/spec/lib/tasks/mailing_list_rake_spec.rb b/spec/lib/tasks/mailing_list_rake_spec.rb index 3498121c6..8a4acd03d 100644 --- a/spec/lib/tasks/mailing_list_rake_spec.rb +++ b/spec/lib/tasks/mailing_list_rake_spec.rb @@ -3,7 +3,7 @@ expect(task.prerequisites).to include 'environment' end - it 'should run gracefully' do + it 'runs gracefully' do # See https://stackoverflow.com/questions/23146353/rspec-3-0-how-to-mock-a-method-replacing-the-parameter-but-with-no-return-value allow(ENV).to receive(:[]).and_call_original allow(ENV).to receive(:[]).with('NEWSLETTER_ID').and_return('newsletterid') diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb index d81bd31e4..fcd2391da 100644 --- a/spec/models/event_spec.rb +++ b/spec/models/event_spec.rb @@ -47,7 +47,7 @@ expect(event.errors[:student_spaces]).to include('must be set') end - it 'it does not validates invitable if student spaces and coach spaces present' do + it 'does not validates invitable if student spaces and coach spaces present' do event.invitable = true event.coach_spaces = 1 event.student_spaces = 1 @@ -58,7 +58,7 @@ .to_not include('Fill in all invitations details to make the event invitable') end - it 'it validates invitable if student spaces or coach spaces missing' do + it 'validates invitable if student spaces or coach spaces missing' do event.invitable = true event.coach_spaces = 1 event.student_spaces = nil diff --git a/spec/presenters/sponsor_presenter_spec.rb b/spec/presenters/sponsor_presenter_spec.rb index e6eb28f2d..8fcfc71f1 100644 --- a/spec/presenters/sponsor_presenter_spec.rb +++ b/spec/presenters/sponsor_presenter_spec.rb @@ -13,7 +13,7 @@ end context '#address' do - it 'should decorate the sponsor address' do + it 'decorates the sponsor address' do expect(AddressPresenter).to receive(:new).with(sponsor.address) sponsor_presenter.address @@ -21,7 +21,7 @@ end context '#contacts' do - it 'should decorate the sponsor contacts' do + it 'decorates the sponsor contacts' do expect(ContactPresenter).to receive(:decorate_collection).with(contacts) sponsor_presenter.contacts diff --git a/spec/presenters/virtual_workshop_presenter_spec.rb b/spec/presenters/virtual_workshop_presenter_spec.rb index 03579db5a..e9d121fba 100644 --- a/spec/presenters/virtual_workshop_presenter_spec.rb +++ b/spec/presenters/virtual_workshop_presenter_spec.rb @@ -47,7 +47,7 @@ def double_workshop(attending_coaches:, attending_students:) context 'when there are more available spots' do let(:workshop) { double_workshop(attending_coaches: 2, attending_students: 5) } - it 'it returns true' do + it 'returns true' do expect(presenter.spaces?).to eq(true) end end @@ -55,7 +55,7 @@ def double_workshop(attending_coaches:, attending_students:) context 'when there are no more available spots' do let(:workshop) { double_workshop(attending_coaches: 3, attending_students: 5) } - it 'it returns false' do + it 'returns false' do expect(presenter.spaces?).to eq(false) end end diff --git a/spec/support/shared_examples/behaves_like_managing_workshop_attendance.rb b/spec/support/shared_examples/behaves_like_managing_workshop_attendance.rb index ff8990d82..c548be92b 100644 --- a/spec/support/shared_examples/behaves_like_managing_workshop_attendance.rb +++ b/spec/support/shared_examples/behaves_like_managing_workshop_attendance.rb @@ -110,7 +110,7 @@ visit workshop_path(workshop) end - it 'will be prompted to manage their subscriptions' do + it 'is prompted to manage their subscriptions' do expect(page).to have_text('Please tell us whether you want to attend as a student or coach.') click_link 'Please tell us whether you want to attend as a student or coach.' From 47eb17c94c3b2d79011b5c6a59e949ecd0ab6a1b Mon Sep 17 00:00:00 2001 From: Morgan Roderick Date: Tue, 28 Jul 2026 15:32:27 +0200 Subject: [PATCH 06/11] chore: fix RSpec/NotToNot offenses --- .rubocop_todo.yml | 6 ------ spec/lib/tasks/mailing_list_rake_spec.rb | 6 +++--- spec/models/ban_spec.rb | 4 ++-- spec/models/event_spec.rb | 6 +++--- spec/models/feedback_request_spec.rb | 4 ++-- spec/models/feedback_spec.rb | 4 ++-- spec/models/sponsor_spec.rb | 2 +- spec/models/tutorial_spec.rb | 2 +- .../behaves_like_an_invitation_route.rb | 2 +- .../shared_examples/behaves_like_invitable.rb | 12 ++++++------ 10 files changed, 21 insertions(+), 27 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 104618b45..73f0a0d5d 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -628,12 +628,6 @@ RSpec/NamedSubject: - 'spec/policies/testimonial_policy_spec.rb' - 'spec/policies/workshop_policy_spec.rb' -# Offense count: 21 -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EnforcedStyle. -# SupportedStyles: not_to, to_not -RSpec/NotToNot: - Exclude: - 'spec/lib/tasks/mailing_list_rake_spec.rb' - 'spec/models/ban_spec.rb' - 'spec/models/event_spec.rb' diff --git a/spec/lib/tasks/mailing_list_rake_spec.rb b/spec/lib/tasks/mailing_list_rake_spec.rb index 8a4acd03d..8b1cb304e 100644 --- a/spec/lib/tasks/mailing_list_rake_spec.rb +++ b/spec/lib/tasks/mailing_list_rake_spec.rb @@ -7,7 +7,7 @@ # See https://stackoverflow.com/questions/23146353/rspec-3-0-how-to-mock-a-method-replacing-the-parameter-but-with-no-return-value allow(ENV).to receive(:[]).and_call_original allow(ENV).to receive(:[]).with('NEWSLETTER_ID').and_return('newsletterid') - expect { task.invoke }.to_not raise_error + expect { task.invoke }.not_to raise_error end it 'subscribes all active members to the newsletter mailing list' do @@ -27,13 +27,13 @@ end non_subscribed.each do |inactive_subscriber| - expect(newslettter).to_not receive(:subscribe).with(inactive_subscriber.email, + expect(newslettter).not_to receive(:subscribe).with(inactive_subscriber.email, inactive_subscriber.name, inactive_subscriber.surname) end task.execute - subscribed.each { |subscriber| expect(subscriber.reload.opt_in_newsletter_at).to_not eq(nil) } + subscribed.each { |subscriber| expect(subscriber.reload.opt_in_newsletter_at).not_to eq(nil) } end end diff --git a/spec/models/ban_spec.rb b/spec/models/ban_spec.rb index a9d5cd8fc..3869dd227 100644 --- a/spec/models/ban_spec.rb +++ b/spec/models/ban_spec.rb @@ -30,7 +30,7 @@ it 'excludes expired bans' do ban = Fabricate(:ban, expires_at: Time.zone.now + 1.minute) travel 5.minutes do - expect(described_class.active).to_not include(ban) + expect(described_class.active).not_to include(ban) end end end @@ -42,7 +42,7 @@ end it 'is inactive in the past' do - expect(Fabricate.build(:ban, expires_at: Time.zone.now - 1.minute)).to_not be_active + expect(Fabricate.build(:ban, expires_at: Time.zone.now - 1.minute)).not_to be_active end end end diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb index fcd2391da..12c078a16 100644 --- a/spec/models/event_spec.rb +++ b/spec/models/event_spec.rb @@ -24,8 +24,8 @@ event.valid? - expect(event.errors[:coach_spaces]).to_not include('must be set') - expect(event.errors[:student_spaces]).to_not include('must be set') + expect(event.errors[:coach_spaces]).not_to include('must be set') + expect(event.errors[:student_spaces]).not_to include('must be set') end context 'with invitable true' do @@ -55,7 +55,7 @@ event.valid? expect(event.errors[:invitable]) - .to_not include('Fill in all invitations details to make the event invitable') + .not_to include('Fill in all invitations details to make the event invitable') end it 'validates invitable if student spaces or coach spaces missing' do diff --git a/spec/models/feedback_request_spec.rb b/spec/models/feedback_request_spec.rb index 71f3cf3b8..0a8538ecd 100644 --- a/spec/models/feedback_request_spec.rb +++ b/spec/models/feedback_request_spec.rb @@ -11,14 +11,14 @@ it '#workshop should not be blank' do feedback_request = Fabricate.build(:feedback_request, workshop: nil) - expect(feedback_request).to_not be_valid + expect(feedback_request).not_to be_valid expect(feedback_request).to have(1).error_on(:workshop) end it '#submitted should not be blank' do feedback_request = Fabricate.build(:feedback_request, submited: nil) - expect(feedback_request).to_not be_valid + expect(feedback_request).not_to be_valid expect(feedback_request).to have(1).error_on(:submited) end end diff --git a/spec/models/feedback_spec.rb b/spec/models/feedback_spec.rb index 688745ff9..bc385e750 100644 --- a/spec/models/feedback_spec.rb +++ b/spec/models/feedback_spec.rb @@ -27,14 +27,14 @@ it 'is not submitted invalid params' do expect do described_class.submit_feedback(params.except(:rating), feedback_request.token) - end.to_not change { described_class.count } + end.not_to change { described_class.count } end end it 'is not submitted with invalid token' do expect do described_class.submit_feedback(params, 'invalid_token') - end.to_not change { described_class.count } + end.not_to change { described_class.count } end end end diff --git a/spec/models/sponsor_spec.rb b/spec/models/sponsor_spec.rb index 7e66e8290..fd694c740 100644 --- a/spec/models/sponsor_spec.rb +++ b/spec/models/sponsor_spec.rb @@ -40,7 +40,7 @@ sponsor.valid? - expect(sponsor.errors[:website]).to_not include('must be a full, valid URL') + expect(sponsor.errors[:website]).not_to include('must be a full, valid URL') end it 'does not allow nonsense' do diff --git a/spec/models/tutorial_spec.rb b/spec/models/tutorial_spec.rb index bde57b4aa..fd3de45e7 100644 --- a/spec/models/tutorial_spec.rb +++ b/spec/models/tutorial_spec.rb @@ -10,7 +10,7 @@ it '#title' do tutorial = Fabricate.build(:tutorial, title: nil) - expect(tutorial).to_not be_valid + expect(tutorial).not_to be_valid expect(tutorial).to have(1).error_on(:title) end end diff --git a/spec/support/shared_examples/behaves_like_an_invitation_route.rb b/spec/support/shared_examples/behaves_like_an_invitation_route.rb index 36c00f68f..efd6e89d7 100644 --- a/spec/support/shared_examples/behaves_like_an_invitation_route.rb +++ b/spec/support/shared_examples/behaves_like_an_invitation_route.rb @@ -93,7 +93,7 @@ expect(page).to have_text(I18n.t('messages.rejected_invitation', name: invitation.member.name)) expect(waitinglisted.reload.automated_rsvp).to eq(true) - expect(waitinglisted.reload.rsvp_time).to_not be_nil + expect(waitinglisted.reload.rsvp_time).not_to be_nil expect(WaitingList.next_spot(invitation.workshop, invitation.role).present?).to eq(false) end diff --git a/spec/support/shared_examples/behaves_like_invitable.rb b/spec/support/shared_examples/behaves_like_invitable.rb index 7173e7df5..46430a8f8 100644 --- a/spec/support/shared_examples/behaves_like_invitable.rb +++ b/spec/support/shared_examples/behaves_like_invitable.rb @@ -15,7 +15,7 @@ invitable_type => invitable, attending: false) - expect(invitable.reload.attendances).to_not include(invitation) + expect(invitable.reload.attendances).not_to include(invitation) end it 'rejects banned accepted' do @@ -24,7 +24,7 @@ invitable_type => invitable, attending: true) - expect(invitable.reload.attendances).to_not include(invitation) + expect(invitable.reload.attendances).not_to include(invitation) end end @@ -44,7 +44,7 @@ invitable_type => invitable, attending: false) - expect(invitable.reload.attending_students).to_not include(invitation_to_student) + expect(invitable.reload.attending_students).not_to include(invitation_to_student) end it 'rejects banned attending students' do @@ -54,7 +54,7 @@ invitable_type => invitable, attending: true) - expect(invitable.reload.attending_students).to_not include(invitation_to_banned_student) + expect(invitable.reload.attending_students).not_to include(invitation_to_banned_student) end end @@ -74,7 +74,7 @@ invitable_type => invitable, attending: false) - expect(invitable.reload.attending_coaches).to_not include(invitation_to_coach) + expect(invitable.reload.attending_coaches).not_to include(invitation_to_coach) end it 'rejects banned attending coaches' do @@ -84,7 +84,7 @@ invitable_type => invitable, attending: true) - expect(invitable.reload.attending_students).to_not include(invitation_to_banned_student) + expect(invitable.reload.attending_students).not_to include(invitation_to_banned_student) end end end From bef49357690c9a39d54c8cec54c0d805d7fe7c1f Mon Sep 17 00:00:00 2001 From: Morgan Roderick Date: Tue, 28 Jul 2026 15:32:30 +0200 Subject: [PATCH 07/11] chore: fix RSpec/ContextMethod offenses --- .rubocop_todo.yml | 4 ---- spec/features/accepting_invitation_spec.rb | 2 +- spec/features/admin/chapters_spec.rb | 4 ++-- spec/features/admin/groups_spec.rb | 4 ++-- .../admin/manage_workshop_attendances_spec.rb | 4 ++-- spec/features/admin/workshops_spec.rb | 6 +++--- spec/features/coach_accepting_invitation_spec.rb | 2 +- .../managing_workshop_attendance_spec.rb | 4 ++-- spec/features/member_portal_spec.rb | 2 +- .../viewing_a_workshop_invitation_spec.rb | 8 ++++---- spec/lib/services/flodesk_spec.rb | 6 +++--- spec/lib/services/mailing_list_spec.rb | 6 +++--- spec/models/ban_spec.rb | 4 ++-- spec/models/event_spec.rb | 4 ++-- spec/models/feedback_spec.rb | 4 ++-- spec/models/meeting_spec.rb | 10 +++++----- spec/models/sponsor_spec.rb | 2 +- spec/models/workshop_invitation_spec.rb | 6 +++--- spec/models/workshop_spec.rb | 16 ++++++++-------- spec/presenters/contact_presenter_spec.rb | 4 ++-- spec/presenters/invitation_presenter_spec.rb | 2 +- spec/presenters/sponsor_presenter_spec.rb | 8 ++++---- .../virtual_workshop_presenter_spec.rb | 14 +++++++------- .../behaves_like_date_time_concerns.rb | 4 ++-- .../shared_examples/behaves_like_invitable.rb | 6 +++--- .../behaves_like_managing_workshop_attendance.rb | 4 ++-- 26 files changed, 68 insertions(+), 72 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 73f0a0d5d..10a16edf0 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -276,10 +276,6 @@ RSpec/BeEq: - 'spec/presenters/workshop_presenter_spec.rb' - 'spec/support/shared_examples/behaves_like_an_invitation_route.rb' -# Offense count: 67 -# This cop supports safe autocorrection (--autocorrect). -RSpec/ContextMethod: - Exclude: - 'spec/features/accepting_invitation_spec.rb' - 'spec/features/admin/chapters_spec.rb' - 'spec/features/admin/groups_spec.rb' diff --git a/spec/features/accepting_invitation_spec.rb b/spec/features/accepting_invitation_spec.rb index 8a47a56bc..7f5f4e153 100644 --- a/spec/features/accepting_invitation_spec.rb +++ b/spec/features/accepting_invitation_spec.rb @@ -1,5 +1,5 @@ RSpec.feature 'Accepting a workshop invitation', type: :feature do - context '#workshop' do + describe '#workshop' do let(:member) { Fabricate(:member) } let(:invitation) { Fabricate(:workshop_invitation, member: member, tutorial: tutorial.title) } let(:invitation_route) { invitation_path(invitation) } diff --git a/spec/features/admin/chapters_spec.rb b/spec/features/admin/chapters_spec.rb index 30d89c9d7..9652dd2fa 100644 --- a/spec/features/admin/chapters_spec.rb +++ b/spec/features/admin/chapters_spec.rb @@ -12,7 +12,7 @@ end end - context '#creating a new chapter' do + describe '#creating a new chapter' do before do login_as_admin(member) end @@ -30,7 +30,7 @@ end end - context '#editing a chapter' do + describe '#editing a chapter' do let(:chapter) { Fabricate(:chapter_with_organiser) } context 'organiser editing their chapter' do diff --git a/spec/features/admin/groups_spec.rb b/spec/features/admin/groups_spec.rb index e2aab61d1..ea89d3db1 100644 --- a/spec/features/admin/groups_spec.rb +++ b/spec/features/admin/groups_spec.rb @@ -1,5 +1,5 @@ RSpec.feature 'admin groups', type: :feature do - context '#creating a new group' do + describe '#creating a new group' do let(:member) { Fabricate(:member) } let!(:chapter) { Fabricate(:chapter, name: 'Brighton') } @@ -18,7 +18,7 @@ end end - context '#show page' do + describe '#show page' do let(:member) { Fabricate(:member) } let(:chapter) { Fabricate(:chapter, name: 'Brighton') } let(:group) { Fabricate(:group, chapter: chapter, name: 'Students') } diff --git a/spec/features/admin/manage_workshop_attendances_spec.rb b/spec/features/admin/manage_workshop_attendances_spec.rb index 26274da60..c8b421b62 100644 --- a/spec/features/admin/manage_workshop_attendances_spec.rb +++ b/spec/features/admin/manage_workshop_attendances_spec.rb @@ -11,7 +11,7 @@ login_as_admin(member) end - context '#verify_attendance' do + describe '#verify_attendance' do let(:workshop) { Fabricate(:workshop, chapter: chapter, date_and_time: Time.zone.now - 1.day) } scenario 'can verify that a member has attended the workshop' do @@ -90,7 +90,7 @@ expect(page).to have_text(invitation.tutorial) end - context '#changes' do + describe '#changes' do before do # Workshop invitations without `attending` status Fabricate(:workshop_invitation, workshop: workshop, role: 'Coach') diff --git a/spec/features/admin/workshops_spec.rb b/spec/features/admin/workshops_spec.rb index 140c3d102..b87e0ce98 100644 --- a/spec/features/admin/workshops_spec.rb +++ b/spec/features/admin/workshops_spec.rb @@ -8,7 +8,7 @@ member.add_role(:organiser, Chapter) end - context '#views' do + describe '#views' do scenario 'list of all chapter workshops' do workshops = Fabricate.times(2, :workshop, chapter: chapter) visit admin_chapter_workshops_path(chapter) @@ -37,7 +37,7 @@ end end - context '#creation' do + describe '#creation' do context 'creating a workshop' do around do |example| travel_to Time.zone.local(2020, 12, 0o1, 0, 0, 0) @@ -179,7 +179,7 @@ end end - context '#actions' do + describe '#actions' do context 'sending invitations to attendees' do scenario 'for a workshop' do workshop = Fabricate(:workshop) diff --git a/spec/features/coach_accepting_invitation_spec.rb b/spec/features/coach_accepting_invitation_spec.rb index 042d450c7..25931be9c 100644 --- a/spec/features/coach_accepting_invitation_spec.rb +++ b/spec/features/coach_accepting_invitation_spec.rb @@ -1,5 +1,5 @@ RSpec.feature 'a Coach can', type: :feature do - context '#workshop' do + describe '#workshop' do let(:member) { Fabricate(:member) } let(:invitation) { Fabricate(:coach_workshop_invitation, member: member) } let(:invitation_route) { invitation_path(invitation) } diff --git a/spec/features/managing_workshop_attendance_spec.rb b/spec/features/managing_workshop_attendance_spec.rb index e75b4a7f6..1257a5f0c 100644 --- a/spec/features/managing_workshop_attendance_spec.rb +++ b/spec/features/managing_workshop_attendance_spec.rb @@ -2,7 +2,7 @@ let(:coach) { Fabricate(:coach) } let(:student) { Fabricate(:student) } - context '#workshop' do + describe '#workshop' do let(:workshop) { Fabricate(:workshop) } let(:workshop_auto_rsvp_in_past) { Fabricate(:workshop_auto_rsvp_in_past) } let(:workshop_auto_rsvp_in_future) { Fabricate(:workshop_auto_rsvp_in_future) } @@ -10,7 +10,7 @@ include_examples 'managing workshop attendance' end - context '#virtual workshop' do + describe '#virtual workshop' do let(:workshop) { Fabricate(:virtual_workshop) } let(:workshop_auto_rsvp_in_past) { Fabricate(:virtual_workshop_auto_rsvp_in_past) } let(:workshop_auto_rsvp_in_future) { Fabricate(:virtual_workshop_auto_rsvp_in_future) } diff --git a/spec/features/member_portal_spec.rb b/spec/features/member_portal_spec.rb index 79ab370a1..46a39951e 100644 --- a/spec/features/member_portal_spec.rb +++ b/spec/features/member_portal_spec.rb @@ -8,7 +8,7 @@ login(member) end - context '#dashboard' do + describe '#dashboard' do it 'can access the member dashboard' do visit dashboard_path diff --git a/spec/features/viewing_a_workshop_invitation_spec.rb b/spec/features/viewing_a_workshop_invitation_spec.rb index 0d0aa4ee7..fc4f1bb98 100644 --- a/spec/features/viewing_a_workshop_invitation_spec.rb +++ b/spec/features/viewing_a_workshop_invitation_spec.rb @@ -13,7 +13,7 @@ expect(page).to have_text("Workshop at #{workshop.host.name}") end - context '#introduction' do + describe '#introduction' do context 'student' do scenario 'displays information for a physical workshop' do expect(page).to have_text('Please make sure you bring your laptop') @@ -38,7 +38,7 @@ end end - context '#description' do + describe '#description' do let(:workshop) { Fabricate(:workshop, description: " Follow link ") } it 'contains details about the workshop and renders user defined HTML' do @@ -61,7 +61,7 @@ expect(page).to have_text("Virtual workshop for #{workshop.chapter.name}") end - context '#introduction' do + describe '#introduction' do context 'student' do scenario 'does not display information about the physical workshop' do expect(page).to have_no_text('Please make sure you bring your laptop') @@ -75,7 +75,7 @@ end end - context '#description' do + describe '#description' do context 'when RSVPed' do let(:invitation) { Fabricate(:attending_workshop_invitation, workshop: workshop) } diff --git a/spec/lib/services/flodesk_spec.rb b/spec/lib/services/flodesk_spec.rb index 14d459b75..2865b176f 100644 --- a/spec/lib/services/flodesk_spec.rb +++ b/spec/lib/services/flodesk_spec.rb @@ -16,7 +16,7 @@ stub.strict_mode = true end - context '#subscribe' do + describe '#subscribe' do it 'adds a user to segments' do payload = { email: :email, @@ -35,7 +35,7 @@ end end - context '#unsubscribe' do + describe '#unsubscribe' do it 'removes a user from segments' do payload = { email: :email, @@ -55,7 +55,7 @@ end end - context '#subscribed?' do + describe '#subscribed?' do it 'confirms that a user is active and subscribed to a segment' do payload = { email: :email, diff --git a/spec/lib/services/mailing_list_spec.rb b/spec/lib/services/mailing_list_spec.rb index 1293d6260..894dfc05e 100644 --- a/spec/lib/services/mailing_list_spec.rb +++ b/spec/lib/services/mailing_list_spec.rb @@ -14,7 +14,7 @@ allow(Rails).to receive(:env).and_return('production'.inquiry) end - context '#subscribe' do + describe '#subscribe' do it 'adds a user to the mailing list' do expect(client).to receive(:subscribe) .with({ @@ -28,7 +28,7 @@ end end - context '#unsubscribe' do + describe '#unsubscribe' do it 'removes a user from the mailing list' do expect(client).to receive(:unsubscribe) .with({ email: :email, segment_ids: [:list_id] }) @@ -37,7 +37,7 @@ end end - context '#subscribed?' do + describe '#subscribed?' do it 'checks if a user is already subscribed to the mailing list' do expect(client).to receive(:subscribed?) .with({ email: :email, segment_ids: [:list_id] }) diff --git a/spec/models/ban_spec.rb b/spec/models/ban_spec.rb index 3869dd227..5105f071e 100644 --- a/spec/models/ban_spec.rb +++ b/spec/models/ban_spec.rb @@ -5,7 +5,7 @@ it { is_expected.to validate_presence_of(:note) } it { is_expected.to validate_presence_of(:added_by) } - context '#expires_at' do + describe '#expires_at' do it 'valid in the future' do ban = Fabricate.build(:ban, expires_at: Time.zone.now + 1.minute) ban.valid? @@ -36,7 +36,7 @@ end end - context '#active?' do + describe '#active?' do it 'is active in the future' do expect(Fabricate.build(:ban, expires_at: Time.zone.now + 1.minute)).to be_active end diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb index 12c078a16..750b3c643 100644 --- a/spec/models/event_spec.rb +++ b/spec/models/event_spec.rb @@ -16,7 +16,7 @@ it { is_expected.to validate_numericality_of(:coach_spaces) } it { is_expected.to validate_numericality_of(:student_spaces) } - context '#invitablility' do + describe '#invitablility' do it 'does not validate if invitable false' do event.invitable = false event.coach_spaces = nil @@ -83,7 +83,7 @@ end end - context '#verified_students' do + describe '#verified_students' do it 'returns all students who have verified their attendance' do event = Fabricate(:event) 1.times.map { Fabricate(:invitation, event: event, attending: true) } diff --git a/spec/models/feedback_spec.rb b/spec/models/feedback_spec.rb index bc385e750..1e5132fc2 100644 --- a/spec/models/feedback_spec.rb +++ b/spec/models/feedback_spec.rb @@ -2,7 +2,7 @@ subject(:feedback) { Fabricate.build(:feedback) } context 'validations' do - context '#rating' do + describe '#rating' do it { is_expected.to validate_presence_of(:rating) } it { is_expected.to validate_inclusion_of(:rating).in_range(1..5).with_message(/can't be blank/) } end @@ -10,7 +10,7 @@ it { is_expected.to validate_presence_of(:tutorial) } end - context '#submit_feedback' do + describe '#submit_feedback' do let(:feedback_request) { Fabricate(:feedback_request) } let(:params) do diff --git a/spec/models/meeting_spec.rb b/spec/models/meeting_spec.rb index ce764fb86..38912b531 100644 --- a/spec/models/meeting_spec.rb +++ b/spec/models/meeting_spec.rb @@ -9,7 +9,7 @@ it { is_expected.to validate_presence_of(:ends_at) } it { is_expected.to belong_to(:venue) } - context '#slug' do + describe '#slug' do it 'fails when slug not present' do meeting = Fabricate(:meeting, slug: 'meeting') new_meeting = Fabricate.build(:meeting, slug: 'meeting') @@ -32,7 +32,7 @@ end end - context '#title' do + describe '#title' do subject(:meeting) { described_class.new(date_and_time: Time.zone.local(2014, 8, 20, 18, 30)) } it 'is formatted correctly' do @@ -40,7 +40,7 @@ end end - context '#set_slug' do + describe '#set_slug' do it 'loops until it finds an available slug' do Fabricate.times(4, :meeting, name: 'monthly') meeting = Fabricate(:meeting, name: 'monthly') @@ -49,7 +49,7 @@ end end - context '#not_full' do + describe '#not_full' do it 'returns true if meeting is not full' do meeting = Fabricate(:meeting) Fabricate(:attending_meeting_invitation, meeting: meeting) @@ -65,7 +65,7 @@ end end - context '#attendees_csv' do + describe '#attendees_csv' do it 'generates a csv of attendees' do meeting = Fabricate(:meeting) invitations = Fabricate.times(2, :attending_meeting_invitation, meeting: meeting) diff --git a/spec/models/sponsor_spec.rb b/spec/models/sponsor_spec.rb index fd694c740..f1cf84272 100644 --- a/spec/models/sponsor_spec.rb +++ b/spec/models/sponsor_spec.rb @@ -34,7 +34,7 @@ end end - context '#website_is_url format' do + describe '#website_is_url format' do it 'allows full URLs' do sponsor.website = 'http://google.com' diff --git a/spec/models/workshop_invitation_spec.rb b/spec/models/workshop_invitation_spec.rb index 878d028b9..2b880ac80 100644 --- a/spec/models/workshop_invitation_spec.rb +++ b/spec/models/workshop_invitation_spec.rb @@ -22,7 +22,7 @@ end context 'scopes' do - context '#attended' do + describe '#attended' do it 'ignores when attended nil' do Fabricate(:workshop_invitation, attended: nil) @@ -42,7 +42,7 @@ end end - context '#accepted_or_attended' do + describe '#accepted_or_attended' do it 'ignores when attending nil and attended nil' do Fabricate(:workshop_invitation, attending: nil, attended: nil) @@ -85,7 +85,7 @@ expect(described_class.year((Time.zone.now - 2.years).year).count).to eq(1) end - context '#not_reminded' do + describe '#not_reminded' do it 'includes invitations without reminders' do not_reminded = Fabricate(:student_workshop_invitation, reminded_at: nil) diff --git a/spec/models/workshop_spec.rb b/spec/models/workshop_spec.rb index 446166b7e..fdca76611 100644 --- a/spec/models/workshop_spec.rb +++ b/spec/models/workshop_spec.rb @@ -7,7 +7,7 @@ context 'validates' do it { is_expected.to validate_presence_of(:chapter_id) } - context '#date_and_time' do + describe '#date_and_time' do it 'does not validate if chapter_id blank' do workshop.chapter_id = nil workshop.date_and_time = nil @@ -23,7 +23,7 @@ end end - context '#end_at' do + describe '#end_at' do it 'does not validate if chapter_id blank' do workshop.chapter_id = nil workshop.ends_at = nil @@ -48,7 +48,7 @@ it { is_expected.to validate_numericality_of(:coach_spaces).is_greater_than(0) } end - context '#rsvp_date_time_fields_must_be_paired' do + describe '#rsvp_date_time_fields_must_be_paired' do shared_examples_for 'date_time_fields_must_be_paired' do |prefix| let(:date_field) { :"#{prefix}_local_date" } let(:time_field) { :"#{prefix}_local_time" } @@ -117,7 +117,7 @@ end end - context '#rsvp_closes_at' do + describe '#rsvp_closes_at' do it 'must be before the workshop start time' do workshop.date_and_time = Time.zone.now + 1.hour workshop.rsvp_closes_at = Time.zone.now + 2.hours @@ -200,7 +200,7 @@ end end - context '#rsvp_available?' do + describe '#rsvp_available?' do context 'rsvp is available' do it 'when the event is in the future' do workshop.date_and_time = 1.day.from_now @@ -230,7 +230,7 @@ end end - context '#to_s' do + describe '#to_s' do it 'when physical workshop' do expect(workshop.to_s).to eq('Workshop') end @@ -241,7 +241,7 @@ end end - context '#scopes' do + describe '#scopes' do describe '#host' do it 'includes workshops with sponsored hosts' do workshop_sponsor = Fabricate(:workshop_sponsor, host: true) @@ -300,7 +300,7 @@ end end - context '#invitable_yet?' do + describe '#invitable_yet?' do it 'is invitable if invitable set to true, no RSVP open time/date set' do workshop = Fabricate.build(:workshop, invitable: true) expect(workshop.invitable_yet?).to be true diff --git a/spec/presenters/contact_presenter_spec.rb b/spec/presenters/contact_presenter_spec.rb index 3d7cb9d1f..1ca49f494 100644 --- a/spec/presenters/contact_presenter_spec.rb +++ b/spec/presenters/contact_presenter_spec.rb @@ -2,13 +2,13 @@ let(:contact_presenter) { described_class.new(contact) } let(:contact) { Fabricate(:contact) } - context '#full_name' do + describe '#full_name' do it 'returns the contact\'s full name' do expect(contact_presenter.full_name).to eq("#{contact.name} #{contact.surname}") end end - context '#mailing_list_subscription_class' do + describe '#mailing_list_subscription_class' do it 'when subscribed to the Sponsors mailing list it returns the correct css class' do contact.mailing_list_consent = true diff --git a/spec/presenters/invitation_presenter_spec.rb b/spec/presenters/invitation_presenter_spec.rb index 69382ac3d..53561bc1e 100644 --- a/spec/presenters/invitation_presenter_spec.rb +++ b/spec/presenters/invitation_presenter_spec.rb @@ -6,7 +6,7 @@ expect(invitation_presenter.member).to eq(invitation.member) end - context '#attendance_status' do + describe '#attendance_status' do it 'returns Attending when attending' do invitation.update_attribute(:attending, true) diff --git a/spec/presenters/sponsor_presenter_spec.rb b/spec/presenters/sponsor_presenter_spec.rb index 8fcfc71f1..ffb7d212a 100644 --- a/spec/presenters/sponsor_presenter_spec.rb +++ b/spec/presenters/sponsor_presenter_spec.rb @@ -4,7 +4,7 @@ let(:contact) { Fabricate(:contact) } let(:contacts) { [contact] } - context '#decorate_collection' do + describe '#decorate_collection' do it 'decorates a collection of Sponsors' do expect(described_class).to receive(:new).with(sponsor) @@ -12,7 +12,7 @@ end end - context '#address' do + describe '#address' do it 'decorates the sponsor address' do expect(AddressPresenter).to receive(:new).with(sponsor.address) @@ -20,7 +20,7 @@ end end - context '#contacts' do + describe '#contacts' do it 'decorates the sponsor contacts' do expect(ContactPresenter).to receive(:decorate_collection).with(contacts) @@ -28,7 +28,7 @@ end end - context '#sponsorships_count' do + describe '#sponsorships_count' do before do Fabricate(:workshop_sponsor, sponsor: sponsor) Fabricate.times(2, :sponsorship, sponsor: sponsor) diff --git a/spec/presenters/virtual_workshop_presenter_spec.rb b/spec/presenters/virtual_workshop_presenter_spec.rb index e9d121fba..ca270b20d 100644 --- a/spec/presenters/virtual_workshop_presenter_spec.rb +++ b/spec/presenters/virtual_workshop_presenter_spec.rb @@ -9,13 +9,13 @@ def double_workshop(attending_coaches:, attending_students:) let(:workshop) { double_workshop(attending_coaches: 3, attending_students: 4) } let(:presenter) { described_class.new(workshop) } - context '#title' do + describe '#title' do it 'returns the title of a virtual workshop' do expect(presenter.title).to eq("Virtual workshop for #{chapter.name}") end end - context '#coach_spaces' do + describe '#coach_spaces' do it 'returns the workshop\'s coach_spaces' do expect(workshop).to receive(:coach_spaces) @@ -23,7 +23,7 @@ def double_workshop(attending_coaches:, attending_students:) end end - context '#student_spaces' do + describe '#student_spaces' do it 'returns the workshop\'s student spaces' do expect(workshop).to receive(:student_spaces) @@ -31,19 +31,19 @@ def double_workshop(attending_coaches:, attending_students:) end end - context '#student_spaces?' do + describe '#student_spaces?' do it 'checks if there are any more available student spots' do expect(presenter.student_spaces?).to eq(true) end end - context '#coach_spaces?' do + describe '#coach_spaces?' do it 'checks if there are any more available coach spots' do expect(presenter.coach_spaces?).to eq(false) end end - context '#spaces?' do + describe '#spaces?' do context 'when there are more available spots' do let(:workshop) { double_workshop(attending_coaches: 2, attending_students: 5) } @@ -61,7 +61,7 @@ def double_workshop(attending_coaches:, attending_students:) end end - context '#send_attending_email' do + describe '#send_attending_email' do it 'enqueues an attending email to the invitation user' do invitation = double(:invitation, member: double(:member)) mailer_double = double(:mailer) diff --git a/spec/support/shared_examples/behaves_like_date_time_concerns.rb b/spec/support/shared_examples/behaves_like_date_time_concerns.rb index d8cc842aa..3e2b21206 100644 --- a/spec/support/shared_examples/behaves_like_date_time_concerns.rb +++ b/spec/support/shared_examples/behaves_like_date_time_concerns.rb @@ -16,7 +16,7 @@ expect(date_time_able.date).to eq('Wed, 22 Aug 2018') end - context '#time' do + describe '#time' do it 'returns nil if not available' do travel_to Time.zone.local(2010, 12, 31, 23, 59, 42) do date_time_able = Fabricate.build(date_time_type) @@ -40,7 +40,7 @@ end end - context '#past?' do + describe '#past?' do it 'returns true for object with datetime before today' do travel_to Time.zone.local(2010, 12, 31, 23, 59, 42) do date_time_able = Fabricate(date_time_type, diff --git a/spec/support/shared_examples/behaves_like_invitable.rb b/spec/support/shared_examples/behaves_like_invitable.rb index 46430a8f8..f07b7f433 100644 --- a/spec/support/shared_examples/behaves_like_invitable.rb +++ b/spec/support/shared_examples/behaves_like_invitable.rb @@ -1,7 +1,7 @@ RSpec.shared_examples 'Invitable' do |invitation_type, invitable_type| let(:invitable) { Fabricate(invitable_type) } - context '#attendances' do + describe '#attendances' do it 'permits accepted' do invitation = Fabricate(invitation_type, invitable_type => invitable, @@ -28,7 +28,7 @@ end end - context '#attending_students' do + describe '#attending_students' do it 'accepts attending students' do invitation_to_student = Fabricate(invitation_type, role: 'Student', @@ -58,7 +58,7 @@ end end - context '#attending_coaches' do + describe '#attending_coaches' do it 'accepts attending coaches' do invitation_to_coach = Fabricate(invitation_type, role: 'Coach', diff --git a/spec/support/shared_examples/behaves_like_managing_workshop_attendance.rb b/spec/support/shared_examples/behaves_like_managing_workshop_attendance.rb index c548be92b..27593756d 100644 --- a/spec/support/shared_examples/behaves_like_managing_workshop_attendance.rb +++ b/spec/support/shared_examples/behaves_like_managing_workshop_attendance.rb @@ -1,6 +1,6 @@ RSpec.shared_examples 'managing workshop attendance' do context 'a logged in member' do - context '#upcoming workshop' do + describe '#upcoming workshop' do context 'via the workshop page' do let!(:tutorial) { Fabricate(:tutorial) } @@ -179,7 +179,7 @@ end end - context '#past workshop' do + describe '#past workshop' do let(:workshop) { Fabricate(:workshop, date_and_time: 2.weeks.ago) } scenario 'cannot interact with a past event' do From 65bb8cbfce5cd8e0834d49cca1f8d3ea9538b660 Mon Sep 17 00:00:00 2001 From: Morgan Roderick Date: Tue, 28 Jul 2026 15:32:35 +0200 Subject: [PATCH 08/11] chore: fix RSpec/VerifiedDoubleReference offenses --- .rubocop_todo.yml | 4 ---- spec/controllers/admin/member_search_controller_spec.rb | 4 ++-- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 10a16edf0..2283ed5ef 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -671,10 +671,6 @@ RSpec/SubjectStub: - 'spec/models/workshop_invitation_spec.rb' - 'spec/models/workshop_spec.rb' -# Offense count: 2 -# This cop supports unsafe autocorrection (--autocorrect-all). -RSpec/VerifiedDoubleReference: - Exclude: - 'spec/controllers/admin/member_search_controller_spec.rb' # Offense count: 38 diff --git a/spec/controllers/admin/member_search_controller_spec.rb b/spec/controllers/admin/member_search_controller_spec.rb index 5ebcda1b3..2fdb65f04 100644 --- a/spec/controllers/admin/member_search_controller_spec.rb +++ b/spec/controllers/admin/member_search_controller_spec.rb @@ -13,8 +13,8 @@ end context 'when user is an admin' do - let(:fake_relation) { instance_double('ActiveRecord::Relation') } - let(:fake_juliet) { instance_double('Member', id: 1, name: 'Juliet', surname: 'Montague') } + let(:fake_relation) { instance_double(ActiveRecord::Relation) } + let(:fake_juliet) { instance_double(Member, id: 1, name: 'Juliet', surname: 'Montague') } before do login_as_admin(member) From 63f13b413fcc4578ac25c00b2a14427159dd9730 Mon Sep 17 00:00:00 2001 From: Morgan Roderick Date: Tue, 28 Jul 2026 15:32:38 +0200 Subject: [PATCH 09/11] chore: fix RSpec/ExpectChange offenses --- .rubocop_todo.yml | 6 ------ spec/controllers/admin/workshops_controller_spec.rb | 8 ++++---- spec/features/member/login_spec.rb | 2 +- spec/models/feedback_spec.rb | 6 +++--- 4 files changed, 8 insertions(+), 14 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 2283ed5ef..dfa631824 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -419,12 +419,6 @@ RSpec/ExampleLength: - 'spec/models/feedback_spec.rb' - 'spec/presenters/contact_presenter_spec.rb' -# Offense count: 8 -# This cop supports unsafe autocorrection (--autocorrect-all). -# Configuration parameters: EnforcedStyle, NegatedMatcher. -# SupportedStyles: method_call, block -RSpec/ExpectChange: - Exclude: - 'spec/controllers/admin/workshops_controller_spec.rb' - 'spec/features/member/login_spec.rb' - 'spec/models/feedback_spec.rb' diff --git a/spec/controllers/admin/workshops_controller_spec.rb b/spec/controllers/admin/workshops_controller_spec.rb index de012c26f..2484fe7f9 100644 --- a/spec/controllers/admin/workshops_controller_spec.rb +++ b/spec/controllers/admin/workshops_controller_spec.rb @@ -33,7 +33,7 @@ it 'does not delete the workshop' do expect do delete :destroy, params: { id: workshop.id } - end.not_to change { Workshop.count } + end.not_to change(Workshop, :count) end it "displays workshop can't be deleted related flash message" do @@ -51,7 +51,7 @@ travel new_current_time do expect do delete :destroy, params: { id: workshop.id } - end.not_to change { Workshop.count } + end.not_to change(Workshop, :count) end end @@ -73,7 +73,7 @@ it 'successfully deletes the workshop' do expect do delete :destroy, params: { id: workshop.id } - end.to change { Workshop.count }.by(-1) + end.to change(Workshop, :count).by(-1) end it 'displays workshop deleted successfully related flash message' do @@ -91,7 +91,7 @@ travel new_current_time do expect do delete :destroy, params: { id: workshop.id } - end.not_to change { Workshop.count } + end.not_to change(Workshop, :count) end end diff --git a/spec/features/member/login_spec.rb b/spec/features/member/login_spec.rb index b2151710d..1a36576b2 100644 --- a/spec/features/member/login_spec.rb +++ b/spec/features/member/login_spec.rb @@ -21,7 +21,7 @@ visit root_path expect do click_link 'Sign in' - end.to change { Member.count }.by(1) + end.to change(Member, :count).by(1) end end end diff --git a/spec/models/feedback_spec.rb b/spec/models/feedback_spec.rb index 1e5132fc2..d58a7f0c9 100644 --- a/spec/models/feedback_spec.rb +++ b/spec/models/feedback_spec.rb @@ -21,20 +21,20 @@ it 'is submitted valid params' do expect do described_class.submit_feedback(params, feedback_request.token) - end.to change { described_class.count }.by(1) + end.to change(described_class, :count).by(1) end it 'is not submitted invalid params' do expect do described_class.submit_feedback(params.except(:rating), feedback_request.token) - end.not_to change { described_class.count } + end.not_to change(described_class, :count) end end it 'is not submitted with invalid token' do expect do described_class.submit_feedback(params, 'invalid_token') - end.not_to change { described_class.count } + end.not_to change(described_class, :count) end end end From 761f94cb69393fedd048295bb01c2af9ec39c0ae Mon Sep 17 00:00:00 2001 From: Morgan Roderick Date: Tue, 28 Jul 2026 15:32:58 +0200 Subject: [PATCH 10/11] chore: fix RSpec/BeEq offenses --- .rubocop_todo.yml | 4 ---- spec/controllers/member/details_controller_spec.rb | 2 +- spec/lib/tasks/feedback_rake_spec.rb | 4 ++-- spec/lib/tasks/mailing_list_rake_spec.rb | 2 +- spec/models/invitation_spec.rb | 4 ++-- spec/models/meeting_spec.rb | 4 ++-- spec/presenters/how_you_found_us_presenter_spec.rb | 4 ++-- spec/presenters/virtual_workshop_presenter_spec.rb | 8 ++++---- spec/presenters/workshop_presenter_capacity_spec.rb | 12 ++++++------ spec/presenters/workshop_presenter_spec.rb | 4 ++-- .../behaves_like_an_invitation_route.rb | 6 +++--- 11 files changed, 25 insertions(+), 29 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index dfa631824..e1985786a 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -261,10 +261,6 @@ RSpec/AnyInstance: - 'spec/controllers/member/details_controller_spec.rb' - 'spec/support/helpers/login_helpers.rb' -# Offense count: 25 -# This cop supports unsafe autocorrection (--autocorrect-all). -RSpec/BeEq: - Exclude: - 'spec/controllers/member/details_controller_spec.rb' - 'spec/lib/tasks/feedback_rake_spec.rb' - 'spec/lib/tasks/mailing_list_rake_spec.rb' diff --git a/spec/controllers/member/details_controller_spec.rb b/spec/controllers/member/details_controller_spec.rb index 636e474b1..10b98a639 100644 --- a/spec/controllers/member/details_controller_spec.rb +++ b/spec/controllers/member/details_controller_spec.rb @@ -20,7 +20,7 @@ member.reload expect(I18n.t("member.details.edit.how_you_found_us_options.#{member.how_you_found_us}")).to eq('Social media') - expect(member.how_you_found_us_other_reason).to eq(nil) + expect(member.how_you_found_us_other_reason).to be_nil expect(response).to redirect_to(step2_member_path) end diff --git a/spec/lib/tasks/feedback_rake_spec.rb b/spec/lib/tasks/feedback_rake_spec.rb index 5c4603a4c..f2b768bf8 100644 --- a/spec/lib/tasks/feedback_rake_spec.rb +++ b/spec/lib/tasks/feedback_rake_spec.rb @@ -46,11 +46,11 @@ task.execute past_workshops.each do |workshop| - expect(FeedbackRequest.where(member: student, workshop: workshop, submited: false).exists?).to eq(false) + expect(FeedbackRequest.where(member: student, workshop: workshop, submited: false).exists?).to be(false) end yesterdays_workshops.each do |workshop| - expect(FeedbackRequest.where(member: student, workshop: workshop, submited: false).exists?).to eq(true) + expect(FeedbackRequest.where(member: student, workshop: workshop, submited: false).exists?).to be(true) end end end diff --git a/spec/lib/tasks/mailing_list_rake_spec.rb b/spec/lib/tasks/mailing_list_rake_spec.rb index 8b1cb304e..bd793ee91 100644 --- a/spec/lib/tasks/mailing_list_rake_spec.rb +++ b/spec/lib/tasks/mailing_list_rake_spec.rb @@ -34,6 +34,6 @@ task.execute - subscribed.each { |subscriber| expect(subscriber.reload.opt_in_newsletter_at).not_to eq(nil) } + subscribed.each { |subscriber| expect(subscriber.reload.opt_in_newsletter_at).not_to be_nil } end end diff --git a/spec/models/invitation_spec.rb b/spec/models/invitation_spec.rb index 1150cd1a2..dada743c5 100644 --- a/spec/models/invitation_spec.rb +++ b/spec/models/invitation_spec.rb @@ -16,7 +16,7 @@ it 'checks if there are any available spaces for students at the event' do student_invitation = Fabricate(:invitation) - expect(student_invitation.student_spaces?).to eq(true) + expect(student_invitation.student_spaces?).to be(true) end end @@ -24,7 +24,7 @@ it 'checks if there are any available spaces for coaches at the event' do coach_invitation = Fabricate(:coach_invitation) - expect(coach_invitation.coach_spaces?).to eq(true) + expect(coach_invitation.coach_spaces?).to be(true) end end end diff --git a/spec/models/meeting_spec.rb b/spec/models/meeting_spec.rb index 38912b531..9f7d036db 100644 --- a/spec/models/meeting_spec.rb +++ b/spec/models/meeting_spec.rb @@ -54,14 +54,14 @@ meeting = Fabricate(:meeting) Fabricate(:attending_meeting_invitation, meeting: meeting) - expect(meeting.not_full).to eq(true) + expect(meeting.not_full).to be(true) end it 'returns false if meeting is full' do meeting = Fabricate(:meeting) Fabricate.times(21, :attending_meeting_invitation, meeting: meeting) - expect(meeting.not_full).to eq(false) + expect(meeting.not_full).to be(false) end end diff --git a/spec/presenters/how_you_found_us_presenter_spec.rb b/spec/presenters/how_you_found_us_presenter_spec.rb index ae151c4d7..9a6250edb 100644 --- a/spec/presenters/how_you_found_us_presenter_spec.rb +++ b/spec/presenters/how_you_found_us_presenter_spec.rb @@ -62,11 +62,11 @@ def add_member_without_how(group) it 'returns true when there are responses' do add_member(group, :from_a_friend) - expect(presenter.data_present?).to eq(true) + expect(presenter.data_present?).to be(true) end it 'returns false when there are no responses' do - expect(presenter.data_present?).to eq(false) + expect(presenter.data_present?).to be(false) end end end diff --git a/spec/presenters/virtual_workshop_presenter_spec.rb b/spec/presenters/virtual_workshop_presenter_spec.rb index ca270b20d..a25d88e88 100644 --- a/spec/presenters/virtual_workshop_presenter_spec.rb +++ b/spec/presenters/virtual_workshop_presenter_spec.rb @@ -33,13 +33,13 @@ def double_workshop(attending_coaches:, attending_students:) describe '#student_spaces?' do it 'checks if there are any more available student spots' do - expect(presenter.student_spaces?).to eq(true) + expect(presenter.student_spaces?).to be(true) end end describe '#coach_spaces?' do it 'checks if there are any more available coach spots' do - expect(presenter.coach_spaces?).to eq(false) + expect(presenter.coach_spaces?).to be(false) end end @@ -48,7 +48,7 @@ def double_workshop(attending_coaches:, attending_students:) let(:workshop) { double_workshop(attending_coaches: 2, attending_students: 5) } it 'returns true' do - expect(presenter.spaces?).to eq(true) + expect(presenter.spaces?).to be(true) end end @@ -56,7 +56,7 @@ def double_workshop(attending_coaches:, attending_students:) let(:workshop) { double_workshop(attending_coaches: 3, attending_students: 5) } it 'returns false' do - expect(presenter.spaces?).to eq(false) + expect(presenter.spaces?).to be(false) end end end diff --git a/spec/presenters/workshop_presenter_capacity_spec.rb b/spec/presenters/workshop_presenter_capacity_spec.rb index 98bc80db4..402bc6421 100644 --- a/spec/presenters/workshop_presenter_capacity_spec.rb +++ b/spec/presenters/workshop_presenter_capacity_spec.rb @@ -17,7 +17,7 @@ it 'returns false when no spaces are available' do expect(workshop.attending_students.count).to eq(2) expect(workshop.student_spaces).to eq(2) - expect(presenter.event_student_spaces?).to eq(false), + expect(presenter.event_student_spaces?).to be(false), 'Expected event_student_spaces? to be false when at capacity (2/2), but got true' end end @@ -32,7 +32,7 @@ it 'returns true when spaces are available' do expect(workshop.attending_students.count).to eq(1) expect(workshop.student_spaces).to eq(2) - expect(presenter.event_student_spaces?).to eq(true), + expect(presenter.event_student_spaces?).to be(true), 'Expected event_student_spaces? to be true when spaces available (1/2), but got false' end end @@ -56,7 +56,7 @@ expect(workshop_with_zero_spaces.attending_students.count).to eq(1) expect(workshop_with_zero_spaces.student_spaces).to eq(0) expect(presenter_zero_spaces.student_spaces).to eq(20), 'Capacity should come from sponsor' - expect(presenter_zero_spaces.event_student_spaces?).to eq(true), + expect(presenter_zero_spaces.event_student_spaces?).to be(true), 'Expected event_student_spaces? to be true when sponsor has capacity (1/20), but got false' end end @@ -77,7 +77,7 @@ it 'returns false when no coach spaces are available' do expect(workshop.attending_coaches.count).to eq(2) - expect(presenter.event_coach_spaces?).to eq(false), + expect(presenter.event_coach_spaces?).to be(false), 'Expected event_coach_spaces? to be false when at capacity (2/2), but got true' end end @@ -91,7 +91,7 @@ it 'returns true when coach spaces are available' do expect(workshop.attending_coaches.count).to eq(1) - expect(presenter.event_coach_spaces?).to eq(true), + expect(presenter.event_coach_spaces?).to be(true), 'Expected event_coach_spaces? to be true when spaces available (1/2), but got false' end end @@ -115,7 +115,7 @@ expect(workshop_with_zero_spaces.attending_coaches.count).to eq(1) expect(workshop_with_zero_spaces.coach_spaces).to eq(0) expect(presenter_zero_spaces.coach_spaces).to eq(10), 'Capacity should come from sponsor' - expect(presenter_zero_spaces.event_coach_spaces?).to eq(true), + expect(presenter_zero_spaces.event_coach_spaces?).to be(true), 'Expected event_coach_spaces? to be true when sponsor has capacity (1/10), but got false' end end diff --git a/spec/presenters/workshop_presenter_spec.rb b/spec/presenters/workshop_presenter_spec.rb index 47b410803..f68e18f08 100644 --- a/spec/presenters/workshop_presenter_spec.rb +++ b/spec/presenters/workshop_presenter_spec.rb @@ -170,7 +170,7 @@ def double_workshop(attending_coaches:, attending_students:) let(:workshop) { double_workshop(attending_coaches: 2, attending_students: 3) } it 'returns true' do - expect(presenter.spaces?).to eq(true) + expect(presenter.spaces?).to be(true) end end @@ -178,7 +178,7 @@ def double_workshop(attending_coaches:, attending_students:) let(:workshop) { double_workshop(attending_coaches: 3, attending_students: 5) } it 'returns false' do - expect(presenter.spaces?).to eq(false) + expect(presenter.spaces?).to be(false) end end end diff --git a/spec/support/shared_examples/behaves_like_an_invitation_route.rb b/spec/support/shared_examples/behaves_like_an_invitation_route.rb index efd6e89d7..b593bf72d 100644 --- a/spec/support/shared_examples/behaves_like_an_invitation_route.rb +++ b/spec/support/shared_examples/behaves_like_an_invitation_route.rb @@ -87,14 +87,14 @@ WaitingList.add(waitinglisted) invitation.update_attribute(:attending, true) visit invitation_route - expect(WaitingList.next_spot(invitation.workshop, invitation.role).present?).to eq(true) + expect(WaitingList.next_spot(invitation.workshop, invitation.role).present?).to be(true) click_on 'I can no longer attend' expect(page).to have_text(I18n.t('messages.rejected_invitation', name: invitation.member.name)) - expect(waitinglisted.reload.automated_rsvp).to eq(true) + expect(waitinglisted.reload.automated_rsvp).to be(true) expect(waitinglisted.reload.rsvp_time).not_to be_nil - expect(WaitingList.next_spot(invitation.workshop, invitation.role).present?).to eq(false) + expect(WaitingList.next_spot(invitation.workshop, invitation.role).present?).to be(false) end scenario 'when they are successful by accessing the link directly' do From 8a975801b1df9889d3edb46aab70379d5aa164bb Mon Sep 17 00:00:00 2001 From: Morgan Roderick Date: Tue, 28 Jul 2026 15:33:26 +0200 Subject: [PATCH 11/11] chore: regenerate rubocop_todo after fixing 10 RSpec cops --- .rubocop_todo.yml | 105 ++-------------------------------------------- 1 file changed, 3 insertions(+), 102 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index e1985786a..8fdf192a0 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config --auto-gen-only-exclude --no-exclude-limit` -# on 2026-07-28 13:24:16 UTC using RuboCop version 1.88.2. +# on 2026-07-28 13:33:16 UTC using RuboCop version 1.88.2. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -18,14 +18,12 @@ Capybara/RSpec/VisibilityMatcher: Exclude: - 'spec/components/chapters_sidebar_component_spec.rb' -# Offense count: 10 +# Offense count: 5 # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: AllowedMethods, AllowedPatterns. Lint/AmbiguousBlockAssociation: Exclude: - 'spec/controllers/admin/member_notes_controller_spec.rb' - - 'spec/controllers/admin/workshops_controller_spec.rb' - - 'spec/models/feedback_spec.rb' - 'spec/services/three_month_email_service_spec.rb' # Offense count: 2 @@ -261,44 +259,7 @@ RSpec/AnyInstance: - 'spec/controllers/member/details_controller_spec.rb' - 'spec/support/helpers/login_helpers.rb' - - 'spec/controllers/member/details_controller_spec.rb' - - 'spec/lib/tasks/feedback_rake_spec.rb' - - 'spec/lib/tasks/mailing_list_rake_spec.rb' - - 'spec/models/invitation_spec.rb' - - 'spec/models/meeting_spec.rb' - - 'spec/presenters/how_you_found_us_presenter_spec.rb' - - 'spec/presenters/virtual_workshop_presenter_spec.rb' - - 'spec/presenters/workshop_presenter_capacity_spec.rb' - - 'spec/presenters/workshop_presenter_spec.rb' - - 'spec/support/shared_examples/behaves_like_an_invitation_route.rb' - - - 'spec/features/accepting_invitation_spec.rb' - - 'spec/features/admin/chapters_spec.rb' - - 'spec/features/admin/groups_spec.rb' - - 'spec/features/admin/manage_workshop_attendances_spec.rb' - - 'spec/features/admin/workshops_spec.rb' - - 'spec/features/coach_accepting_invitation_spec.rb' - - 'spec/features/managing_workshop_attendance_spec.rb' - - 'spec/features/member_portal_spec.rb' - - 'spec/features/viewing_a_workshop_invitation_spec.rb' - - 'spec/lib/services/flodesk_spec.rb' - - 'spec/lib/services/mailing_list_spec.rb' - - 'spec/models/ban_spec.rb' - - 'spec/models/event_spec.rb' - - 'spec/models/feedback_spec.rb' - - 'spec/models/meeting_spec.rb' - - 'spec/models/sponsor_spec.rb' - - 'spec/models/workshop_invitation_spec.rb' - - 'spec/models/workshop_spec.rb' - - 'spec/presenters/contact_presenter_spec.rb' - - 'spec/presenters/invitation_presenter_spec.rb' - - 'spec/presenters/sponsor_presenter_spec.rb' - - 'spec/presenters/virtual_workshop_presenter_spec.rb' - - 'spec/support/shared_examples/behaves_like_date_time_concerns.rb' - - 'spec/support/shared_examples/behaves_like_invitable.rb' - - 'spec/support/shared_examples/behaves_like_managing_workshop_attendance.rb' - -# Offense count: 212 +# Offense count: 144 # Configuration parameters: Prefixes, AllowedPatterns. # Prefixes: when, with, without RSpec/ContextWording: @@ -311,7 +272,6 @@ RSpec/ContextWording: - 'spec/features/admin/accessing_portal_spec.rb' - 'spec/features/admin/chapters_spec.rb' - 'spec/features/admin/feedback_spec.rb' - - 'spec/features/admin/groups_spec.rb' - 'spec/features/admin/manage_sponsor_spec.rb' - 'spec/features/admin/manage_workshop_attendances_spec.rb' - 'spec/features/admin/managing_organisers_spec.rb' @@ -320,11 +280,9 @@ RSpec/ContextWording: - 'spec/features/admin/sponsor_spec.rb' - 'spec/features/admin/workshops_spec.rb' - 'spec/features/chapter_spec.rb' - - 'spec/features/coach_accepting_invitation_spec.rb' - 'spec/features/internationalization_spec.rb' - 'spec/features/listing_events_spec.rb' - 'spec/features/manage_contact_preferences_spec.rb' - - 'spec/features/managing_workshop_attendance_spec.rb' - 'spec/features/member_feedback_spec.rb' - 'spec/features/member_portal_spec.rb' - 'spec/features/sponsors_spec.rb' @@ -335,8 +293,6 @@ RSpec/ContextWording: - 'spec/features/viewing_a_workshop_invitation_spec.rb' - 'spec/features/viewing_a_workshop_spec.rb' - 'spec/features/visiting_homepage_spec.rb' - - 'spec/lib/services/flodesk_spec.rb' - - 'spec/lib/services/mailing_list_spec.rb' - 'spec/mailers/feedback_request_mailer_spec.rb' - 'spec/models/ban_spec.rb' - 'spec/models/chapter_spec.rb' @@ -356,15 +312,9 @@ RSpec/ContextWording: - 'spec/models/workshop_invitation_spec.rb' - 'spec/models/workshop_spec.rb' - 'spec/models/workshop_sponsor_spec.rb' - - 'spec/presenters/contact_presenter_spec.rb' - - 'spec/presenters/invitation_presenter_spec.rb' - - 'spec/presenters/sponsor_presenter_spec.rb' - - 'spec/presenters/virtual_workshop_presenter_spec.rb' - 'spec/presenters/workshop_presenter_spec.rb' - 'spec/serializers/workshop_calendar_spec.rb' - 'spec/support/shared_examples/behaves_like_an_invitation_route.rb' - - 'spec/support/shared_examples/behaves_like_date_time_concerns.rb' - - 'spec/support/shared_examples/behaves_like_invitable.rb' - 'spec/support/shared_examples/behaves_like_managing_workshop_attendance.rb' # Offense count: 57 @@ -403,34 +353,6 @@ RSpec/ExampleLength: - 'spec/support/shared_examples/behaves_like_an_invitation_route.rb' - 'spec/support/shared_examples/behaves_like_sending_workshop_emails.rb' - - 'spec/controllers/admin/workshops_controller_spec.rb' - - 'spec/lib/tasks/mailing_list_rake_spec.rb' - - 'spec/models/event_spec.rb' - - 'spec/presenters/sponsor_presenter_spec.rb' - - 'spec/presenters/virtual_workshop_presenter_spec.rb' - - 'spec/support/shared_examples/behaves_like_managing_workshop_attendance.rb' - - - 'spec/features/accepting_invitation_spec.rb' - - 'spec/features/admin/manage_workshop_attendances_spec.rb' - - 'spec/models/feedback_spec.rb' - - 'spec/presenters/contact_presenter_spec.rb' - - - 'spec/controllers/admin/workshops_controller_spec.rb' - - 'spec/features/member/login_spec.rb' - - 'spec/models/feedback_spec.rb' - - - 'spec/features/admin/filtering_sponsors_list_spec.rb' - - 'spec/features/admin/sponsor_spec.rb' - - 'spec/features/coach_accepting_invitation_spec.rb' - - 'spec/features/internationalization_spec.rb' - - 'spec/features/viewing_a_meeting_spec.rb' - - 'spec/presenters/sponsor_presenter_spec.rb' - - 'spec/spec_helper.rb' - - - 'spec/models/feedback_request_spec.rb' - - 'spec/models/meeting_spec.rb' - - 'spec/models/tutorial_spec.rb' - # Offense count: 3 # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle. @@ -502,15 +424,6 @@ RSpec/MessageSpies: - 'spec/support/shared_examples/behaves_like_an_invitation.rb' - 'spec/support/shared_examples/behaves_like_sending_workshop_emails.rb' - - 'spec/features/admin/add_user_to_workshop_spec.rb' - - 'spec/features/admin/manage_workshop_attendances_spec.rb' - - 'spec/features/admin/members_spec.rb' - - 'spec/features/admin/sponsor_spec.rb' - - 'spec/features/member_feedback_spec.rb' - - 'spec/features/viewing_a_workshop_invitation_spec.rb' - - 'spec/features/viewing_pages_spec.rb' - - 'spec/spec_helper.rb' - # Offense count: 136 # Configuration parameters: Max. RSpec/MultipleExpectations: @@ -614,16 +527,6 @@ RSpec/NamedSubject: - 'spec/policies/testimonial_policy_spec.rb' - 'spec/policies/workshop_policy_spec.rb' - - 'spec/lib/tasks/mailing_list_rake_spec.rb' - - 'spec/models/ban_spec.rb' - - 'spec/models/event_spec.rb' - - 'spec/models/feedback_request_spec.rb' - - 'spec/models/feedback_spec.rb' - - 'spec/models/sponsor_spec.rb' - - 'spec/models/tutorial_spec.rb' - - 'spec/support/shared_examples/behaves_like_an_invitation_route.rb' - - 'spec/support/shared_examples/behaves_like_invitable.rb' - # Offense count: 4 RSpec/RepeatedExample: Exclude: @@ -661,8 +564,6 @@ RSpec/SubjectStub: - 'spec/models/workshop_invitation_spec.rb' - 'spec/models/workshop_spec.rb' - - 'spec/controllers/admin/member_search_controller_spec.rb' - # Offense count: 38 # Configuration parameters: IgnoreNameless, IgnoreSymbolicNames. RSpec/VerifiedDoubles: