Browse Source

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.
master
Renato "Lond" Cerqueira 6 years ago
committed by Eugen Rochko
parent
commit
14d86eb0d0
2 changed files with 32 additions and 1 deletions
  1. +1
    -1
      app/validators/status_pin_validator.rb
  2. +31
    -0
      spec/models/status_pin_spec.rb

+ 1
- 1
app/validators/status_pin_validator.rb View File

@@ -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.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
- 0
spec/models/status_pin_spec.rb View File

@@ -37,5 +37,36 @@ RSpec.describe StatusPin, type: :model do

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

Loading…
Cancel
Save