mirror of
https://github.com/glitch-soc/mastodon.git
synced 2026-03-29 03:00:33 +02:00
Add coverage for misc "policy" classes (#37525)
This commit is contained in:
@@ -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
|
||||
|
||||
42
spec/policies/instance_moderation_note_policy_spec.rb
Normal file
42
spec/policies/instance_moderation_note_policy_spec.rb
Normal 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
|
||||
36
spec/policies/media_attachment_policy_spec.rb
Normal file
36
spec/policies/media_attachment_policy_spec.rb
Normal 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
|
||||
29
spec/policies/quote_policy_spec.rb
Normal file
29
spec/policies/quote_policy_spec.rb
Normal 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
|
||||
20
spec/policies/username_block_policy_spec.rb
Normal file
20
spec/policies/username_block_policy_spec.rb
Normal 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
|
||||
Reference in New Issue
Block a user