Skip to content
Snippets Groups Projects
Commit 14d86eb0 authored by Renato "Lond" Cerqueira's avatar Renato "Lond" Cerqueira Committed by Eugen Rochko
Browse files

Allow more than the max pins if account is not local (#7105)

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.
parent 50529cbc
No related branches found
No related tags found
No related merge requests found
...@@ -5,6 +5,6 @@ class StatusPinValidator < ActiveModel::Validator ...@@ -5,6 +5,6 @@ class StatusPinValidator < ActiveModel::Validator
pin.errors.add(:base, I18n.t('statuses.pin_errors.reblog')) if pin.status.reblog? pin.errors.add(:base, I18n.t('statuses.pin_errors.reblog')) if pin.status.reblog?
pin.errors.add(:base, I18n.t('statuses.pin_errors.ownership')) if pin.account_id != pin.status.account_id pin.errors.add(:base, I18n.t('statuses.pin_errors.ownership')) if pin.account_id != pin.status.account_id
pin.errors.add(:base, I18n.t('statuses.pin_errors.private')) unless %w(public unlisted).include?(pin.status.visibility) pin.errors.add(:base, I18n.t('statuses.pin_errors.private')) unless %w(public unlisted).include?(pin.status.visibility)
pin.errors.add(:base, I18n.t('statuses.pin_errors.limit')) if pin.account.status_pins.count > 4 pin.errors.add(:base, I18n.t('statuses.pin_errors.limit')) if pin.account.status_pins.count > 4 && pin.account.local?
end end
end end
...@@ -37,5 +37,36 @@ RSpec.describe StatusPin, type: :model do ...@@ -37,5 +37,36 @@ RSpec.describe StatusPin, type: :model do
expect(StatusPin.new(account: account, status: status).save).to be false expect(StatusPin.new(account: account, status: status).save).to be false
end 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
end end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment