diff --git a/spec/policies/announcement_policy_spec.rb b/spec/policies/announcement_policy_spec.rb index 2fec34f8e4..a78b016a61 100644 --- a/spec/policies/announcement_policy_spec.rb +++ b/spec/policies/announcement_policy_spec.rb @@ -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 diff --git a/spec/policies/instance_moderation_note_policy_spec.rb b/spec/policies/instance_moderation_note_policy_spec.rb new file mode 100644 index 0000000000..66b4e7f937 --- /dev/null +++ b/spec/policies/instance_moderation_note_policy_spec.rb @@ -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 diff --git a/spec/policies/media_attachment_policy_spec.rb b/spec/policies/media_attachment_policy_spec.rb new file mode 100644 index 0000000000..d194cd819c --- /dev/null +++ b/spec/policies/media_attachment_policy_spec.rb @@ -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 diff --git a/spec/policies/quote_policy_spec.rb b/spec/policies/quote_policy_spec.rb new file mode 100644 index 0000000000..71708a9b71 --- /dev/null +++ b/spec/policies/quote_policy_spec.rb @@ -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 diff --git a/spec/policies/username_block_policy_spec.rb b/spec/policies/username_block_policy_spec.rb new file mode 100644 index 0000000000..5092f71274 --- /dev/null +++ b/spec/policies/username_block_policy_spec.rb @@ -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