Add missing policy attribute to WebPushSubscriptionSerializer (#23210)
				
					
				
			* Add missing `policy` attribute to `WebPushSubscriptionSerializer` Fixes #23145 * Add tests
This commit is contained in:
		
							parent
							
								
									930de8db1f
								
							
						
					
					
						commit
						1e9d799c0a
					
				
					 2 changed files with 13 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue