Skip to content

Commit 7f819c2

Browse files
committed
test(converter): add tests to check that logger is called in generic modification functions
1 parent e8b935c commit 7f819c2

File tree

1 file changed

+178
-67
lines changed

1 file changed

+178
-67
lines changed

converter/tests/test_utils.py

Lines changed: 178 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -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

97173
def 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-
173197
class 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

323365
class 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

423495
class 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

490578
class 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

Comments
 (0)