45 lines
1.3 KiB
Ruby
45 lines
1.3 KiB
Ruby
|
# Specifications for behavior common to all objects with an email attribute.
|
||
|
# Takes a list of email-format attributes and requires:
|
||
|
# - subject { "the object with a attribute= setter" }
|
||
|
# Note: You have access to `email_value` which is the email address value
|
||
|
# being currently tested).
|
||
|
|
||
|
shared_examples 'an object with email-formated attributes' do |*attributes|
|
||
|
attributes.each do |attribute|
|
||
|
describe "specifically its :#{attribute} attribute" do
|
||
|
%w[
|
||
|
info@example.com
|
||
|
info+test@example.com
|
||
|
o'reilly@example.com
|
||
|
mailto:test@example.com
|
||
|
lol!'+=?><#$%^&*()@gmail.com
|
||
|
].each do |valid_email|
|
||
|
context "with a value of '#{valid_email}'" do
|
||
|
let(:email_value) { valid_email }
|
||
|
|
||
|
it 'is valid' do
|
||
|
subject.send("#{attribute}=", valid_email)
|
||
|
|
||
|
expect(subject).to be_valid
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
%w[
|
||
|
foobar
|
||
|
test@test@example.com
|
||
|
].each do |invalid_email|
|
||
|
context "with a value of '#{invalid_email}'" do
|
||
|
let(:email_value) { invalid_email }
|
||
|
|
||
|
it 'is invalid' do
|
||
|
subject.send("#{attribute}=", invalid_email)
|
||
|
|
||
|
expect(subject).to be_invalid
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|