# frozen_string_literal: true

require 'rails_helper'

RSpec.describe NotificationPolicy do
  describe '#summarize!' do
    subject { Fabricate(:notification_policy) }

    let(:sender) { Fabricate(:account) }
    let(:suspended_sender) { Fabricate(:account) }

    before do
      Fabricate.times(2, :notification, account: subject.account, activity: Fabricate(:status, account: sender), filtered: true, type: :mention)
      Fabricate(:notification_request, account: subject.account, from_account: sender)

      Fabricate(:notification, account: subject.account, activity: Fabricate(:status, account: suspended_sender), filtered: true, type: :mention)
      Fabricate(:notification_request, account: subject.account, from_account: suspended_sender)

      suspended_sender.suspend!

      subject.summarize!
    end

    it 'sets pending_requests_count and pending_notifications_count' do
      expect(subject).to have_attributes(
        pending_requests_count: 1,
        pending_notifications_count: 2
      )
    end
  end

  describe 'for_bots attribute' do
    subject { Fabricate(:notification_policy) }

    it 'defaults to accept' do
      expect(subject.for_bots).to eq 'accept'
    end

    it 'can be set to filter' do
      subject.update!(for_bots: 'filter')
      expect(subject.reload.for_bots).to eq 'filter'
    end

    it 'can be set to drop' do
      subject.update!(for_bots: 'drop')
      expect(subject.reload.for_bots).to eq 'drop'
    end

    it 'can be set to accept' do
      subject.update!(for_bots: 'accept')
      expect(subject.reload.for_bots).to eq 'accept'
    end

    it 'validates input' do
      expect do
        subject.update!(for_bots: 'block')
      end.to raise_error(ArgumentError, "'block' is not a valid for_bots")
    end
  end
end
