Skip to content

Commit

Permalink
Allow more than the max pins if account is not local (#7105)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
renatolond authored and Gargron committed Apr 12, 2018
1 parent 50529cb commit 14d86eb
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 1 deletion.
2 changes: 1 addition & 1 deletion app/validators/status_pin_validator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ def validate(pin)
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.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
31 changes: 31 additions & 0 deletions spec/models/status_pin_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -37,5 +37,36 @@

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

0 comments on commit 14d86eb

Please sign in to comment.