-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathemail_confirmation_input_spec.rb
More file actions
86 lines (75 loc) · 3.34 KB
/
Copy pathemail_confirmation_input_spec.rb
File metadata and controls
86 lines (75 loc) · 3.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
require "rails_helper"
RSpec.describe EmailConfirmationInput, type: :model do
let(:email_confirmation_input) { build :email_confirmation_input }
let(:invalid_emails) do
["email@123.123.123.123",
"email@[123.123.123.123]",
"plainaddress",
"@no-local-part.com",
"Outlook Contact <outlook-contact@domain.com>",
"no-at.domain.com",
"no-tld@domain",
";beginning-semicolon@domain.co.uk",
"middle-semicolon@domain.co;uk",
"trailing-semicolon@domain.com;",
'"email+leading-quotes@domain.com',
'email+middle"-quotes@domain.com',
'"quoted-local-part"@domain.com',
'"quoted@domain.com"',
"lots-of-dots@domain..gov..uk",
"two-dots..in-local@domain.com",
"multiple@domains@domain.com",
"spaces in local@domain.com",
"spaces-in-domain@dom ain.com",
"underscores-in-domain@dom_ain.com",
"pipe-in-domain@example.com|gov.uk",
"comma,in-local@gov.uk",
"comma-in-domain@domain,gov.uk",
"pound-sign-in-local£@domain.com",
"local-with-’-apostrophe@domain.com",
"local-with-”-quotes@domain.com",
"domain-starts-with-a-dot@.domain.com",
"brackets(in)local@domain.com",
"email-too-long-#{'a' * 320}@example.com",
"incorrect-punycode@xn---something.com"]
end
context "when given an empty string or nil" do
it "returns invalid with blank email" do
expect(email_confirmation_input).not_to be_valid
expect(email_confirmation_input.errors[:send_confirmation]).to include(I18n.t("activemodel.errors.models.email_confirmation_input.attributes.send_confirmation.blank"))
end
end
context "when user opts in and provides a valid email address" do
let(:email_confirmation_input) { build :email_confirmation_input_opted_in }
it "validates" do
expect(email_confirmation_input).to be_valid
expect(email_confirmation_input.errors[:confirmation_email_address]).to be_empty
end
end
context "when user opts in and provides an invalid email address" do
it "does not allow invalid emails" do
invalid_emails.each do |invalid_email|
email_confirmation_input = build :email_confirmation_input_opted_in, confirmation_email_address: invalid_email
expect(email_confirmation_input).not_to be_valid
expect(email_confirmation_input.errors[:confirmation_email_address]).to include(I18n.t("activemodel.errors.models.email_confirmation_input.attributes.confirmation_email_address.invalid_email"))
end
end
it "removes leading and trailing whitespace" do
# "\u00a0" is non breaking space
email_confirmation_input = build :email_confirmation_input_opted_in, confirmation_email_address: " \u00a0email@domain.com "
expect(email_confirmation_input).to be_valid
expect(email_confirmation_input.confirmation_email_address).to eq "email@domain.com"
end
end
context "when send_confirmation is false" do
let(:email_confirmation_input) { build :email_confirmation_input, send_confirmation: "skip_confirmation" }
it "returns valid with blank email" do
expect(email_confirmation_input).to be_valid
expect(email_confirmation_input.errors[:confirmation_email_address]).to be_empty
end
it "returns valid with empty string" do
email_confirmation_input.confirmation_email_address = ""
expect(email_confirmation_input).to be_valid
end
end
end