Skip to content
This repository was archived by the owner on May 21, 2025. It is now read-only.

Commit 6f8f067

Browse files
Add unit tests for disposable_mx_server?
1 parent eddb09d commit 6f8f067

File tree

1 file changed

+43
-2
lines changed

1 file changed

+43
-2
lines changed

spec/address_spec.rb

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,14 +111,55 @@
111111
let(:email_instance) { described_class.new(email_address, dns_instance) }
112112
let(:ttl) { 1_000 }
113113
let(:mock_resolv_dns) { instance_double(Resolv::DNS) }
114-
let(:mock_mx_records) { [double("MX", exchange: "mx.ymail.com", preference: 10, ttl: ttl)] }
114+
let(:mock_mx_records) { [double("MX", exchange: "mx.ymail.com", preference: 10, ttl:)] }
115115

116116
before do
117117
allow(email_instance).to receive(:null_mx?).and_return(false)
118118
allow(Resolv::DNS).to receive(:open).and_yield(mock_resolv_dns)
119119
allow(mock_resolv_dns).to receive(:timeouts=)
120120
end
121121

122+
describe "#disposable_mx_server?" do
123+
let(:disposable_email_address) { "[email protected]" }
124+
let(:disposable_mx_server) { ValidEmail2.disposable_emails.select { |domain| domain.count(".") == 1 }.sample }
125+
let(:disposable_email_instance) { described_class.new(disposable_email_address, dns_instance) }
126+
let(:mock_disposable_mx_records) { [double("MX", exchange: "mx.#{disposable_mx_server}", preference: 10, ttl:)] }
127+
128+
before do
129+
allow(mock_resolv_dns).to receive(:getresources)
130+
.with(disposable_email_instance.address.domain, Resolv::DNS::Resource::IN::MX)
131+
.and_return(mock_disposable_mx_records)
132+
133+
allow(mock_resolv_dns).to receive(:getresources)
134+
.with(email_instance.address.domain, Resolv::DNS::Resource::IN::MX)
135+
.and_return(mock_mx_records)
136+
end
137+
138+
it "is false if the MX server is not in the disposable_emails list" do
139+
expect(email_instance).not_to be_disposable_mx_server
140+
end
141+
142+
it "is true if the MX server is in the disposable_emails list" do
143+
expect(disposable_email_instance).to be_disposable_mx_server
144+
end
145+
146+
it "is false and then true when the MX record changes from non-disposable to disposable" do
147+
allow(mock_resolv_dns).to receive(:getresources)
148+
.with(disposable_email_instance.address.domain, Resolv::DNS::Resource::IN::MX)
149+
.and_return(mock_mx_records) # non-disposable MX records
150+
151+
expect(disposable_email_instance).not_to be_disposable_mx_server
152+
153+
ValidEmail2::Dns.clear_cache
154+
155+
allow(mock_resolv_dns).to receive(:getresources)
156+
.with(disposable_email_instance.address.domain, Resolv::DNS::Resource::IN::MX)
157+
.and_return(mock_disposable_mx_records) # disposable MX records
158+
159+
expect(disposable_email_instance).to be_disposable_mx_server
160+
end
161+
end
162+
122163
describe "#valid_strict_mx?" do
123164
let(:cached_at) { Time.now }
124165
let(:mock_cache_data) { { [email_instance.address.domain, Resolv::DNS::Resource::IN::MX] => ValidEmail2::Dns::CacheEntry.new(mock_mx_records, cached_at, ttl) } }
@@ -251,7 +292,7 @@
251292
describe "#valid_mx?" do
252293
let(:cached_at) { Time.now }
253294
let(:mock_cache_data) { { [email_instance.address.domain, Resolv::DNS::Resource::IN::MX] => ValidEmail2::Dns::CacheEntry.new(mock_a_records, cached_at, ttl) } }
254-
let(:mock_a_records) { [double("A", address: "192.168.1.1", ttl: ttl)] }
295+
let(:mock_a_records) { [double("A", address: "192.168.1.1", ttl:)] }
255296

256297
before do
257298
allow(email_instance).to receive(:mx_servers).and_return(mock_mx_records)

0 commit comments

Comments
 (0)