44 lines
881 B
Ruby
44 lines
881 B
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
describe ColorValidator do
|
|
using RSpec::Parameterized::TableSyntax
|
|
|
|
subject do
|
|
Class.new do
|
|
include ActiveModel::Model
|
|
include ActiveModel::Validations
|
|
attr_accessor :color
|
|
validates :color, color: true
|
|
end.new
|
|
end
|
|
|
|
where(:color, :is_valid) do
|
|
'#000abc' | true
|
|
'#aaa' | true
|
|
'#BBB' | true
|
|
'#cCc' | true
|
|
'#ffff' | false
|
|
'#000111222' | false
|
|
'invalid' | false
|
|
'000' | false
|
|
end
|
|
|
|
with_them do
|
|
it 'only accepts valid colors' do
|
|
subject.color = color
|
|
|
|
expect(subject.valid?).to eq(is_valid)
|
|
end
|
|
end
|
|
|
|
it 'fails fast for long invalid string' do
|
|
subject.color = '#' + ('0' * 50_000) + 'xxx'
|
|
|
|
expect do
|
|
Timeout.timeout(5.seconds) { subject.valid? }
|
|
end.not_to raise_error
|
|
end
|
|
end
|