1- from unittest import mock
21import dns .resolver
32import pytest
43from email_validator import EmailSyntaxError , EmailUndeliverableError , \
@@ -292,10 +291,6 @@ def test_dict_accessor():
292291 assert valid_email .as_dict ()["original_email" ] == input_email
293292
294293
295- def test_deliverability_no_records ():
296- assert validate_email_deliverability ('example.com' , 'example.com' ) == {'mx' : [(0 , '' )], 'mx-fallback' : None }
297-
298-
299294def test_deliverability_found ():
300295 response = validate_email_deliverability ('gmail.com' , 'gmail.com' )
301296 assert response .keys () == {'mx' , 'mx-fallback' }
@@ -307,10 +302,16 @@ def test_deliverability_found():
307302
308303
309304def test_deliverability_fails ():
305+ # No MX record.
310306 domain = 'xkxufoekjvjfjeodlfmdfjcu.com'
311307 with pytest .raises (EmailUndeliverableError , match = 'The domain name {} does not exist' .format (domain )):
312308 validate_email_deliverability (domain , domain )
313309
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+
314315
315316def test_deliverability_dns_timeout ():
316317 validate_email_deliverability .TEST_CHECK_TIMEOUT = True
@@ -379,25 +380,34 @@ def test_main_output_shim(monkeypatch, capsys):
379380 assert stdout == "b'An email address cannot have a period immediately after the @-sign.'\n "
380381
381382
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 ("test@gmail.com" , 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
387390
388- with mock . patch ( "dns.resolver.LRUCache.get" ) as mocked_get :
389- validate_email ( "test@gmail.com" , dns_resolver = dns_resolver )
390- assert mocked_get . called
391+ def get ( self , key ) :
392+ self . get_called = True
393+ return None
391394
395+ def put (self , key , value ):
396+ self .put_called = True
392397
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 ("test@gmail.com" , dns_resolver = dns_resolver )
402+ assert mocked_cache .put_called
403+ validate_email ("test@gmail.com" , dns_resolver = dns_resolver )
404+ assert mocked_cache .get_called
405+
406+ # Test with dns.resolver.Resolver instance.
395407 dns_resolver = dns .resolver .Resolver ()
396408 dns_resolver .lifetime = 10
397- dns_resolver .cache = dns . resolver . LRUCache ( max_size = 1000 )
409+ dns_resolver .cache = MockedCache ( )
398410 validate_email ("test@gmail.com" , dns_resolver = dns_resolver )
399- assert mocked_put .called
400-
401- with mock .patch ("dns.resolver.LRUCache.get" ) as mocked_get :
402- validate_email ("test@gmail.com" , dns_resolver = dns_resolver )
403- assert mocked_get .called
411+ assert mocked_cache .put_called
412+ validate_email ("test@gmail.com" , dns_resolver = dns_resolver )
413+ assert mocked_cache .get_called
0 commit comments