1
- from unittest import mock
2
1
import dns .resolver
3
2
import pytest
4
3
from email_validator import EmailSyntaxError , EmailUndeliverableError , \
@@ -292,10 +291,6 @@ def test_dict_accessor():
292
291
assert valid_email .as_dict ()["original_email" ] == input_email
293
292
294
293
295
- def test_deliverability_no_records ():
296
- assert validate_email_deliverability ('example.com' , 'example.com' ) == {'mx' : [(0 , '' )], 'mx-fallback' : None }
297
-
298
-
299
294
def test_deliverability_found ():
300
295
response = validate_email_deliverability ('gmail.com' , 'gmail.com' )
301
296
assert response .keys () == {'mx' , 'mx-fallback' }
@@ -307,10 +302,16 @@ def test_deliverability_found():
307
302
308
303
309
304
def test_deliverability_fails ():
305
+ # No MX record.
310
306
domain = 'xkxufoekjvjfjeodlfmdfjcu.com'
311
307
with pytest .raises (EmailUndeliverableError , match = 'The domain name {} does not exist' .format (domain )):
312
308
validate_email_deliverability (domain , domain )
313
309
310
+ # Null MX record.
311
+ domain = 'example.com'
312
+ with pytest .raises (EmailUndeliverableError , match = 'The domain name {} does not accept email' .format (domain )):
313
+ validate_email_deliverability (domain , domain )
314
+
314
315
315
316
def test_deliverability_dns_timeout ():
316
317
validate_email_deliverability .TEST_CHECK_TIMEOUT = True
@@ -379,25 +380,34 @@ def test_main_output_shim(monkeypatch, capsys):
379
380
assert stdout == "b'An email address cannot have a period immediately after the @-sign.'\n "
380
381
381
382
382
- @mock .patch ("dns.resolver.LRUCache.put" )
383
- def test_validate_email__with_caching_resolver (mocked_put ):
384
- dns_resolver = caching_resolver ()
385
- validate_email (
"[email protected] " ,
dns_resolver = dns_resolver )
386
- assert mocked_put .called
383
+ def test_validate_email__with_caching_resolver ():
384
+ # unittest.mock.patch("dns.resolver.LRUCache.get") doesn't
385
+ # work --- it causes get to always return an empty list.
386
+ # So we'll mock our own way.
387
+ class MockedCache :
388
+ get_called = False
389
+ put_called = False
387
390
388
- with mock . patch ( "dns.resolver.LRUCache.get" ) as mocked_get :
389
- validate_email ( "[email protected] " , dns_resolver = dns_resolver )
390
- assert mocked_get . called
391
+ def get ( self , key ) :
392
+ self . get_called = True
393
+ return None
391
394
395
+ def put (self , key , value ):
396
+ self .put_called = True
392
397
393
- @mock .patch ("dns.resolver.LRUCache.put" )
394
- def test_validate_email__with_configured_resolver (mocked_put ):
398
+ # Test with caching_resolver helper method.
399
+ mocked_cache = MockedCache ()
400
+ dns_resolver = caching_resolver (cache = mocked_cache )
401
+ validate_email (
"[email protected] " ,
dns_resolver = dns_resolver )
402
+ assert mocked_cache .put_called
403
+ validate_email (
"[email protected] " ,
dns_resolver = dns_resolver )
404
+ assert mocked_cache .get_called
405
+
406
+ # Test with dns.resolver.Resolver instance.
395
407
dns_resolver = dns .resolver .Resolver ()
396
408
dns_resolver .lifetime = 10
397
- dns_resolver .cache = dns . resolver . LRUCache ( max_size = 1000 )
409
+ dns_resolver .cache = MockedCache ( )
398
410
validate_email (
"[email protected] " ,
dns_resolver = dns_resolver )
399
- assert mocked_put .called
400
-
401
- with mock .patch ("dns.resolver.LRUCache.get" ) as mocked_get :
402
- validate_email (
"[email protected] " ,
dns_resolver = dns_resolver )
403
- assert mocked_get .called
411
+ assert mocked_cache .put_called
412
+ validate_email (
"[email protected] " ,
dns_resolver = dns_resolver )
413
+ assert mocked_cache .get_called
0 commit comments