Skip to content

Commit ad77ee7

Browse files
authored
Add coverage for misc "policy" classes (mastodon#37525)
1 parent 2201157 commit ad77ee7

5 files changed

Lines changed: 158 additions & 6 deletions

spec/policies/announcement_policy_spec.rb

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,45 @@
33
require 'rails_helper'
44

55
RSpec.describe AnnouncementPolicy do
6-
let(:policy) { described_class }
6+
subject { described_class }
7+
78
let(:admin) { Fabricate(:admin_user).account }
89
let(:john) { Fabricate(:account) }
910

1011
permissions :index?, :create?, :update?, :destroy? do
1112
context 'with an admin' do
12-
it 'permits' do
13-
expect(policy).to permit(admin, Announcement)
14-
end
13+
it { is_expected.to permit(admin, Announcement) }
1514
end
1615

1716
context 'with a non-admin' do
18-
it 'denies' do
19-
expect(policy).to_not permit(john, Announcement)
17+
it { is_expected.to_not permit(john, Announcement) }
18+
end
19+
end
20+
21+
permissions :distribute? do
22+
let(:announcement) { Fabricate :announcement }
23+
24+
context 'with non admin role' do
25+
it { is_expected.to_not permit(john, announcement) }
26+
end
27+
28+
context 'with admin role' do
29+
context 'with unpublished announcement' do
30+
let(:announcement) { Fabricate :announcement, published: false, scheduled_at: 5.days.from_now }
31+
32+
it { is_expected.to_not permit(admin, announcement) }
33+
end
34+
35+
context 'with published already sent announcement' do
36+
let(:announcement) { Fabricate :announcement, notification_sent_at: 3.days.ago }
37+
38+
it { is_expected.to_not permit(admin, announcement) }
39+
end
40+
41+
context 'with published not sent announcement' do
42+
let(:announcement) { Fabricate :announcement }
43+
44+
it { is_expected.to permit(admin, announcement) }
2045
end
2146
end
2247
end
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# frozen_string_literal: true
2+
3+
require 'rails_helper'
4+
5+
RSpec.describe InstanceModerationNotePolicy do
6+
subject { described_class }
7+
8+
let(:admin) { Fabricate(:admin_user).account }
9+
let(:account) { Fabricate(:account) }
10+
11+
permissions :create? do
12+
context 'when admin' do
13+
it { is_expected.to permit(admin, InstanceModerationNote.new) }
14+
end
15+
16+
context 'when not admin' do
17+
it { is_expected.to_not permit(account, InstanceModerationNote.new) }
18+
end
19+
end
20+
21+
permissions :destroy? do
22+
context 'when owner of note' do
23+
let(:note) { Fabricate :instance_moderation_note, account: account }
24+
25+
it { is_expected.to permit(account, note) }
26+
end
27+
28+
context 'when not owner of note' do
29+
context 'when admin and overrides' do
30+
let(:note) { Fabricate :instance_moderation_note }
31+
32+
it { is_expected.to permit(admin, note) }
33+
end
34+
35+
context 'when admin and does not override' do
36+
let(:note) { Fabricate :instance_moderation_note, account: Fabricate(:admin_user).account }
37+
38+
it { is_expected.to_not permit(admin, note) }
39+
end
40+
end
41+
end
42+
end
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# frozen_string_literal: true
2+
3+
require 'rails_helper'
4+
5+
RSpec.describe MediaAttachmentPolicy do
6+
subject { described_class }
7+
8+
let(:admin) { Fabricate(:admin_user).account }
9+
let(:account) { Fabricate(:account) }
10+
11+
permissions :download? do
12+
context 'when attachment is on private discarded status' do
13+
let(:media_attachment) { Fabricate.build :media_attachment, status: Fabricate.build(:status, deleted_at: 5.days.ago, visibility: :private) }
14+
15+
context 'when admin' do
16+
it { is_expected.to permit(admin, media_attachment) }
17+
end
18+
19+
context 'when not admin' do
20+
it { is_expected.to_not permit(account, media_attachment) }
21+
end
22+
end
23+
24+
context 'when attachment is on public status' do
25+
let(:media_attachment) { Fabricate.build :media_attachment, status: Fabricate.build(:status, visibility: :public) }
26+
27+
context 'when admin' do
28+
it { is_expected.to permit(admin, media_attachment) }
29+
end
30+
31+
context 'when not admin' do
32+
it { is_expected.to permit(account, media_attachment) }
33+
end
34+
end
35+
end
36+
end

spec/policies/quote_policy_spec.rb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# frozen_string_literal: true
2+
3+
require 'rails_helper'
4+
5+
RSpec.describe QuotePolicy do
6+
subject { described_class }
7+
8+
let(:account) { Fabricate(:account) }
9+
10+
permissions :revoke? do
11+
context 'when quote matches the revoking account' do
12+
let(:quote) { Fabricate.build :quote, quoted_account_id: account.id }
13+
14+
it { is_expected.to permit(account, quote) }
15+
end
16+
17+
context 'when quote does not match the revoking account' do
18+
let(:quote) { Fabricate.build :quote, quoted_account_id: Fabricate(:account).id }
19+
20+
it { is_expected.to_not permit(account, quote) }
21+
end
22+
23+
context 'when quote does not have quoted account id' do
24+
let(:quote) { Fabricate.build :quote }
25+
26+
it { is_expected.to_not permit(account, quote) }
27+
end
28+
end
29+
end
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# frozen_string_literal: true
2+
3+
require 'rails_helper'
4+
5+
RSpec.describe UsernameBlockPolicy do
6+
subject { described_class }
7+
8+
let(:admin) { Fabricate(:admin_user).account }
9+
let(:account) { Fabricate(:account) }
10+
11+
permissions :index?, :create?, :update?, :destroy? do
12+
context 'when admin' do
13+
it { is_expected.to permit(admin, UsernameBlock.new) }
14+
end
15+
16+
context 'when not admin' do
17+
it { is_expected.to_not permit(account, UsernameBlock.new) }
18+
end
19+
end
20+
end

0 commit comments

Comments
 (0)