Add coverage for misc "policy" classes (#37525)

This commit is contained in:
Matt Jankowski
2026-01-19 10:53:52 -05:00
committed by GitHub
parent 220115757d
commit ad77ee7f8b
5 changed files with 158 additions and 6 deletions

View File

@@ -3,20 +3,45 @@
require 'rails_helper'
RSpec.describe AnnouncementPolicy do
let(:policy) { described_class }
subject { described_class }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :index?, :create?, :update?, :destroy? do
context 'with an admin' do
it 'permits' do
expect(policy).to permit(admin, Announcement)
end
it { is_expected.to permit(admin, Announcement) }
end
context 'with a non-admin' do
it 'denies' do
expect(policy).to_not permit(john, Announcement)
it { is_expected.to_not permit(john, Announcement) }
end
end
permissions :distribute? do
let(:announcement) { Fabricate :announcement }
context 'with non admin role' do
it { is_expected.to_not permit(john, announcement) }
end
context 'with admin role' do
context 'with unpublished announcement' do
let(:announcement) { Fabricate :announcement, published: false, scheduled_at: 5.days.from_now }
it { is_expected.to_not permit(admin, announcement) }
end
context 'with published already sent announcement' do
let(:announcement) { Fabricate :announcement, notification_sent_at: 3.days.ago }
it { is_expected.to_not permit(admin, announcement) }
end
context 'with published not sent announcement' do
let(:announcement) { Fabricate :announcement }
it { is_expected.to permit(admin, announcement) }
end
end
end

View File

@@ -0,0 +1,42 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe InstanceModerationNotePolicy do
subject { described_class }
let(:admin) { Fabricate(:admin_user).account }
let(:account) { Fabricate(:account) }
permissions :create? do
context 'when admin' do
it { is_expected.to permit(admin, InstanceModerationNote.new) }
end
context 'when not admin' do
it { is_expected.to_not permit(account, InstanceModerationNote.new) }
end
end
permissions :destroy? do
context 'when owner of note' do
let(:note) { Fabricate :instance_moderation_note, account: account }
it { is_expected.to permit(account, note) }
end
context 'when not owner of note' do
context 'when admin and overrides' do
let(:note) { Fabricate :instance_moderation_note }
it { is_expected.to permit(admin, note) }
end
context 'when admin and does not override' do
let(:note) { Fabricate :instance_moderation_note, account: Fabricate(:admin_user).account }
it { is_expected.to_not permit(admin, note) }
end
end
end
end

View File

@@ -0,0 +1,36 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe MediaAttachmentPolicy do
subject { described_class }
let(:admin) { Fabricate(:admin_user).account }
let(:account) { Fabricate(:account) }
permissions :download? do
context 'when attachment is on private discarded status' do
let(:media_attachment) { Fabricate.build :media_attachment, status: Fabricate.build(:status, deleted_at: 5.days.ago, visibility: :private) }
context 'when admin' do
it { is_expected.to permit(admin, media_attachment) }
end
context 'when not admin' do
it { is_expected.to_not permit(account, media_attachment) }
end
end
context 'when attachment is on public status' do
let(:media_attachment) { Fabricate.build :media_attachment, status: Fabricate.build(:status, visibility: :public) }
context 'when admin' do
it { is_expected.to permit(admin, media_attachment) }
end
context 'when not admin' do
it { is_expected.to permit(account, media_attachment) }
end
end
end
end

View File

@@ -0,0 +1,29 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe QuotePolicy do
subject { described_class }
let(:account) { Fabricate(:account) }
permissions :revoke? do
context 'when quote matches the revoking account' do
let(:quote) { Fabricate.build :quote, quoted_account_id: account.id }
it { is_expected.to permit(account, quote) }
end
context 'when quote does not match the revoking account' do
let(:quote) { Fabricate.build :quote, quoted_account_id: Fabricate(:account).id }
it { is_expected.to_not permit(account, quote) }
end
context 'when quote does not have quoted account id' do
let(:quote) { Fabricate.build :quote }
it { is_expected.to_not permit(account, quote) }
end
end
end

View File

@@ -0,0 +1,20 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe UsernameBlockPolicy do
subject { described_class }
let(:admin) { Fabricate(:admin_user).account }
let(:account) { Fabricate(:account) }
permissions :index?, :create?, :update?, :destroy? do
context 'when admin' do
it { is_expected.to permit(admin, UsernameBlock.new) }
end
context 'when not admin' do
it { is_expected.to_not permit(account, UsernameBlock.new) }
end
end
end