Status length validation spec updates (#30132)

This commit is contained in:
Matt Jankowski 2024-05-02 04:31:06 -04:00 committed by GitHub
parent d97d31cce6
commit 2447497a4c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 24 additions and 11 deletions

View File

@ -4,6 +4,8 @@ require 'rails_helper'
describe StatusLengthValidator do describe StatusLengthValidator do
describe '#validate' do describe '#validate' do
before { stub_const("#{described_class}::MAX_CHARS", 500) } # Example values below are relative to this baseline
it 'does not add errors onto remote statuses' do it 'does not add errors onto remote statuses' do
status = instance_double(Status, local?: false) status = instance_double(Status, local?: false)
allow(status).to receive(:errors) allow(status).to receive(:errors)
@ -22,27 +24,27 @@ describe StatusLengthValidator do
expect(status).to_not have_received(:errors) expect(status).to_not have_received(:errors)
end end
it 'adds an error when content warning is over 500 characters' do it 'adds an error when content warning is over character limit' do
status = instance_double(Status, spoiler_text: 'a' * 520, text: '', errors: activemodel_errors, local?: true, reblog?: false) status = status_double(spoiler_text: 'a' * 520)
subject.validate(status) subject.validate(status)
expect(status.errors).to have_received(:add) expect(status.errors).to have_received(:add)
end end
it 'adds an error when text is over 500 characters' do it 'adds an error when text is over character limit' do
status = instance_double(Status, spoiler_text: '', text: 'a' * 520, errors: activemodel_errors, local?: true, reblog?: false) status = status_double(text: 'a' * 520)
subject.validate(status) subject.validate(status)
expect(status.errors).to have_received(:add) expect(status.errors).to have_received(:add)
end end
it 'adds an error when text and content warning are over 500 characters total' do it 'adds an error when text and content warning are over character limit total' do
status = instance_double(Status, spoiler_text: 'a' * 250, text: 'b' * 251, errors: activemodel_errors, local?: true, reblog?: false) status = status_double(spoiler_text: 'a' * 250, text: 'b' * 251)
subject.validate(status) subject.validate(status)
expect(status.errors).to have_received(:add) expect(status.errors).to have_received(:add)
end end
it 'counts URLs as 23 characters flat' do it 'counts URLs as 23 characters flat' do
text = ('a' * 476) + " http://#{'b' * 30}.com/example" text = ('a' * 476) + " http://#{'b' * 30}.com/example"
status = instance_double(Status, spoiler_text: '', text: text, errors: activemodel_errors, local?: true, reblog?: false) status = status_double(text: text)
subject.validate(status) subject.validate(status)
expect(status.errors).to_not have_received(:add) expect(status.errors).to_not have_received(:add)
@ -50,7 +52,7 @@ describe StatusLengthValidator do
it 'does not count non-autolinkable URLs as 23 characters flat' do it 'does not count non-autolinkable URLs as 23 characters flat' do
text = ('a' * 476) + "http://#{'b' * 30}.com/example" text = ('a' * 476) + "http://#{'b' * 30}.com/example"
status = instance_double(Status, spoiler_text: '', text: text, errors: activemodel_errors, local?: true, reblog?: false) status = status_double(text: text)
subject.validate(status) subject.validate(status)
expect(status.errors).to have_received(:add) expect(status.errors).to have_received(:add)
@ -58,14 +60,14 @@ describe StatusLengthValidator do
it 'does not count overly long URLs as 23 characters flat' do it 'does not count overly long URLs as 23 characters flat' do
text = "http://example.com/valid?#{'#foo?' * 1000}" text = "http://example.com/valid?#{'#foo?' * 1000}"
status = instance_double(Status, spoiler_text: '', text: text, errors: activemodel_errors, local?: true, reblog?: false) status = status_double(text: text)
subject.validate(status) subject.validate(status)
expect(status.errors).to have_received(:add) expect(status.errors).to have_received(:add)
end end
it 'counts only the front part of remote usernames' do it 'counts only the front part of remote usernames' do
text = ('a' * 475) + " @alice@#{'b' * 30}.com" text = ('a' * 475) + " @alice@#{'b' * 30}.com"
status = instance_double(Status, spoiler_text: '', text: text, errors: activemodel_errors, local?: true, reblog?: false) status = status_double(text: text)
subject.validate(status) subject.validate(status)
expect(status.errors).to_not have_received(:add) expect(status.errors).to_not have_received(:add)
@ -73,7 +75,7 @@ describe StatusLengthValidator do
it 'does count both parts of remote usernames for overly long domains' do it 'does count both parts of remote usernames for overly long domains' do
text = "@alice@#{'b' * 500}.com" text = "@alice@#{'b' * 500}.com"
status = instance_double(Status, spoiler_text: '', text: text, errors: activemodel_errors, local?: true, reblog?: false) status = status_double(text: text)
subject.validate(status) subject.validate(status)
expect(status.errors).to have_received(:add) expect(status.errors).to have_received(:add)
@ -82,6 +84,17 @@ describe StatusLengthValidator do
private private
def status_double(spoiler_text: '', text: '')
instance_double(
Status,
spoiler_text: spoiler_text,
text: text,
errors: activemodel_errors,
local?: true,
reblog?: false
)
end
def activemodel_errors def activemodel_errors
instance_double(ActiveModel::Errors, add: nil) instance_double(ActiveModel::Errors, add: nil)
end end