From 7caafc8ea79d0575ebc7ca8c6ff2f7304645a511 Mon Sep 17 00:00:00 2001 From: Fernando Valverde Date: Mon, 29 Nov 2021 22:35:40 -0600 Subject: [PATCH] Fix Rpush app when creating Android notification (#15529) * Fix Rpush app when creating Android notification * Include Android devices in Service spec * Apply suggestions from code review Co-authored-by: Michael Kohl Co-authored-by: Michael Kohl --- app/models/device.rb | 5 +++- spec/services/push_notifications/send_spec.rb | 23 +++++++++++-------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/app/models/device.rb b/app/models/device.rb index 68207c8a2..9fdc16bde 100644 --- a/app/models/device.rb +++ b/app/models/device.rb @@ -52,7 +52,10 @@ class Device < ApplicationRecord def android_notification(title, body, payload) n = Rpush::Gcm::Notification.new - n.app = ConsumerApp.rpush_app(app_bundle: app_bundle, platform: platform) + n.app = ConsumerApps::RpushAppQuery.call( + app_bundle: consumer_app.app_bundle, + platform: platform, + ) n.registration_ids = [token] n.priority = "high" n.content_available = true diff --git a/spec/services/push_notifications/send_spec.rb b/spec/services/push_notifications/send_spec.rb index 0ed16f3a9..f46b8825c 100644 --- a/spec/services/push_notifications/send_spec.rb +++ b/spec/services/push_notifications/send_spec.rb @@ -22,6 +22,7 @@ RSpec.describe PushNotifications::Send, type: :service do before do allow(ApplicationConfig).to receive(:[]).with("RPUSH_IOS_PEM").and_return("dGVzdGluZw==") + allow(ApplicationConfig).to receive(:[]).with("RPUSH_FCM_KEY").and_return("dGVzdGluZw==") allow(ApplicationConfig).to receive(:[]).and_return("stub") end @@ -59,31 +60,33 @@ RSpec.describe PushNotifications::Send, type: :service do end context "with devices for multiple users" do - let(:consumer_app) { create(:consumer_app) } + let(:consumer_app_ios) { create(:consumer_app, platform: Device::IOS) } + let(:consumer_app_android) { create(:consumer_app, platform: Device::ANDROID) } before do - create(:device, user: user, consumer_app: consumer_app) - create(:device, user: user2, consumer_app: consumer_app) + create(:device, user: user, consumer_app: consumer_app_ios) + create(:device, user: user2, consumer_app: consumer_app_ios) + create(:device, user: user2, consumer_app: consumer_app_android, platform: Device::ANDROID) end it "creates a notification and enqueues it" do - mocked_objects = mock_rpush(consumer_app) + mocked_objects = mock_rpush(consumer_app_ios) - described_class.call(**many_targets_params) + described_class.call(**params) - expect(mocked_objects[:rpush_notification]).to have_received(:save!).exactly(2).times + expect(mocked_objects[:rpush_notification]).to have_received(:save!).once sidekiq_assert_enqueued_jobs(1, only: PushNotifications::DeliverWorker) end it "creates a single notification for each of the user's devices when they have multiple" do - create(:device, user: user) - - mocked_objects = mock_rpush(consumer_app) + ios_mocked_objects = mock_rpush(consumer_app_ios) + android_mocked_objects = mock_rpush(consumer_app_android) described_class.call(**many_targets_params) - expect(mocked_objects[:rpush_notification]).to have_received(:save!).exactly(3).times + expect(ios_mocked_objects[:rpush_notification]).to have_received(:save!).twice + expect(android_mocked_objects[:rpush_notification]).to have_received(:save!).once sidekiq_assert_enqueued_jobs(1, only: PushNotifications::DeliverWorker) end