From 250a1453614ad6977390778a0f0e47f03bb205bc Mon Sep 17 00:00:00 2001 From: Bianca Nenciu Date: Thu, 21 Nov 2024 20:23:20 +0200 Subject: [PATCH] DEV: Fix undefined variable (#29876) Follow up to commit 429cf656e78ae1858c29a446cccd386542ae2867. --- app/jobs/regular/push_notification.rb | 4 +- spec/jobs/push_notification_spec.rb | 66 +++++++++++++++++++++++---- 2 files changed, 58 insertions(+), 12 deletions(-) diff --git a/app/jobs/regular/push_notification.rb b/app/jobs/regular/push_notification.rb index 2494927cfb3..029a3154356 100644 --- a/app/jobs/regular/push_notification.rb +++ b/app/jobs/regular/push_notification.rb @@ -31,7 +31,7 @@ module Jobs uri = URI.parse(push_url) http = FinalDestination::HTTP.new(uri.host, uri.port) - http.use_ssl = true + http.use_ssl = uri.scheme == "https" request = FinalDestination::HTTP::Post.new( @@ -45,7 +45,7 @@ module Jobs if response.code.to_i != 200 Rails.logger.warn( - "Failed to push a notification to #{push_url} Status: #{result.status}: #{result.status_line}", + "Failed to push a notification to #{push_url} Status: #{response.code}: #{response.body}", ) end rescue => e diff --git a/spec/jobs/push_notification_spec.rb b/spec/jobs/push_notification_spec.rb index a1f1648c8b6..badb4133e26 100644 --- a/spec/jobs/push_notification_spec.rb +++ b/spec/jobs/push_notification_spec.rb @@ -4,6 +4,7 @@ require "excon" RSpec.describe Jobs::PushNotification do fab!(:user) + fab!(:user2) { Fabricate(:user) } fab!(:post) let(:data) do { @@ -16,20 +17,31 @@ RSpec.describe Jobs::PushNotification do "clients" => [[user.id, "http://test.localhost"]], } end + let(:data_with_two_clients) do + { + "user_id" => user.id, + "payload" => { + "notification_type" => 1, + "post_url" => "/t/#{post.topic_id}/#{post.post_number}", + "excerpt" => "Hello you", + }, + "clients" => [[user2.id, "https://test2.localhost"], [user.id, "http://test.localhost"]], + } + end let!(:request) do - stub_request(:post, "https://test.localhost:80/").with( + stub_request(:post, "http://test.localhost").with( body: { - "secret_key" => SiteSetting.push_api_secret_key, - "url" => "http://test.localhost", - "title" => "Discourse", - "description" => "", - "notifications" => [ + secret_key: SiteSetting.push_api_secret_key, + url: "http://test.localhost", + title: "Discourse", + description: "", + notifications: [ { - "notification_type" => 1, - "excerpt" => "Hello you", - "url" => "http://test.localhost/t/#{post.topic_id}/#{post.post_number}", - "client_id" => user.id, + notification_type: 1, + excerpt: "Hello you", + url: "http://test.localhost/t/#{post.topic_id}/#{post.post_number}", + client_id: user.id, }, ], }.to_json, @@ -39,6 +51,28 @@ RSpec.describe Jobs::PushNotification do ).to_return(status: 200, body: "", headers: {}) end + let!(:bad_request) do + stub_request(:post, "https://test2.localhost/").with( + body: { + secret_key: SiteSetting.push_api_secret_key, + url: "http://test.localhost", + title: "Discourse", + description: "", + notifications: [ + { + notification_type: 1, + excerpt: "Hello you", + url: "http://test.localhost/t/#{post.topic_id}/#{post.post_number}", + client_id: user2.id, + }, + ], + }.to_json, + headers: { + "Content-Type" => "application/json", + }, + ).to_return(status: 404, body: "", headers: {}) + end + before { SiteSetting.push_notification_time_window_mins = 5 } context "with valid user" do @@ -68,4 +102,16 @@ RSpec.describe Jobs::PushNotification do expect(request).not_to have_been_requested end end + + context "with two clients" do + it "sends push notifications to both clients" do + user.update!(last_seen_at: 10.minutes.ago) + user2.update!(last_seen_at: 10.minutes.ago) + + Jobs::PushNotification.new.execute(data_with_two_clients) + + expect(request).to have_been_requested + expect(bad_request).to have_been_requested + end + end end