From a743905126be61f4dd7a99ff87f5f7a8e11d9fb7 Mon Sep 17 00:00:00 2001 From: nicolas-entourage <75681929+nicolas-entourage@users.noreply.github.com> Date: Thu, 6 Mar 2025 11:04:35 +0100 Subject: [PATCH 1/3] EN-8090 fix: address is created after the user is created. We should then track address creation to notify on association creation --- app/models/user.rb | 7 +++++++ app/services/user_services/public_user_builder.rb | 1 - app/services/user_services/user_builder.rb | 9 --------- spec/rails_helper.rb | 1 + spec/spec_helper.rb | 1 + 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 8caa988c5..c54adc1c4 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -36,6 +36,7 @@ class User < ApplicationRecord before_save :slack_id_no_empty after_save :clean_up_passwords, if: :saved_change_to_encrypted_password? after_save :sync_newsletter, if: :saved_change_to_email? + after_save :signal_association has_many :followings, -> { where active: true } has_many :subscriptions, through: :followings, source: :partner @@ -405,7 +406,13 @@ def newsletter_subscription= newsletter_subscription email_preference = EmailPreference.find_by(user: self, email_category_id: category_id) || email_preferences.build(email_category_id: category_id) email_preference.subscribed = ActiveModel::Type::Boolean.new.cast(newsletter_subscription) + end + + def signal_association + return unless address.present? + return unless saved_change_to_address_id? || (saved_change_to_goal? && goal_association?) + SlackServices::SignalAssociationCreation.new(user: self).notify end def sync_newsletter diff --git a/app/services/user_services/public_user_builder.rb b/app/services/user_services/public_user_builder.rb index 01eb9ac68..4036772b8 100644 --- a/app/services/user_services/public_user_builder.rb +++ b/app/services/user_services/public_user_builder.rb @@ -44,7 +44,6 @@ def update(user:, platform: nil) if user.update(params) signal_blocked_user(user) - signal_association(user) callback.on_success.try(:call, user) else diff --git a/app/services/user_services/user_builder.rb b/app/services/user_services/user_builder.rb index 6b74852b7..28abb7403 100644 --- a/app/services/user_services/user_builder.rb +++ b/app/services/user_services/user_builder.rb @@ -26,8 +26,6 @@ def create(send_sms: false, sms_code: nil) UserServices::SMSSender.new(user: user).send_welcome_sms(sms_code) if send_sms MemberMailer.welcome(user).deliver_later if user.email.present? - signal_association(user) - callback.on_success.try(:call, user) else return callback.on_duplicate(user) if User.where(phone: params[:phone]).count>0 @@ -49,13 +47,6 @@ def signal_blocked_user user SlackServices::SignalUserCreation.new(user: user, blocked_user_ids: blocked_user_ids).notify end - def signal_association user - return unless user.saved_change_to_goal? - return unless user.goal_association? - - SlackServices::SignalAssociationCreation.new(user: user).notify - end - private attr_reader :params, :callback diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 4f081e5d4..a17b0c490 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -20,6 +20,7 @@ stub_request(:any, /.*api.mailjet.com.*/).to_return(status: 200, body: { id: 1 }.to_json, headers: {}) stub_request(:any, /.*api.openai.*/).to_return(status: 200, body: "{}", headers: {}) + stub_request(:any, "https://url.to.slack.com").to_return(status: 200) # deactivate slack_trace notifications SlackServices::StackTrace.any_instance.stub(:notify).and_return(nil) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 7d67b7720..509e89ac2 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -25,4 +25,5 @@ ENV['ENTOURAGE_SECRET'] = 'test_entourage_secret' ENV["SLACK_DEFAULT_INTERLOCUTOR"] = "laure" ENV["MODERATOR_PHONE"] = "+33768037348" +ENV["SLACK_SIGNAL"]='{"url":"https://url.to.slack.com","channel":"channel","channel-associations":"channel-associations"}' API_HOST = 'api.entourage.test' From 3b229aaf61b3b08522881b70b5ccca54fc38a872 Mon Sep 17 00:00:00 2001 From: nicolas-entourage <75681929+nicolas-entourage@users.noreply.github.com> Date: Thu, 6 Mar 2025 12:24:10 +0100 Subject: [PATCH 2/3] clean ENV declaration in rspecs --- .../api/v1/contributions_controller_spec.rb | 6 ------ .../api/v1/entourages/invitations_controller_spec.rb | 4 ---- spec/acceptance/api/v1/entourages_controller_spec.rb | 6 ------ .../neighborhoods/chat_messages_controller_spec.rb | 6 ------ .../api/v1/neighborhoods_controller_spec.rb | 6 ------ .../api/v1/outings/chat_messages_controller_spec.rb | 6 ------ .../api/v1/solicitations_controller_spec.rb | 6 ------ spec/acceptance/api/v1/users_controller_spec.rb | 12 ------------ .../api/v1/contributions_controller_spec.rb | 2 -- .../api/v1/conversations_controller_spec.rb | 4 ---- .../controllers/api/v1/entourages_controller_spec.rb | 3 --- .../neighborhoods/chat_messages_controller_spec.rb | 4 ---- .../api/v1/neighborhoods_controller_spec.rb | 4 ---- .../api/v1/outings/chat_messages_controller_spec.rb | 4 ---- spec/controllers/api/v1/outings_controller_spec.rb | 4 ---- .../api/v1/solicitations_controller_spec.rb | 2 -- spec/controllers/api/v1/users_controller_spec.rb | 4 ---- spec/spec_helper.rb | 6 ++++-- 18 files changed, 4 insertions(+), 85 deletions(-) diff --git a/spec/acceptance/api/v1/contributions_controller_spec.rb b/spec/acceptance/api/v1/contributions_controller_spec.rb index d4cf5aa98..d67eb4bea 100644 --- a/spec/acceptance/api/v1/contributions_controller_spec.rb +++ b/spec/acceptance/api/v1/contributions_controller_spec.rb @@ -159,12 +159,6 @@ } }.to_json } - - ENV['ADMIN_HOST'] = 'https://this.is.local' - ENV['SLACK_SIGNAL'] = '{"url":"https://url.to.slack.com","channel":"channel"}' - - before { stub_request(:post, "https://url.to.slack.com").to_return(status: 200) } - context '201' do example_request 'Report contribution' do expect(response_status).to eq(201) diff --git a/spec/acceptance/api/v1/entourages/invitations_controller_spec.rb b/spec/acceptance/api/v1/entourages/invitations_controller_spec.rb index 3b8d95b19..a75ae32c4 100644 --- a/spec/acceptance/api/v1/entourages/invitations_controller_spec.rb +++ b/spec/acceptance/api/v1/entourages/invitations_controller_spec.rb @@ -29,10 +29,6 @@ } }.to_json } - ENV['SLACK_WEBHOOK_URL'] = "https://url.to.slack.com" - - before { stub_request(:post, "https://url.to.slack.com").to_return(status: 200) } - context '201' do let!(:join_request) { FactoryBot.create(:join_request, joinable: entourage, user: user, status: :accepted) } diff --git a/spec/acceptance/api/v1/entourages_controller_spec.rb b/spec/acceptance/api/v1/entourages_controller_spec.rb index ab1aa06c5..7f1513fe6 100644 --- a/spec/acceptance/api/v1/entourages_controller_spec.rb +++ b/spec/acceptance/api/v1/entourages_controller_spec.rb @@ -399,12 +399,6 @@ } }.to_json } - - ENV['ADMIN_HOST'] = 'https://this.is.local' - ENV['SLACK_SIGNAL'] = '{"url":"https://url.to.slack.com","channel":"channel"}' - - before { stub_request(:post, "https://url.to.slack.com").to_return(status: 200) } - context '201' do example_request 'Report entourage' do expect(response_status).to eq(201) diff --git a/spec/acceptance/api/v1/neighborhoods/chat_messages_controller_spec.rb b/spec/acceptance/api/v1/neighborhoods/chat_messages_controller_spec.rb index 3ae809e81..a331c4104 100644 --- a/spec/acceptance/api/v1/neighborhoods/chat_messages_controller_spec.rb +++ b/spec/acceptance/api/v1/neighborhoods/chat_messages_controller_spec.rb @@ -140,12 +140,6 @@ } }.to_json } - - ENV['ADMIN_HOST'] = 'https://this.is.local' - ENV['SLACK_SIGNAL'] = '{"url":"https://url.to.slack.com","channel":"channel"}' - - before { stub_request(:post, "https://url.to.slack.com").to_return(status: 200) } - context '201' do example_request 'Report neighborhood' do expect(response_status).to eq(201) diff --git a/spec/acceptance/api/v1/neighborhoods_controller_spec.rb b/spec/acceptance/api/v1/neighborhoods_controller_spec.rb index b69065d24..75a815080 100644 --- a/spec/acceptance/api/v1/neighborhoods_controller_spec.rb +++ b/spec/acceptance/api/v1/neighborhoods_controller_spec.rb @@ -155,12 +155,6 @@ } }.to_json } - - ENV['ADMIN_HOST'] = 'https://this.is.local' - ENV['SLACK_SIGNAL'] = '{"url":"https://url.to.slack.com","channel":"channel"}' - - before { stub_request(:post, "https://url.to.slack.com").to_return(status: 200) } - context '201' do example_request 'Report neighborhood' do expect(response_status).to eq(201) diff --git a/spec/acceptance/api/v1/outings/chat_messages_controller_spec.rb b/spec/acceptance/api/v1/outings/chat_messages_controller_spec.rb index 5353a1fed..32a3c0c4b 100644 --- a/spec/acceptance/api/v1/outings/chat_messages_controller_spec.rb +++ b/spec/acceptance/api/v1/outings/chat_messages_controller_spec.rb @@ -170,12 +170,6 @@ } }.to_json } - - ENV['ADMIN_HOST'] = 'https://this.is.local' - ENV['SLACK_SIGNAL'] = '{"url":"https://url.to.slack.com","channel":"channel"}' - - before { stub_request(:post, "https://url.to.slack.com").to_return(status: 200) } - context '201' do example_request 'Report outing' do expect(response_status).to eq(201) diff --git a/spec/acceptance/api/v1/solicitations_controller_spec.rb b/spec/acceptance/api/v1/solicitations_controller_spec.rb index d6b46fa42..2bb1d05e6 100644 --- a/spec/acceptance/api/v1/solicitations_controller_spec.rb +++ b/spec/acceptance/api/v1/solicitations_controller_spec.rb @@ -159,12 +159,6 @@ } }.to_json } - - ENV['ADMIN_HOST'] = 'https://this.is.local' - ENV['SLACK_SIGNAL'] = '{"url":"https://url.to.slack.com","channel":"channel"}' - - before { stub_request(:post, "https://url.to.slack.com").to_return(status: 200) } - context '201' do example_request 'Report solicitation' do expect(response_status).to eq(201) diff --git a/spec/acceptance/api/v1/users_controller_spec.rb b/spec/acceptance/api/v1/users_controller_spec.rb index 9e2a690fe..8f2500bdb 100644 --- a/spec/acceptance/api/v1/users_controller_spec.rb +++ b/spec/acceptance/api/v1/users_controller_spec.rb @@ -5,18 +5,6 @@ explanation "Users" header "Content-Type", "application/json" - ENV['ADMIN_HOST'] = 'https://this.is.local' - ENV['SLACK_SIGNAL'] = '{"url":"https://url.to.slack.com","channel":"channel"}' - - before(:each) { - ENV['SLACK_WEBHOOK_URL'] = 'https://url.to.slack.com' - stub_request(:post, "https://url.to.slack.com").to_return(status: 200) - } - - after(:each) { - ENV['SLACK_WEBHOOK_URL'] = nil - } - post '/api/v1/login' do route_summary "Login" # route_description "no description" diff --git a/spec/controllers/api/v1/contributions_controller_spec.rb b/spec/controllers/api/v1/contributions_controller_spec.rb index fcc9c2061..fcef0968f 100644 --- a/spec/controllers/api/v1/contributions_controller_spec.rb +++ b/spec/controllers/api/v1/contributions_controller_spec.rb @@ -458,8 +458,6 @@ ENV['SLACK_SIGNAL_NEIGHBORHOOD_WEBHOOK'] = '{"url":"https://url.to.slack.com","channel":"channel","username":"signal-contribution"}' - before { stub_request(:post, "https://url.to.slack.com").to_return(status: 200) } - context "valid params" do before { expect_any_instance_of(SlackServices::SignalContribution).to receive(:notify) diff --git a/spec/controllers/api/v1/conversations_controller_spec.rb b/spec/controllers/api/v1/conversations_controller_spec.rb index 4b107d318..a3ff79a96 100644 --- a/spec/controllers/api/v1/conversations_controller_spec.rb +++ b/spec/controllers/api/v1/conversations_controller_spec.rb @@ -464,10 +464,6 @@ let!(:join_request) { FactoryBot.create(:join_request, joinable: conversation, user: user, status: :accepted) } - ENV['SLACK_SIGNAL'] = '{"url":"https://url.to.slack.com","channel":"channel"}' - - before { stub_request(:post, "https://url.to.slack.com").to_return(status: 200) } - context "valid params" do before { expect_any_instance_of(SlackServices::SignalConversation).to receive(:notify) diff --git a/spec/controllers/api/v1/entourages_controller_spec.rb b/spec/controllers/api/v1/entourages_controller_spec.rb index f9155117e..6546146dc 100644 --- a/spec/controllers/api/v1/entourages_controller_spec.rb +++ b/spec/controllers/api/v1/entourages_controller_spec.rb @@ -965,9 +965,6 @@ ENV['SLACK_SIGNAL_GROUP_WEBHOOK'] = '{"url":"https://url.to.slack.com","channel":"channel"}' - before { stub_request(:post, "https://url.to.slack.com").to_return(status: 200) } - - context "valid params" do before { expect_any_instance_of(SlackServices::SignalGroup).to receive(:notify) diff --git a/spec/controllers/api/v1/neighborhoods/chat_messages_controller_spec.rb b/spec/controllers/api/v1/neighborhoods/chat_messages_controller_spec.rb index d93fe1c54..e7abb91e1 100644 --- a/spec/controllers/api/v1/neighborhoods/chat_messages_controller_spec.rb +++ b/spec/controllers/api/v1/neighborhoods/chat_messages_controller_spec.rb @@ -470,10 +470,6 @@ let(:chat_message) { create :chat_message, messageable: neighborhood } let!(:join_request) { FactoryBot.create(:join_request, joinable: neighborhood, user: user, status: "accepted") } - ENV['SLACK_SIGNAL'] = '{"url":"https://url.to.slack.com","channel":"channel"}' - - before { stub_request(:post, "https://url.to.slack.com").to_return(status: 200) } - context "correct messageable" do before { expect_any_instance_of(SlackServices::SignalNeighborhoodChatMessage).to receive(:notify) diff --git a/spec/controllers/api/v1/neighborhoods_controller_spec.rb b/spec/controllers/api/v1/neighborhoods_controller_spec.rb index 010152805..bc149b000 100644 --- a/spec/controllers/api/v1/neighborhoods_controller_spec.rb +++ b/spec/controllers/api/v1/neighborhoods_controller_spec.rb @@ -755,10 +755,6 @@ describe 'POST #report' do let(:neighborhood) { create :neighborhood } - ENV['SLACK_SIGNAL'] = '{"url":"https://url.to.slack.com","channel":"channel"}' - - before { stub_request(:post, "https://url.to.slack.com").to_return(status: 200) } - context "valid params" do before { expect_any_instance_of(SlackServices::SignalNeighborhood).to receive(:notify) diff --git a/spec/controllers/api/v1/outings/chat_messages_controller_spec.rb b/spec/controllers/api/v1/outings/chat_messages_controller_spec.rb index c64d31c81..0778a6bcc 100644 --- a/spec/controllers/api/v1/outings/chat_messages_controller_spec.rb +++ b/spec/controllers/api/v1/outings/chat_messages_controller_spec.rb @@ -493,10 +493,6 @@ let(:chat_message) { create :chat_message, messageable: outing } let!(:join_request) { FactoryBot.create(:join_request, joinable: outing, user: user, status: "accepted") } - ENV['SLACK_SIGNAL'] = '{"url":"https://url.to.slack.com","channel":"channel"}' - - before { stub_request(:post, "https://url.to.slack.com").to_return(status: 200) } - context "correct messageable" do before { expect_any_instance_of(SlackServices::SignalOutingChatMessage).to receive(:notify) diff --git a/spec/controllers/api/v1/outings_controller_spec.rb b/spec/controllers/api/v1/outings_controller_spec.rb index 60ee7b4f4..70036d89a 100644 --- a/spec/controllers/api/v1/outings_controller_spec.rb +++ b/spec/controllers/api/v1/outings_controller_spec.rb @@ -864,10 +864,6 @@ describe 'POST #report' do let(:outing) { create :outing } - ENV['SLACK_SIGNAL'] = '{"url":"https://url.to.slack.com","channel":"channel"}' - - before { stub_request(:post, "https://url.to.slack.com").to_return(status: 200) } - context "valid params" do before { expect_any_instance_of(SlackServices::SignalOuting).to receive(:notify) diff --git a/spec/controllers/api/v1/solicitations_controller_spec.rb b/spec/controllers/api/v1/solicitations_controller_spec.rb index a9428b31b..5c0f22c82 100644 --- a/spec/controllers/api/v1/solicitations_controller_spec.rb +++ b/spec/controllers/api/v1/solicitations_controller_spec.rb @@ -459,8 +459,6 @@ ENV['SLACK_SIGNAL_NEIGHBORHOOD_WEBHOOK'] = '{"url":"https://url.to.slack.com","channel":"channel","username":"signal-solicitation"}' - before { stub_request(:post, "https://url.to.slack.com").to_return(status: 200) } - context "valid params" do before { expect_any_instance_of(SlackServices::SignalSolicitation).to receive(:notify) diff --git a/spec/controllers/api/v1/users_controller_spec.rb b/spec/controllers/api/v1/users_controller_spec.rb index 076e03795..a7e1bbc9b 100644 --- a/spec/controllers/api/v1/users_controller_spec.rb +++ b/spec/controllers/api/v1/users_controller_spec.rb @@ -1110,10 +1110,6 @@ def event let(:reported_user) { create :public_user } let(:result) { JSON.parse(response.body) } - ENV['SLACK_SIGNAL'] = '{"url":"https://url.to.slack.com","channel":"channel"}' - - before { stub_request(:post, "https://url.to.slack.com").to_return(status: 200) } - context "valid params" do before { expect_any_instance_of(SlackServices::SignalUser).to receive(:notify) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 509e89ac2..1b3309571 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -21,9 +21,11 @@ end end -ENV["DISABLE_CRYPT"]="TRUE" +ENV['ADMIN_HOST'] = 'https://this.is.local' +ENV["DISABLE_CRYPT"] = "TRUE" ENV['ENTOURAGE_SECRET'] = 'test_entourage_secret' ENV["SLACK_DEFAULT_INTERLOCUTOR"] = "laure" ENV["MODERATOR_PHONE"] = "+33768037348" -ENV["SLACK_SIGNAL"]='{"url":"https://url.to.slack.com","channel":"channel","channel-associations":"channel-associations"}' +ENV['SLACK_WEBHOOK_URL'] = "https://url.to.slack.com" +ENV["SLACK_SIGNAL"] = '{"url":"https://url.to.slack.com","channel":"channel","channel-associations":"channel-associations"}' API_HOST = 'api.entourage.test' From 088fa25bb8ba03d1ebc83b9ccd5271f87463de1e Mon Sep 17 00:00:00 2001 From: nicolas-entourage <75681929+nicolas-entourage@users.noreply.github.com> Date: Thu, 6 Mar 2025 15:42:25 +0100 Subject: [PATCH 3/3] EN-8090 fix: only slack mention on association --- app/models/user.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/models/user.rb b/app/models/user.rb index c54adc1c4..598ab913c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -410,7 +410,8 @@ def newsletter_subscription= newsletter_subscription def signal_association return unless address.present? - return unless saved_change_to_address_id? || (saved_change_to_goal? && goal_association?) + return unless saved_change_to_address_id? || saved_change_to_goal? + return unless goal_association? SlackServices::SignalAssociationCreation.new(user: self).notify end