You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.3 KiB
96 lines
2.3 KiB
# frozen_string_literal: true |
|
|
|
require 'rails_helper' |
|
|
|
RSpec.describe Web::PushSubscription, type: :model do |
|
subject { described_class.new(data: data) } |
|
|
|
let(:account) { Fabricate(:account) } |
|
|
|
let(:policy) { 'all' } |
|
|
|
let(:data) do |
|
{ |
|
policy: policy, |
|
|
|
alerts: { |
|
mention: true, |
|
reblog: false, |
|
follow: true, |
|
follow_request: false, |
|
favourite: true, |
|
}, |
|
} |
|
end |
|
|
|
describe '#pushable?' do |
|
let(:notification_type) { :mention } |
|
let(:notification) { Fabricate(:notification, account: account, type: notification_type) } |
|
|
|
%i(mention reblog follow follow_request favourite).each do |type| |
|
context "when notification is a #{type}" do |
|
let(:notification_type) { type } |
|
|
|
it 'returns boolean corresponding to alert setting' do |
|
expect(subject.pushable?(notification)).to eq data[:alerts][type] |
|
end |
|
end |
|
end |
|
|
|
context 'when policy is all' do |
|
let(:policy) { 'all' } |
|
|
|
it 'returns true' do |
|
expect(subject.pushable?(notification)).to be true |
|
end |
|
end |
|
|
|
context 'when policy is none' do |
|
let(:policy) { 'none' } |
|
|
|
it 'returns false' do |
|
expect(subject.pushable?(notification)).to be false |
|
end |
|
end |
|
|
|
context 'when policy is followed' do |
|
let(:policy) { 'followed' } |
|
|
|
context 'when notification is from someone you follow' do |
|
before do |
|
account.follow!(notification.from_account) |
|
end |
|
|
|
it 'returns true' do |
|
expect(subject.pushable?(notification)).to be true |
|
end |
|
end |
|
|
|
context 'when notification is not from someone you follow' do |
|
it 'returns false' do |
|
expect(subject.pushable?(notification)).to be false |
|
end |
|
end |
|
end |
|
|
|
context 'when policy is follower' do |
|
let(:policy) { 'follower' } |
|
|
|
context 'when notification is from someone who follows you' do |
|
before do |
|
notification.from_account.follow!(account) |
|
end |
|
|
|
it 'returns true' do |
|
expect(subject.pushable?(notification)).to be true |
|
end |
|
end |
|
|
|
context 'when notification is not from someone who follows you' do |
|
it 'returns false' do |
|
expect(subject.pushable?(notification)).to be false |
|
end |
|
end |
|
end |
|
end |
|
end
|
|
|