Add missing policy
attribute to WebPushSubscriptionSerializer
(#23210)
* Add missing `policy` attribute to `WebPushSubscriptionSerializer` Fixes #23145 * Add tests
This commit is contained in:
parent
9b795a25cd
commit
448be26b34
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue