@@ -359,8 +359,7 @@ def test_get_merge_fields_data_type_map_success(self, mock_paginate):
359359 result = self .test_client .get_merge_fields_data_type_map (list_id )
360360
361361 mock_paginate .assert_called_once_with (
362- base_endpoint = f"lists/{ list_id } /merge-fields" ,
363- data_key = "merge_fields"
362+ base_endpoint = f"lists/{ list_id } /merge-fields" , data_key = "merge_fields"
364363 )
365364
366365 expected_map = {"FNAME" : "text" , "LNAME" : "text" , "VAN_ID" : "number" }
@@ -378,9 +377,74 @@ def test_get_merge_fields_data_type_map_fail(self, mock_paginate):
378377
379378 # paginate_endpoint called once
380379 mock_paginate .assert_called_once_with (
381- base_endpoint = f"lists/{ list_id } /merge-fields" ,
382- data_key = "merge_fields"
380+ base_endpoint = f"lists/{ list_id } /merge-fields" , data_key = "merge_fields"
383381 )
384382
385383 # empty dict for result
386- self .assertEqual (result , {})
384+ self .assertEqual (result , {})
385+
386+ @patch .object (MailChimpClient , "get_merge_fields_data_type_map" )
387+ def test_format_merge_fields_for_list_skips_blank_and_none (self , mock_get_types ):
388+ """Test that None and blank strings are ignored"""
389+ mock_get_types .return_value = {"FNAME" : "text" , "LNAME" : "text" }
390+
391+ merge_fields = {"FNAME" : None , "LNAME" : " " }
392+ result = self .test_client .format_merge_fields_for_list ("llll" , merge_fields )
393+ # should be an empty dict
394+ self .assertEqual (result , {})
395+
396+ @patch .object (MailChimpClient , "get_merge_fields_data_type_map" )
397+ def test_format_merge_fields_for_list_text_success (self , mock_get_types ):
398+ """Test that text fields are handled correctly."""
399+ mock_get_types .return_value = {"FNAME" : "text" , "LNAME" : "text" }
400+
401+ merge_fields = {"FNAME" : " John " , "LNAME" : "Doe" }
402+ result = self .test_client .format_merge_fields_for_list ("oapao1" , merge_fields )
403+
404+ mock_get_types .assert_called_once_with ("oapao1" )
405+ self .assertEqual (result , {"FNAME" : "John" , "LNAME" : "Doe" })
406+
407+ @patch .object (MailChimpClient , "get_merge_fields_data_type_map" )
408+ def test_format_merge_fields_for_list_zip_fail (self , mock_get_types ):
409+ """Test that zip type over 5 digits raise error"""
410+ mock_get_types .return_value = {"ZIP" : "zip" }
411+
412+ merge_fields = {"ZIP" : "1111122" }
413+
414+ with self .assertRaises (ValueError ):
415+ self .test_client .format_merge_fields_for_list ("some_id" , merge_fields )
416+
417+ @patch .object (MailChimpClient , "get_merge_fields_data_type_map" )
418+ def test_format_merge_fields_for_list_with_helpers (self , mock_get_types ):
419+ """Test that date, birthday, address, and number fields are pushed to the correct helper function"""
420+ mock_get_types .return_value = {
421+ "DATE" : "date" ,
422+ "BIRTHDAY" : "birthday" ,
423+ "ADDRESS" : "address" ,
424+ "NUMBER" : "number" ,
425+ }
426+
427+ # replace methods with mocks
428+ with patch .object (self .test_client , "format_date" ) as mock_date , patch .object (
429+ self .test_client , "format_birthday"
430+ ) as mock_bday , patch .object (
431+ self .test_client ,
432+ "format_address" ,
433+ ) as mock_addr , patch .object (
434+ self .test_client ,
435+ "format_number" ,
436+ ) as mock_num :
437+ # placeholder fake data
438+ merge_fields = {
439+ "DATE" : "2022-10-09" ,
440+ "BIRTHDAY" : "10/09" ,
441+ "ADDRESS" : {},
442+ "NUMBER" : 0 ,
443+ }
444+
445+ self .test_client .format_merge_fields_for_list ("some_id" , merge_fields )
446+ # just test if helper methods were called
447+ mock_date .assert_called_once ()
448+ mock_bday .assert_called_once ()
449+ mock_addr .assert_called_once ()
450+ mock_num .assert_called_once ()
0 commit comments