From 4965f459bdb0667217989e3de5153771f7fe59c3 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 23 Jan 2023 10:03:08 +0100 Subject: [PATCH 1/2] Add missing `policy` attribute to `WebPushSubscriptionSerializer` Fixes #23145 --- app/serializers/rest/web_push_subscription_serializer.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/serializers/rest/web_push_subscription_serializer.rb b/app/serializers/rest/web_push_subscription_serializer.rb index 194cc0a8c7e40..674a2d5a86ec0 100644 --- a/app/serializers/rest/web_push_subscription_serializer.rb +++ b/app/serializers/rest/web_push_subscription_serializer.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class REST::WebPushSubscriptionSerializer < ActiveModel::Serializer - attributes :id, :endpoint, :alerts, :server_key + attributes :id, :endpoint, :alerts, :server_key, :policy def alerts (object.data&.dig('alerts') || {}).each_with_object({}) { |(k, v), h| h[k] = ActiveModel::Type::Boolean.new.cast(v) } @@ -10,4 +10,8 @@ def alerts def server_key Rails.configuration.x.vapid_public_key end + + def policy + object.data&.dig('policy') || 'all' + end end From febff2c98aa3d7954e7043ded049763f1f035f72 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 23 Jan 2023 10:12:42 +0100 Subject: [PATCH 2/2] Add tests --- .../api/v1/push/subscriptions_controller_spec.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/spec/controllers/api/v1/push/subscriptions_controller_spec.rb b/spec/controllers/api/v1/push/subscriptions_controller_spec.rb index 534d028790b9e..9487251e16b42 100644 --- a/spec/controllers/api/v1/push/subscriptions_controller_spec.rb +++ b/spec/controllers/api/v1/push/subscriptions_controller_spec.rb @@ -61,6 +61,10 @@ post :create, params: create_payload expect(Web::PushSubscription.where(endpoint: create_payload[:subscription][:endpoint]).count).to eq 1 end + + it 'returns the expected JSON' do + expect(body_as_json.with_indifferent_access).to include({ endpoint: create_payload[:subscription][:endpoint], alerts: {}, policy: 'all' }) + end end describe 'PUT #update' do @@ -78,6 +82,10 @@ expect(push_subscription.data['alerts'][type]).to eq(alerts_payload[:data][:alerts][type.to_sym].to_s) end end + + it 'returns the expected JSON' do + expect(body_as_json.with_indifferent_access).to include({ endpoint: create_payload[:subscription][:endpoint], alerts: alerts_payload[:data][:alerts], policy: alerts_payload[:data][:policy] }) + end end describe 'DELETE #destroy' do