forked from asonix/mastodon
Sidekiq sometimes throws errors for users that have more pinned items than the allowed by the local instance. It should only validate the number of pins for local accounts.
72 lines
2.2 KiB
Ruby
72 lines
2.2 KiB
Ruby
require 'rails_helper'
|
|
|
|
RSpec.describe StatusPin, type: :model do
|
|
describe 'validations' do
|
|
it 'allows pins of own statuses' do
|
|
account = Fabricate(:account)
|
|
status = Fabricate(:status, account: account)
|
|
|
|
expect(StatusPin.new(account: account, status: status).save).to be true
|
|
end
|
|
|
|
it 'does not allow pins of statuses by someone else' do
|
|
account = Fabricate(:account)
|
|
status = Fabricate(:status)
|
|
|
|
expect(StatusPin.new(account: account, status: status).save).to be false
|
|
end
|
|
|
|
it 'does not allow pins of reblogs' do
|
|
account = Fabricate(:account)
|
|
status = Fabricate(:status, account: account)
|
|
reblog = Fabricate(:status, reblog: status)
|
|
|
|
expect(StatusPin.new(account: account, status: reblog).save).to be false
|
|
end
|
|
|
|
it 'does not allow pins of private statuses' do
|
|
account = Fabricate(:account)
|
|
status = Fabricate(:status, account: account, visibility: :private)
|
|
|
|
expect(StatusPin.new(account: account, status: status).save).to be false
|
|
end
|
|
|
|
it 'does not allow pins of direct statuses' do
|
|
account = Fabricate(:account)
|
|
status = Fabricate(:status, account: account, visibility: :direct)
|
|
|
|
expect(StatusPin.new(account: account, status: status).save).to be false
|
|
end
|
|
|
|
max_pins = 5
|
|
it 'does not allow pins above the max' do
|
|
account = Fabricate(:account)
|
|
status = []
|
|
|
|
(max_pins + 1).times do |i|
|
|
status[i] = Fabricate(:status, account: account)
|
|
end
|
|
|
|
max_pins.times do |i|
|
|
expect(StatusPin.new(account: account, status: status[i]).save).to be true
|
|
end
|
|
|
|
expect(StatusPin.new(account: account, status: status[max_pins]).save).to be false
|
|
end
|
|
|
|
it 'allows pins above the max for remote accounts' do
|
|
account = Fabricate(:account, domain: 'remote', username: 'bob', url: 'https://remote/')
|
|
status = []
|
|
|
|
(max_pins + 1).times do |i|
|
|
status[i] = Fabricate(:status, account: account)
|
|
end
|
|
|
|
max_pins.times do |i|
|
|
expect(StatusPin.new(account: account, status: status[i]).save).to be true
|
|
end
|
|
|
|
expect(StatusPin.new(account: account, status: status[max_pins]).save).to be true
|
|
end
|
|
end
|
|
end
|