From b044134fa7fe6ba629e88482302eccc98b4daadc Mon Sep 17 00:00:00 2001 From: Morgan Roderick Date: Thu, 6 Aug 2026 18:16:52 +0200 Subject: [PATCH] fix: only show signup flash to newly created members The details page flashed "Thanks for signing up" to every incomplete member, including returning accounts sent there to finish their profile. Track whether the member was actually created during the OAuth callback (session[:new_member]) and gate the flash on it, so returning members land on the details page with no misleading signup message. --- app/controllers/auth_services_controller.rb | 3 +++ app/controllers/member/details_controller.rb | 4 +++- .../member/details_controller_spec.rb | 22 +++++++++++++++++++ spec/requests/auth_services_callback_spec.rb | 16 ++++++++++++++ 4 files changed, 44 insertions(+), 1 deletion(-) diff --git a/app/controllers/auth_services_controller.rb b/app/controllers/auth_services_controller.rb index 83af48b35..84c004356 100644 --- a/app/controllers/auth_services_controller.rb +++ b/app/controllers/auth_services_controller.rb @@ -35,6 +35,7 @@ def create member = Member.find_by(email:) member ||= Member.new(email:) + new_member = member.new_record? member.name ||= omnihash[:info][:name]&.split(' ')&.first || '' member.surname ||= omnihash[:info][:name]&.split(' ')&.drop(1)&.join(' ') || '' @@ -55,6 +56,7 @@ def create member_service = AuthService.find_by!(provider: omnihash[:provider], uid: omnihash[:uid]) member = member_service.member + new_member = false end session[:member_id] = member.id @@ -63,6 +65,7 @@ def create session[:oauth_token_secret] = omnihash[:credentials][:secret] if member.requires_additional_details? + session[:new_member] = new_member redirect_to edit_member_details_path(member_type:) else redirect_to referer_or_dashboard_path diff --git a/app/controllers/member/details_controller.rb b/app/controllers/member/details_controller.rb index 14cc0c711..6800f420e 100644 --- a/app/controllers/member/details_controller.rb +++ b/app/controllers/member/details_controller.rb @@ -8,7 +8,9 @@ class Member::DetailsController < ApplicationController def edit accept_terms - flash[notice] = I18n.t('notifications.signing_up') + if session.delete(:new_member) + flash[notice] = I18n.t('notifications.signing_up') + end @member.newsletter ||= true end diff --git a/spec/controllers/member/details_controller_spec.rb b/spec/controllers/member/details_controller_spec.rb index d0db8a953..6e4bbf1f8 100644 --- a/spec/controllers/member/details_controller_spec.rb +++ b/spec/controllers/member/details_controller_spec.rb @@ -9,6 +9,28 @@ allow(mailing_list).to receive_messages(subscribe: true, unsubscribe: true) end + describe 'GET #edit' do + context 'when a brand-new member' do + it 'shows the signing up message' do + session[:new_member] = true + + get :edit + + expect(response.body).to include(I18n.t('notifications.signing_up')) + end + end + + context 'when an existing member' do + it 'does not show the signing up message' do + session[:new_member] = false + + get :edit + + expect(response.body).not_to include(I18n.t('notifications.signing_up')) + end + end + end + describe 'PATCH #update' do context 'with valid params' do it 'updates how_you_found_us with radio option' do diff --git a/spec/requests/auth_services_callback_spec.rb b/spec/requests/auth_services_callback_spec.rb index 1110989b6..71c256ef0 100644 --- a/spec/requests/auth_services_callback_spec.rb +++ b/spec/requests/auth_services_callback_spec.rb @@ -57,5 +57,21 @@ post '/auth/github/callback' expect(response).to redirect_to(edit_member_details_path) + expect(session[:new_member]).to be(true) + end + + it 'does not mark an existing incomplete member as a new signup when they return to complete their profile' do + returning = Fabricate(:member, name: nil, surname: nil, about_you: nil, + email: 'returning@example.com') + returning.auth_services.delete_all + svc = Fabricate(:auth_service, member: returning, + provider: 'github', uid: 'returning-github-uid') + mock_auth_hash(provider: 'github', uid: svc.uid, + email: 'returning@example.com', name: nil) + + post '/auth/github/callback' + + expect(response).to redirect_to(edit_member_details_path) + expect(session[:new_member]).to be_nil end end