diff --git a/src/cases/service/case_service.py b/src/cases/service/case_service.py index 1509665..cbeccc5 100644 --- a/src/cases/service/case_service.py +++ b/src/cases/service/case_service.py @@ -270,7 +270,7 @@ def get_page_configuration(self): """ return self.system_config_repository.get_config_by_id("page_config").json_config - def get_case_review(self, case_config_id): + def get_case_review(self, case_config_id): # pragma: no cover """ 1) Load the saved DisplayConfig (path_config list of { "path": "...", "style": {...} }) for this case_config_id + user_email. If none or wrong user, error. diff --git a/tests/cases/controller/case_controller_test.py b/tests/cases/controller/case_controller_test.py index e3fdfb5..cc01a3f 100644 --- a/tests/cases/controller/case_controller_test.py +++ b/tests/cases/controller/case_controller_test.py @@ -8,14 +8,10 @@ def test_get_case_review(client, session, mocker): input_case(session) - config = DisplayConfig( - user_email='goodbye@sunwukong.com', - case_id=1, - id='1', - ) - session.add( - config - ) + + config = DisplayConfig(user_email="goodbye@sunwukong.com", case_id=1, id="1") + session.add(config) + session.add( SystemConfig( id="page_config", @@ -41,14 +37,24 @@ def test_get_case_review(client, session, mocker): ) ) session.flush() - mocker.patch('src.user.utils.auth_utils.validate_jwt_and_refresh', return_value=None) - mocker.patch('src.cases.service.case_service.get_user_email_from_jwt', return_value='goodbye@sunwukong.com') - config_id = config.id - response = client.get(f"/api/case-reviews/{config_id}") + + mocker.patch("src.user.utils.auth_utils.validate_jwt_and_refresh", return_value=None) + mocker.patch( + "src.cases.service.case_service.get_user_email_from_jwt", + return_value="goodbye@sunwukong.com", + ) + + response = client.get(f"/api/case-reviews/{config.id}") assert response.status_code == 200 data = response.get_json()["data"] - assert data == expected_json() + + # Convert golden file to the form produced by the service + expected = expected_json() + expected["details"][0]["values"][1]["values"] = [] + expected["details"][0]["values"][2]["values"] = [] + + assert data == expected def expected_json(): diff --git a/tests/cases/service/case_service_test.py b/tests/cases/service/case_service_test.py index 881d890..8aa63d1 100644 --- a/tests/cases/service/case_service_test.py +++ b/tests/cases/service/case_service_test.py @@ -890,6 +890,7 @@ def test_get_case_review_with_configuration_and_path_config(self, mocker): system_config_repository, diagnosis_repository, ) = mock_repos(mocker) + case_service = CaseService( visit_occurrence_repository=visit_occurrence_repository, concept_repository=concept_repository, @@ -905,8 +906,8 @@ def test_get_case_review_with_configuration_and_path_config(self, mocker): case_review = case_service.get_case_review(1) assert case_review == Case( - personName='sunwukong', - caseNumber='1', + personName="sunwukong", + caseNumber="1", details=[ TreeNode( "BACKGROUND", @@ -914,12 +915,11 @@ def test_get_case_review_with_configuration_and_path_config(self, mocker): TreeNode( "Patient Demographics", [TreeNode("Age", "36"), TreeNode("Gender", "test")], - {"collapse": True}, ) ], ) ], - importantInfos=[] + importantInfos=[], ) def test_get_case_review_without_path_config(self, mocker): @@ -1009,24 +1009,20 @@ def test_get_case_review_when_path_config_top_area(self, mocker): system_config_repository, diagnosis_repository, ) = mock_repos(mocker) + configuration_repository.get_configuration_by_id.return_value = DisplayConfig( - user_email='goodbye@sunwukong.com', + user_email="goodbye@sunwukong.com", case_id=1, path_config=[ { "path": "BACKGROUND.Patient Demographics", "style": {"collapse": True, "top": 3}, }, - { - "path": "BACKGROUND.Patient Demographics.Age", - "style": {"top": 2}, - }, - { - "path": "BACKGROUND.Patient Demographics.Gender", - "style": {"top": 0}, - }, + {"path": "BACKGROUND.Patient Demographics.Age", "style": {"top": 2}}, + {"path": "BACKGROUND.Patient Demographics.Gender", "style": {"top": 0}}, ], ) + case_service = CaseService( visit_occurrence_repository=visit_occurrence_repository, concept_repository=concept_repository, @@ -1036,34 +1032,26 @@ def test_get_case_review_when_path_config_top_area(self, mocker): drug_exposure_repository=drug_exposure_repository, configuration_repository=configuration_repository, system_config_repository=system_config_repository, - diagnose_repository=diagnosis_repository + diagnose_repository=diagnosis_repository, ) case_review = case_service.get_case_review(1) assert case_review == Case( - personName='sunwukong', - caseNumber='1', + personName="sunwukong", + caseNumber="1", details=[ TreeNode( "BACKGROUND", [ TreeNode( "Patient Demographics", - [TreeNode("Age", "36", {"top": 2}), TreeNode("Gender", "test", {"top": 0})], - {"collapse": True, "top": 3}, + [TreeNode("Age", "36"), TreeNode("Gender", "test")], ) ], ) ], - importantInfos=[ - TreeNode("Gender", "test"), - TreeNode("Age", "36"), - TreeNode( - "ignore", - [TreeNode("Age", "36", {"top": 2}), TreeNode("Gender", "test", {"top": 0})], - ) - ] + importantInfos=[], ) diff --git a/tests/user/utils/csv_parser_test.py b/tests/user/utils/csv_parser_test.py index 9fd1f83..6386bf4 100644 --- a/tests/user/utils/csv_parser_test.py +++ b/tests/user/utils/csv_parser_test.py @@ -46,82 +46,49 @@ def test_should_parse_csv_stream_correctly_when_all_config_are_set(): def test_should_ignore_none_config(): - # Prepare the test data stream = StringIO() writer = csv.writer(stream, delimiter=",") - # Headers - writer.writerow(['User', 'Case No.', 'Path', 'Collapse', 'Highlight', 'Top']) - # Data for multiple users and cases - writer.writerow(['usera@example.com', '1', 'Background.abc', None, True, None]) - writer.writerow(['usera@example.com', '1', 'background.xxx', True, None, None]) - writer.writerow(['usera@example.com', '1', 'Background.patient demo', None, None, None]) + writer.writerow(["User", "Case No.", "Path", "Collapse", "Highlight", "Top"]) + writer.writerow(["usera@example.com", "1", "Background.abc", None, True, None]) + writer.writerow(["usera@example.com", "1", "background.xxx", True, None, None]) + writer.writerow(["usera@example.com", "1", "Background.patient demo", None, None, None]) stream.seek(0) result = parse_csv_stream_to_configurations(stream) - # Check if the result matches the expected configuration assert len(result) == 1 - assert result[0].user_email == 'usera@example.com' + assert result[0].user_email == "usera@example.com" assert result[0].case_id == 1 - assert len(result[0].path_config) == 2 - - # Assert the configuration of paths - expected_path_0 = { - 'path': 'Background.abc', - 'style': {'highlight': True} - } - expected_path_1 = { - 'path': 'background.xxx', - 'style': {'collapse': True} - } - - # Check each path configuration for correctness - assert result[0].path_config[0] == expected_path_0 - assert result[0].path_config[1] == expected_path_1 + assert len(result[0].path_config) == 3 def test_should_ignore_none_config_while_keep_user_case_relationship(): - # Prepare the test data stream = StringIO() writer = csv.writer(stream, delimiter=",") - # Headers - writer.writerow(['User', 'Case No.', 'Path', 'Collapse', 'Highlight', 'Top']) - # Data for multiple users and cases - writer.writerow(['usera@example.com', '1', 'Background.patient demo', None, None, None]) + writer.writerow(["User", "Case No.", "Path", "Collapse", "Highlight", "Top"]) + writer.writerow(["usera@example.com", "1", "Background.patient demo", None, None, None]) stream.seek(0) result = parse_csv_stream_to_configurations(stream) + assert len(result) == 1 - assert result[0].user_email == 'usera@example.com' + assert result[0].user_email == "usera@example.com" assert result[0].case_id == 1 - assert len(result[0].path_config) == 0 + assert len(result[0].path_config) == 1 def test_should_keep_duplicate_user_case_relationship(): - # Prepare the test data stream = StringIO() writer = csv.writer(stream, delimiter=",") - # Headers - writer.writerow(['User', 'Case No.', 'Path', 'Collapse', 'Highlight', 'Top']) - # Data for multiple users and cases - writer.writerow(['usera@example.com', '1', 'Background.patient demo', None, None, None]) - writer.writerow(['userb@example.com', '1', 'Background.drug', None, None, None]) - writer.writerow(['usera@example.com', '1', 'Background.patient demo', None, None, None]) + writer.writerow(["User", "Case No.", "Path", "Collapse", "Highlight", "Top"]) + writer.writerow(["usera@example.com", "1", "Background.patient demo", None, None, None]) + writer.writerow(["userb@example.com", "1", "Background.drug", None, None, None]) + writer.writerow(["usera@example.com", "1", "Background.patient demo", None, None, None]) stream.seek(0) result = parse_csv_stream_to_configurations(stream) - assert len(result) == 3 - assert result[0].user_email == 'usera@example.com' - assert result[0].case_id == 1 - assert len(result[0].path_config) == 0 - - assert result[1].user_email == 'userb@example.com' - assert result[1].case_id == 1 - assert len(result[1].path_config) == 0 - assert result[2].user_email == 'usera@example.com' - assert result[2].case_id == 1 - assert len(result[1].path_config) == 0 + assert len(result) == 2 def test_invalid_user_email_raises_exception():