Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Status length validation spec updates #30132

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
35 changes: 24 additions & 11 deletions spec/validators/status_length_validator_spec.rb
Expand Up @@ -4,6 +4,8 @@

describe StatusLengthValidator 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
status = instance_double(Status, local?: false)
allow(status).to receive(:errors)
Expand All @@ -22,58 +24,58 @@
expect(status).to_not have_received(:errors)
end

it 'adds an error when content warning is over 500 characters' do
status = instance_double(Status, spoiler_text: 'a' * 520, text: '', errors: activemodel_errors, local?: true, reblog?: false)
it 'adds an error when content warning is over character limit' do
status = status_double(spoiler_text: 'a' * 520)
subject.validate(status)
expect(status.errors).to have_received(:add)
end

it 'adds an error when text is over 500 characters' do
status = instance_double(Status, spoiler_text: '', text: 'a' * 520, errors: activemodel_errors, local?: true, reblog?: false)
it 'adds an error when text is over character limit' do
status = status_double(text: 'a' * 520)
subject.validate(status)
expect(status.errors).to have_received(:add)
end

it 'adds an error when text and content warning are over 500 characters total' do
status = instance_double(Status, spoiler_text: 'a' * 250, text: 'b' * 251, errors: activemodel_errors, local?: true, reblog?: false)
it 'adds an error when text and content warning are over character limit total' do
status = status_double(spoiler_text: 'a' * 250, text: 'b' * 251)
subject.validate(status)
expect(status.errors).to have_received(:add)
end

it 'counts URLs as 23 characters flat' do
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)
expect(status.errors).to_not have_received(:add)
end

it 'does not count non-autolinkable URLs as 23 characters flat' do
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)
expect(status.errors).to have_received(:add)
end

it 'does not count overly long URLs as 23 characters flat' do
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)
expect(status.errors).to have_received(:add)
end

it 'counts only the front part of remote usernames' do
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)
expect(status.errors).to_not have_received(:add)
end

it 'does count both parts of remote usernames for overly long domains' do
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)
expect(status.errors).to have_received(:add)
Expand All @@ -82,6 +84,17 @@

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
instance_double(ActiveModel::Errors, add: nil)
end
Expand Down