@@ -71,27 +71,103 @@ def test_format_object_nested():
7171 assert result == expected
7272
7373
74- def test_delete_paths ():
75- data = {"a" : {"b" : {"c" : 1 , "d" : 2 }, "e" : 3 }, "f" : 4 }
74+ class TestDeletePaths (unittest .TestCase ):
75+ def test_delete_paths (self ):
76+ data = {"a" : {"b" : {"c" : 1 , "d" : 2 }, "e" : 3 }, "f" : 4 }
77+
78+ paths = ["a.b.c" , "f" ]
79+ delete_paths (data , paths )
80+
81+ assert "c" not in data ["a" ]["b" ]
82+ assert "f" not in data
83+ assert data ["a" ]["b" ]["d" ] == 2
84+
85+ def test_delete_paths_missing (self ):
86+ data = {"a" : {"b" : 1 }}
87+ delete_paths (data , ["a.x.y" , "z" ])
88+ assert data == {"a" : {"b" : 1 }}
89+
90+ def test_delete_paths_cleanup (self ):
91+ data = {"a" : {"b" : {"c" : 1 }}}
92+ delete_paths (data , ["a.b.c" ])
93+ assert data == {} # Empty dictionaries should be cleaned up
94+
95+ def test_delete_paths_with_list (self ):
96+ data = {
97+ "a" : {
98+ "b" : {
99+ "c" : [
100+ {"delete" : 1 , "keep" : 2 },
101+ {"delete" : 2 , "keep" : 3 },
102+ {"delete" : 4 , "keep" : 5 },
103+ ],
104+ "d" : 2 ,
105+ },
106+ "e" : 3 ,
107+ },
108+ "f" : 4 ,
109+ }
110+ delete_paths (data , ["a.b.c[].delete" ])
111+
112+ assert data ["a" ]["b" ]["c" ] == [{"keep" : 2 }, {"keep" : 3 }, {"keep" : 5 }]
113+ assert len (data ["a" ]["b" ]["c" ]) == 3
114+ assert data ["a" ]["b" ]["d" ] == 2
115+ assert data ["a" ]["e" ] == 3
116+ assert data ["f" ] == 4
117+
118+ def test_delete_paths_with_wrong_list (self ):
119+ data = {
120+ "a" : {
121+ "b" : {
122+ "c" : [
123+ {"delete" : 1 , "keep" : 2 },
124+ {"delete" : 2 , "keep" : 3 },
125+ {"delete" : 4 , "keep" : 5 },
126+ ],
127+ "d" : 2 ,
128+ },
129+ "e" : 3 ,
130+ },
131+ "f" : 4 ,
132+ }
133+ delete_paths (data , ["a.b.c[].toto" ])
134+
135+ assert data ["a" ]["b" ]["c" ] == [
136+ {"delete" : 1 , "keep" : 2 },
137+ {"delete" : 2 , "keep" : 3 },
138+ {"delete" : 4 , "keep" : 5 },
139+ ]
140+ assert len (data ["a" ]["b" ]["c" ]) == 3
141+ assert data ["a" ]["b" ]["d" ] == 2
142+ assert data ["a" ]["e" ] == 3
143+ assert data ["f" ] == 4
76144
77- paths = ["a.b.c" , "f" ]
78- delete_paths (data , paths )
145+ @patch ("converter.utils.logger" )
146+ def test_delete_paths_logs_info (self , mock_logger ):
147+ # Arrange
148+ data = {
149+ "a" : 1 ,
150+ "b" : {
151+ "c" : 2 ,
152+ "d" : 3 ,
153+ },
154+ }
79155
80- assert "c" not in data ["a" ]["b" ]
81- assert "f" not in data
82- assert data ["a" ]["b" ]["d" ] == 2
156+ # Act
157+ delete_paths (data , ["a" , "b.c" ])
83158
159+ # Assert logger has been called twice
160+ assert mock_logger .info .call_count == 2
84161
85- def test_delete_paths_missing ():
86- data = {"a" : {"b" : 1 }}
87- delete_paths (data , ["a.x.y" , "z" ])
88- assert data == {"a" : {"b" : 1 }}
162+ # Check the log message content
163+ first_call_args , _ = mock_logger .info .call_args_list [0 ]
164+ second_call_args , _ = mock_logger .info .call_args_list [1 ]
89165
166+ assert first_call_args [0 ] == "Deleting key: %s"
167+ assert first_call_args [1 ] == "a"
90168
91- def test_delete_paths_cleanup ():
92- data = {"a" : {"b" : {"c" : 1 }}}
93- delete_paths (data , ["a.b.c" ])
94- assert data == {} # Empty dictionaries should be cleaned up
169+ assert second_call_args [0 ] == "Deleting key: %s"
170+ assert second_call_args [1 ] == "c"
95171
96172
97173def test_translate_keys ():
@@ -118,58 +194,6 @@ def test_empty_concatenate():
118194 assert concatenate_values (data ) == ""
119195
120196
121- def test_delete_paths_with_list ():
122- data = {
123- "a" : {
124- "b" : {
125- "c" : [
126- {"delete" : 1 , "keep" : 2 },
127- {"delete" : 2 , "keep" : 3 },
128- {"delete" : 4 , "keep" : 5 },
129- ],
130- "d" : 2 ,
131- },
132- "e" : 3 ,
133- },
134- "f" : 4 ,
135- }
136- delete_paths (data , ["a.b.c[].delete" ])
137-
138- assert data ["a" ]["b" ]["c" ] == [{"keep" : 2 }, {"keep" : 3 }, {"keep" : 5 }]
139- assert len (data ["a" ]["b" ]["c" ]) == 3
140- assert data ["a" ]["b" ]["d" ] == 2
141- assert data ["a" ]["e" ] == 3
142- assert data ["f" ] == 4
143-
144-
145- def test_delete_paths_with_wrong_list ():
146- data = {
147- "a" : {
148- "b" : {
149- "c" : [
150- {"delete" : 1 , "keep" : 2 },
151- {"delete" : 2 , "keep" : 3 },
152- {"delete" : 4 , "keep" : 5 },
153- ],
154- "d" : 2 ,
155- },
156- "e" : 3 ,
157- },
158- "f" : 4 ,
159- }
160- delete_paths (data , ["a.b.c[].toto" ])
161-
162- assert data ["a" ]["b" ]["c" ] == [
163- {"delete" : 1 , "keep" : 2 },
164- {"delete" : 2 , "keep" : 3 },
165- {"delete" : 4 , "keep" : 5 },
166- ]
167- assert len (data ["a" ]["b" ]["c" ]) == 3
168- assert data ["a" ]["b" ]["d" ] == 2
169- assert data ["a" ]["e" ] == 3
170- assert data ["f" ] == 4
171-
172-
173197class TestIsFieldCompleted (unittest .TestCase ):
174198 @classmethod
175199 def setUpClass (cls ):
@@ -319,6 +343,24 @@ def test_update_json_value_logs_error(self, mock_logger):
319343 "Error raised in update_json_value: Parse error near the end of string!"
320344 )
321345
346+ @patch ("converter.utils.logger" )
347+ def test_update_json_value_logs_info (self , mock_logger ):
348+ # Arrange
349+ data = {"qualification" : {"details" : {"priority" : "P1" }}}
350+
351+ # Act
352+ update_json_value (data , "$.qualification.details.priority" , "P2" )
353+
354+ # Assert logger has been called
355+ assert mock_logger .info .call_count == 1
356+
357+ # Check the log message content
358+ args , kwargs = mock_logger .info .call_args
359+ assert args [0 ] == "Updating value from %s to %s at path %s"
360+ assert args [1 ] == "P1"
361+ assert args [2 ] == "P2"
362+ assert str (args [3 ]) == "qualification.details.priority"
363+
322364
323365class TestAddToMedicalNotes (unittest .TestCase ):
324366 @patch ("converter.utils.random" )
@@ -419,6 +461,36 @@ def test_add_to_medical_notes(self, mock_choices):
419461 self .assertEqual (json_data .get ("medicalNote" ), expected_medical_notes )
420462 self .assertEqual (len (json_data .get ("medicalNote" )), 3 )
421463
464+ @patch ("converter.utils.logger" )
465+ def test_add_to_medical_notes_logs_info (self , mock_logger ):
466+ # Arrange
467+ data = {
468+ "patient" : [
469+ {
470+ "patientId" : "fr.health.samuH.ERTYUI.GHK" ,
471+ "key1" : "value1" ,
472+ }
473+ ],
474+ "medicalNote" : [],
475+ }
476+
477+ # Act
478+ add_to_medical_notes (
479+ data ,
480+ data ["patient" ][0 ],
481+ [
482+ {"path" : "key1" , "label" : "key 1 label: " },
483+ ],
484+ )
485+
486+ # Assert logger has been called
487+ assert mock_logger .info .call_count == 1
488+
489+ # Check the log message content
490+ args , kwargs = mock_logger .info .call_args
491+ assert args [0 ] == "Adding field %s to medical notes"
492+ assert args [1 ] == "key1"
493+
422494
423495class TestMapToNewValue (unittest .TestCase ):
424496 def test_value_map_to_new_value_with_valid_mapping (self ):
@@ -486,6 +558,22 @@ def test_set_deep_path(self):
486558 self .assertTrue (is_field_completed (data , "$.a.b.c.d" ))
487559 self .assertTrue (is_field_completed (data , "$.a.b.c.d.e" ))
488560
561+ @patch ("converter.utils.logger" )
562+ def test_set_value_logs_info (self , mock_logger ):
563+ # Arrange
564+ data = {}
565+
566+ # Act
567+ set_value (data , "$.a" , "b" )
568+
569+ # Assert logger has been called
570+ assert mock_logger .info .call_count == 1
571+
572+ # Check the log message content
573+ args , kwargs = mock_logger .info .call_args
574+ assert args [0 ] == "Setting value at path %s"
575+ assert args [1 ] == "$.a"
576+
489577
490578class TestExtractMessageTypeFromMessageContent (unittest .TestCase ):
491579 def test_returns_unknown_when_only_unwanted_keys (self ):
@@ -559,3 +647,26 @@ def test_switch_field_name_with_nested_field(self):
559647 self .assertIn (new_field_name , json_data ["parent" ])
560648 self .assertEqual (json_data ["parent" ][new_field_name ], "value1" )
561649 self .assertNotIn (previous_field_name , json_data ["parent" ])
650+
651+ @patch ("converter.utils.set_value" )
652+ @patch ("converter.utils.delete_paths" )
653+ @patch ("converter.utils.logger" )
654+ def test_switch_field_logs_info (
655+ self , mock_logger , mock_delete_paths , mock_set_value
656+ ):
657+ # Arrange
658+ data = {
659+ "a" : "value1" ,
660+ }
661+
662+ # Act
663+ switch_field_name (data , "$.a" , "$.b" )
664+
665+ # Assert logger has been called
666+ assert mock_logger .info .call_count == 1
667+
668+ # Check the log message content
669+ args , kwargs = mock_logger .info .call_args
670+ assert args [0 ] == "Transforming field name from %s to %s"
671+ assert args [1 ] == "$.a"
672+ assert args [2 ] == "$.b"
0 commit comments