From 448be26b34c965fcae65eb4c5227b35d97120537 Mon Sep 17 00:00:00 2001
From: Claire <claire.github-309c@sitedethib.com>
Date: Mon, 23 Jan 2023 13:05:30 +0100
Subject: [PATCH] Add missing `policy` attribute to
 `WebPushSubscriptionSerializer` (#23210)

* Add missing `policy` attribute to `WebPushSubscriptionSerializer`

Fixes #23145

* Add tests
---
 app/serializers/rest/web_push_subscription_serializer.rb  | 6 +++++-
 .../api/v1/push/subscriptions_controller_spec.rb          | 8 ++++++++
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/app/serializers/rest/web_push_subscription_serializer.rb b/app/serializers/rest/web_push_subscription_serializer.rb
index 194cc0a8c7..674a2d5a86 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 @@ class REST::WebPushSubscriptionSerializer < ActiveModel::Serializer
   def server_key
     Rails.configuration.x.vapid_public_key
   end
+
+  def policy
+    object.data&.dig('policy') || 'all'
+  end
 end
diff --git a/spec/controllers/api/v1/push/subscriptions_controller_spec.rb b/spec/controllers/api/v1/push/subscriptions_controller_spec.rb
index 534d028790..9487251e16 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 @@ describe Api::V1::Push::SubscriptionsController do
       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 @@ describe Api::V1::Push::SubscriptionsController do
         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
-- 
GitLab