From 682e5d992b6d8bca4957fecaeeb9ae2ba69c1016 Mon Sep 17 00:00:00 2001 From: Tim Rickwood <48654585+timrickwood@users.noreply.github.com> Date: Fri, 17 Feb 2023 13:08:09 +0000 Subject: [PATCH] DPTS-1096 Add stt tests (#64) * DPTS-1096 Add int tests for stt * DPTS-1096 Correct sql script * DPTS-1096 Adjust assertions post test * DPTS-1096 Fix broken tests --- Makefile | 1 + build/jenkins/Jenkinsfile.hk-integration | 12 +++ build/jenkins/Jenkinsfile.hk-integration-test | 25 ++++++ test/integration/data-files/test-data.sql | 8 ++ test/integration/handler.py | 6 +- test/integration/models/stt.py | 69 ++++++++++++++++ test/integration/test-files/36.2.0_stt.zip | Bin 0 -> 5726 bytes test/unit/hk/integration/test_handler.py | 4 +- test/unit/hk/integration/test_stt.py | 76 ++++++++++++++++++ 9 files changed, 197 insertions(+), 4 deletions(-) create mode 100644 test/integration/models/stt.py create mode 100644 test/integration/test-files/36.2.0_stt.zip create mode 100644 test/unit/hk/integration/test_stt.py diff --git a/Makefile b/Makefile index b9e0361..94eb48a 100644 --- a/Makefile +++ b/Makefile @@ -313,6 +313,7 @@ build-tester: # Builds image used for testing - mandatory: PROFILE=[name] mkdir $(DOCKER_DIR)/tester/assets/integration/data-files cp $(APPLICATION_TEST_DIR)/integration/data-files/* $(DOCKER_DIR)/tester/assets/integration/data-files make docker-image NAME=tester + rm -rf $(DOCKER_DIR)/tester/assets/integration push-tester: # Pushes image used for testing - mandatory: PROFILE=[name] make docker-push NAME=tester diff --git a/build/jenkins/Jenkinsfile.hk-integration b/build/jenkins/Jenkinsfile.hk-integration index d71cbff..1b9fd12 100644 --- a/build/jenkins/Jenkinsfile.hk-integration +++ b/build/jenkins/Jenkinsfile.hk-integration @@ -193,6 +193,18 @@ pipeline { } } } + stage('Run stt tests') { + steps { + echo 'Running tests for stt scenario bundle upload' + catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') { + build job: "${SINGLE_HK_TEST_JOB_NAME}/${BRANCH_NAME}",\ + parameters: [string(name:'Task' , value:"stt"),\ + string(name:'Bucket' , value:"${BUCKET}"),\ + string(name:'Profile' , value:"${PROFILE}") + ] + } + } + } stage('Check and remove older versions') { steps { script { echo 'Check and remove' } diff --git a/build/jenkins/Jenkinsfile.hk-integration-test b/build/jenkins/Jenkinsfile.hk-integration-test index fa946e9..c9d689c 100644 --- a/build/jenkins/Jenkinsfile.hk-integration-test +++ b/build/jenkins/Jenkinsfile.hk-integration-test @@ -27,6 +27,7 @@ pipeline { BUCKET = "${params.Bucket}" PROFILE = "${params.Profile}" FILENAME = "int_${TASK}.csv" + STT_FILENAME = '36.2.0_stt.zip' MAX_ATTEMPTS = 10 } triggers { pollSCM("* * * * *") } @@ -36,7 +37,30 @@ pipeline { script { sh 'make show-configuration' } } } + stage('Load stt scenario zipfile to s3') { + when { expression { params.Task == "stt" } } + steps { + script { + echo "Loading test file ${STT_FILENAME} to s3 bucket ${BUCKET}" + catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') { + sh "make load-single-integration-test-file-to-s3 FILENAME=${STT_FILENAME} BUCKET=${BUCKET}" + } + } + } + } + stage('Check archive folder for stt zipfile file') { + when { expression { params.Task == "stt" } } + steps { + script { + echo "Checking archive folder in s3 bucket ${BUCKET} for test file ${STT_FILENAME}" + catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') { + sh "make check-single-integration-test-file MAX_ATTEMPTS=${MAX_ATTEMPTS} FILENAME=${STT_FILENAME} BUCKET=${BUCKET}/archive" + } + } + } + } stage('Load test file to s3') { + when { expression { params.Task != "stt" } } steps { script { echo "Loading test file ${FILENAME} to s3 bucket ${BUCKET}" @@ -47,6 +71,7 @@ pipeline { } } stage('Check archive folder for test file') { + when { expression { params.Task != "stt" } } steps { script { echo "Checking archive folder in s3 bucket ${BUCKET} for test file ${FILENAME}" diff --git a/test/integration/data-files/test-data.sql b/test/integration/data-files/test-data.sql index ef5a19e..fb9211e 100644 --- a/test/integration/data-files/test-data.sql +++ b/test/integration/data-files/test-data.sql @@ -40,3 +40,11 @@ values (1121,4017); -- create record to symptomdiscriminatorsynonyms job to delete later insert into pathwaysdos.symptomdiscriminatorsynonyms (name, symptomdiscriminatorid) values ('Integration test delete','11009'); +-- +--for stt integration testing +-- remove all existing stt scenarios +delete from pathwaysdos.scenarios s +where s.scenarioid is not null; +-- remove all existing stt bundles +delete from pathwaysdos.scenariobundles sb +where sb.id is not null; diff --git a/test/integration/handler.py b/test/integration/handler.py index cf430a0..527a51e 100644 --- a/test/integration/handler.py +++ b/test/integration/handler.py @@ -2,11 +2,11 @@ import os import json -from models import symptomgroup, referralrole, servicetype, symptomdiscriminator, symptomgroupsymptomdiscriminator, symptomdiscriminatorsynonyms +from models import symptomgroup, referralrole, servicetype, symptomdiscriminator, symptomgroupsymptomdiscriminator, symptomdiscriminatorsynonyms, stt data_sql_scripts = ("./data-files/test-data.sql",) # List of tasks handled by this code DO NOT change the order add any new task to end -valid_tasks = ("data", "symptomgroups", "referralroles", "servicetypes", "symptomdiscriminators", "symptomgroupdiscriminators", "symptomdiscriminatorsynonyms") +valid_tasks = ("data", "symptomgroups", "referralroles", "servicetypes", "symptomdiscriminators", "symptomgroupdiscriminators", "symptomdiscriminatorsynonyms", "stt") def request(event, context): @@ -52,6 +52,8 @@ def run_data_checks_for_hk_task(env, task, db_connection): checks_pass = symptomgroupsymptomdiscriminator.check_symptom_group_symptom_discriminators_data(env, db_connection) if task.lower() == valid_tasks[6].lower(): checks_pass = symptomdiscriminatorsynonyms.check_symptom_discriminator_synonyms_data(env, db_connection) + if task.lower() == valid_tasks[7].lower(): + checks_pass = stt.check_stt_scenario_data(env, db_connection) # if no code to handle task default to fail if checks_pass is None: logger.log_for_audit(env, "No function to handle task {}".format(task)) diff --git a/test/integration/models/stt.py b/test/integration/models/stt.py new file mode 100644 index 0000000..2fcd77a --- /dev/null +++ b/test/integration/models/stt.py @@ -0,0 +1,69 @@ +from utilities import logger, database + +# Note +# db tables are scenarios and scenariobundles +# See test-data.sql (clears down all bundles/scenarios0 and test/integration/test-files/36.2.0_stt.zip +# Will test +# That there is only one record in scenarionbundlees table + +expected_stt_bundle_name = '36.2.0' + +expected_disposition_id = 1 +expected_disposition_group_id = 18 +expected_scenario_id = 893 +expected_symptomgroup_id = 1014 +expected_symptom_discriminator_id = 4499 +expected_age_id = 1 +expected_gender_id = 2 + + +def get_stt_scenario_data(env, db_connection): + """Returns expected data on all stt scenario bundles and scenarios within bundles""" + result_set = {} + try: + query = create_stt_scenarios_query() + result_set = database.execute_resultset_query(env, db_connection, query, ()) + except Exception as e: + logger.log_for_error( + env, + "Error checking results for {0} => {1}".format("referral roles", str(e)), + ) + return result_set + +def create_stt_scenarios_query(): + query = ("""select sb.name, s.scenarioid, s.symptomgroupid, s.dispositionid, s.dispositiongroupid, s.symptomdiscriminatorid, + s.ageid, s.genderid + from scenariobundles sb + join scenarios s + on s.scenariobundleid = sb.id""" + ) + return query + +def check_scenario_data_item(env, scenario, column_name, expected_value): + ok = True + if scenario[column_name] != expected_value: + ok = False + logger.log_for_audit( + env, + "Column name {0} set to {1} and not expected value of {2}".format(column_name,scenario[column_name],expected_value), + ) + return ok + + +def check_stt_scenario_data(env, db_connection): + """Returns True if single record in resultset and all checks pass ; otherwise returns False""" + flags = [] + result_set = get_stt_scenario_data(env, db_connection) + for scenario in result_set: + flags.append(check_scenario_data_item(env, scenario, "name", expected_stt_bundle_name)) + flags.append(check_scenario_data_item(env, scenario, "scenarioid", expected_scenario_id)) + flags.append(check_scenario_data_item(env, scenario, "dispositionid", expected_disposition_id)) + flags.append(check_scenario_data_item(env, scenario, "dispositiongroupid", expected_disposition_group_id)) + flags.append(check_scenario_data_item(env, scenario, "symptomgroupid", expected_symptomgroup_id)) + flags.append(check_scenario_data_item(env, scenario, "symptomdiscriminatorid", expected_symptom_discriminator_id)) + flags.append(check_scenario_data_item(env, scenario, "ageid", expected_age_id)) + flags.append(check_scenario_data_item(env, scenario, "genderid", expected_gender_id)) + if len(flags)==0: + flags.append(False) + return all(flags) + diff --git a/test/integration/test-files/36.2.0_stt.zip b/test/integration/test-files/36.2.0_stt.zip new file mode 100644 index 0000000000000000000000000000000000000000..88e937d110c2bf4cc63e91e19bcf9e7da0e77ae9 GIT binary patch literal 5726 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 literal 0 HcmV?d00001 diff --git a/test/unit/hk/integration/test_handler.py b/test/unit/hk/integration/test_handler.py index 209ffa1..2011761 100644 --- a/test/unit/hk/integration/test_handler.py +++ b/test/unit/hk/integration/test_handler.py @@ -8,7 +8,7 @@ file_path = "application.hk.integration.handler" env = 'integration' -valid_tasks = ("data","symptomgroups","referralroles", "servicetypes", "symptomdiscriminators", "symptomgroupdiscriminators", "symptomdiscriminatorsynonyms") +valid_tasks = ("data","symptomgroups","referralroles", "servicetypes", "symptomdiscriminators", "symptomgroupdiscriminators", "symptomdiscriminatorsynonyms", "stt") @patch(f"{file_path}.logger.log_for_audit") def test_is_valid_task_invalid_lc(mock_logger): @@ -36,7 +36,7 @@ def test_valid_task_list(): # This may be hard to maintain as nothing in this list can be in its actual position # add any new task as penultimate in list def test_invalid_task_list(): - temp_valid_tasks = ("symptomgroups","referralroles","servicetypes","symptomdiscriminators","symptomgroupdiscriminators","symptomdiscriminatorsynonyms","data") + temp_valid_tasks = ("symptomgroups","referralroles","servicetypes","symptomdiscriminators","symptomgroupdiscriminators","symptomdiscriminatorsynonyms","stt", "data") assert len(handler.valid_tasks) == len(temp_valid_tasks) for i in range(len(handler.valid_tasks)): assert handler.valid_tasks[i] != temp_valid_tasks[i] diff --git a/test/unit/hk/integration/test_stt.py b/test/unit/hk/integration/test_stt.py new file mode 100644 index 0000000..75810da --- /dev/null +++ b/test/unit/hk/integration/test_stt.py @@ -0,0 +1,76 @@ +from unittest.mock import Mock, patch +import pytest +import string +import psycopg2 + +from models import stt + +file_path = "application.models.stt" +env = 'unittest' + +@patch("psycopg2.connect") +@patch(f"{file_path}.database.execute_resultset_query", return_value = [{"name":'36.2.0',"ageid":1,"genderid":2,"scenarioid":893,"symptomgroupid":1014, "dispositionid":1, "dispositiongroupid":18, "symptomdiscriminatorid":4499}]) +def test_check_stt_expected(mock_db, mock_resultset): + assert stt.check_stt_scenario_data(env, mock_db) == True + +@patch("psycopg2.connect") +@patch(f"{file_path}.database.execute_resultset_query", return_value = [{"name":'36.3.0',"ageid":1,"genderid":2,"scenarioid":893,"symptomgroupid":1014, "dispositionid":1, "dispositiongroupid":18, "symptomdiscriminatorid":4499}]) +def test_check_stt_wrong_name(mock_db, mock_resultset): + assert stt.check_stt_scenario_data(env, mock_db) == False + +@patch("psycopg2.connect") +@patch(f"{file_path}.database.execute_resultset_query", return_value = [{"name":'36.2.0',"ageid":2,"genderid":2,"scenarioid":893,"symptomgroupid":1014, "dispositionid":1, "dispositiongroupid":18, "symptomdiscriminatorid":4499}]) +def test_check_stt_wrong_age(mock_db, mock_resultset): + assert stt.check_stt_scenario_data(env, mock_db) == False + +@patch("psycopg2.connect") +@patch(f"{file_path}.database.execute_resultset_query", return_value = [{"name":'36.2.0',"ageid":1,"genderid":1,"scenarioid":893,"symptomgroupid":1014, "dispositionid":1, "dispositiongroupid":18, "symptomdiscriminatorid":4499}]) +def test_check_stt_wrong_gender(mock_db, mock_resultset): + assert stt.check_stt_scenario_data(env, mock_db) == False + +@patch("psycopg2.connect") +@patch(f"{file_path}.database.execute_resultset_query", return_value = [{"name":'36.2.0',"ageid":1,"genderid":2,"scenarioid":892,"symptomgroupid":1014, "dispositionid":1, "dispositiongroupid":18, "symptomdiscriminatorid":4499}]) +def test_check_stt_wrong_scenarioid(mock_db, mock_resultset): + assert stt.check_stt_scenario_data(env, mock_db) == False + +@patch("psycopg2.connect") +@patch(f"{file_path}.database.execute_resultset_query", return_value = [{"name":'36.2.0',"ageid":1,"genderid":1,"scenarioid":893,"symptomgroupid":1015, "dispositionid":1, "dispositiongroupid":18, "symptomdiscriminatorid":4499}]) +def test_check_stt_wrong_symptomgroupid(mock_db, mock_resultset): + assert stt.check_stt_scenario_data(env, mock_db) == False + +@patch("psycopg2.connect") +@patch(f"{file_path}.database.execute_resultset_query", return_value = [{"name":'36.2.0',"ageid":1,"genderid":2,"scenarioid":893,"symptomgroupid":1014, "dispositionid":2, "dispositiongroupid":18, "symptomdiscriminatorid":4499}]) +def test_check_stt_wrong_dispositionid(mock_db, mock_resultset): + assert stt.check_stt_scenario_data(env, mock_db) == False + +@patch("psycopg2.connect") +@patch(f"{file_path}.database.execute_resultset_query", return_value = [{"name":'36.2.0',"ageid":1,"genderid":2,"scenarioid":893,"symptomgroupid":1014, "dispositionid":1, "dispositiongroupid":19, "symptomdiscriminatorid":4499}]) +def test_check_stt_wrong_dispositiongroupid(mock_db, mock_resultset): + assert stt.check_stt_scenario_data(env, mock_db) == False + +@patch("psycopg2.connect") +@patch(f"{file_path}.database.execute_resultset_query", return_value = [{"name":'36.2.0',"ageid":1,"genderid":2,"scenarioid":893,"symptomgroupid":1014, "dispositionid":1, "dispositiongroupid":18, "symptomdiscriminatorid":4500}]) +def test_check_stt_wrong_symptomdiscriminatorid(mock_db, mock_resultset): + assert stt.check_stt_scenario_data(env, mock_db) == False + +@patch("psycopg2.connect") +@patch(f"{file_path}.database.execute_resultset_query", return_value = []) +def test_check_stt_empty_resultset(mock_db, mock_resultset): + assert stt.check_stt_scenario_data(env, mock_db) == False + +@patch("psycopg2.connect") +@patch(f"{file_path}.database.execute_resultset_query", return_value = [{"name":'36.2.1',"ageid":1,"genderid":2,"scenarioid":893,"symptomgroupid":1014, "dispositionid":1, "dispositiongroupid":18, "symptomdiscriminatorid":4499},{"name":'36.2.0',"ageid":1,"genderid":2,"scenarioid":893,"symptomgroupid":1014, "dispositionid":1, "dispositiongroupid":18, "symptomdiscriminatorid":4499}]) +def test_two_records_first_wrong(mock_db, mock_resultset): + assert stt.check_stt_scenario_data(env, mock_db) == False + + +@patch("psycopg2.connect") +@patch(f"{file_path}.database.execute_resultset_query", return_value = [{"name":'36.2.0',"ageid":1,"genderid":1,"scenarioid":893,"symptomgroupid":1014, "dispositionid":1, "dispositiongroupid":18, "symptomdiscriminatorid":4499},{"name":'36.2.3',"ageid":1,"genderid":2,"scenarioid":893,"symptomgroupid":1014, "dispositionid":1, "dispositiongroupid":18, "symptomdiscriminatorid":4500}]) +def test_two_records_second_wrong(mock_db, mock_resultset): + assert stt.check_stt_scenario_data(env, mock_db) == False + +@patch("psycopg2.connect") +@patch(f"{file_path}.database.execute_resultset_query",side_effect=Exception) +def test_get_stt_scenario_data(mock_resultset, mock_db): + result_set = stt.get_stt_scenario_data(env,mock_db) + assert result_set == {}