Add missing `policy` attribute to `WebPushSubscriptionSerializer` (#23210)

* Add missing `policy` attribute to `WebPushSubscriptionSerializer`

Fixes #23145

* Add tests
This commit is contained in:
Claire 2023-01-23 13:05:30 +01:00 committed by GitHub
parent 9b795a25cd
commit 448be26b34
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 1 deletions

View File

@ -1,7 +1,7 @@
# frozen_string_literal: true # frozen_string_literal: true
class REST::WebPushSubscriptionSerializer < ActiveModel::Serializer class REST::WebPushSubscriptionSerializer < ActiveModel::Serializer
attributes :id, :endpoint, :alerts, :server_key attributes :id, :endpoint, :alerts, :server_key, :policy
def alerts def alerts
(object.data&.dig('alerts') || {}).each_with_object({}) { |(k, v), h| h[k] = ActiveModel::Type::Boolean.new.cast(v) } (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 def server_key
Rails.configuration.x.vapid_public_key Rails.configuration.x.vapid_public_key
end end
def policy
object.data&.dig('policy') || 'all'
end
end end

View File

@ -61,6 +61,10 @@ describe Api::V1::Push::SubscriptionsController do
post :create, params: create_payload post :create, params: create_payload
expect(Web::PushSubscription.where(endpoint: create_payload[:subscription][:endpoint]).count).to eq 1 expect(Web::PushSubscription.where(endpoint: create_payload[:subscription][:endpoint]).count).to eq 1
end 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 end
describe 'PUT #update' do 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) expect(push_subscription.data['alerts'][type]).to eq(alerts_payload[:data][:alerts][type.to_sym].to_s)
end end
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 end
describe 'DELETE #destroy' do describe 'DELETE #destroy' do