Found via `codespell -q 3 -S ./CHANGELOG.md,./AUTHORS.md,./config/locales,./app/javascript/mastodon/locales -L ba,keypair,medias,ro`
		
			
				
	
	
		
			95 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
require 'rails_helper'
 | 
						|
 | 
						|
RSpec.describe Web::PushSubscription, type: :model do
 | 
						|
  let(:account) { Fabricate(:account) }
 | 
						|
 | 
						|
  let(:policy) { 'all' }
 | 
						|
 | 
						|
  let(:data) do
 | 
						|
    {
 | 
						|
      policy: policy,
 | 
						|
 | 
						|
      alerts: {
 | 
						|
        mention: true,
 | 
						|
        reblog: false,
 | 
						|
        follow: true,
 | 
						|
        follow_request: false,
 | 
						|
        favourite: true,
 | 
						|
      },
 | 
						|
    }
 | 
						|
  end
 | 
						|
 | 
						|
  subject { described_class.new(data: data) }
 | 
						|
 | 
						|
  describe '#pushable?' do
 | 
						|
    let(:notification_type) { :mention }
 | 
						|
    let(:notification) { Fabricate(:notification, account: account, type: notification_type) }
 | 
						|
 | 
						|
    %i(mention reblog follow follow_request favourite).each do |type|
 | 
						|
      context "when notification is a #{type}" do
 | 
						|
        let(:notification_type) { type }
 | 
						|
 | 
						|
        it "returns boolean corresponding to alert setting" do
 | 
						|
          expect(subject.pushable?(notification)).to eq data[:alerts][type]
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    context 'when policy is all' do
 | 
						|
      let(:policy) { 'all' }
 | 
						|
 | 
						|
      it 'returns true' do
 | 
						|
        expect(subject.pushable?(notification)).to eq true
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    context 'when policy is none' do
 | 
						|
      let(:policy) { 'none' }
 | 
						|
 | 
						|
      it 'returns false' do
 | 
						|
        expect(subject.pushable?(notification)).to eq false
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    context 'when policy is followed' do
 | 
						|
      let(:policy) { 'followed' }
 | 
						|
 | 
						|
      context 'and notification is from someone you follow' do
 | 
						|
        before do
 | 
						|
          account.follow!(notification.from_account)
 | 
						|
        end
 | 
						|
 | 
						|
        it 'returns true' do
 | 
						|
          expect(subject.pushable?(notification)).to eq true
 | 
						|
        end
 | 
						|
      end
 | 
						|
 | 
						|
      context 'and notification is not from someone you follow' do
 | 
						|
        it 'returns false' do
 | 
						|
          expect(subject.pushable?(notification)).to eq false
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    context 'when policy is follower' do
 | 
						|
      let(:policy) { 'follower' }
 | 
						|
 | 
						|
      context 'and notification is from someone who follows you' do
 | 
						|
        before do
 | 
						|
          notification.from_account.follow!(account)
 | 
						|
        end
 | 
						|
 | 
						|
        it 'returns true' do
 | 
						|
          expect(subject.pushable?(notification)).to eq true
 | 
						|
        end
 | 
						|
      end
 | 
						|
 | 
						|
      context 'and notification is not from someone who follows you' do
 | 
						|
        it 'returns false' do
 | 
						|
          expect(subject.pushable?(notification)).to eq false
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |