class TestPatientPageVisualisationWithNoObsData(TestCommon):
    """
    Test that the No observation data available for patient message
    is shown on no obs being available
    """
    def setUp(self):
        self.driver.get(MOB_LOGIN)
        self.login_page = LoginPage(self.driver)
        self.list_page = ListPage(self.driver)
        self.patient_page = PatientPage(self.driver)
        self.login_page.login(NURSE_USERNM1, NURSE_PWD1)
        self.list_page.go_to_patient_list()
        patients = self.list_page.get_list_items()
        patient_to_test = patients[0]
        self.patient_url = patient_to_test.get_attribute('href')
        patient_id = self.patient_url.replace(
            PATIENT_PAGE, ''
        )
        self.patient_page.remove_observations_for_patient(int(patient_id))
        self.driver.get(self.patient_url)

        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located(GRAPH_CHART)
        )

    def test_shows_message_when_no_obs(self):
        """
        Test that the No observation data available for patient message is
        shown on no obs being available
        """

        self.assertTrue(self.patient_page.has_no_patient_data(),
                        'No Observation Data Available message not found')
Exemplo n.º 2
0
class TestPatientPageVisualisationWithNoObsData(TestCommon):
    """
    Test that the No observation data available for patient message
    is shown on no obs being available
    """
    def setUp(self):
        self.driver.get(MOB_LOGIN)
        self.login_page = LoginPage(self.driver)
        self.list_page = ListPage(self.driver)
        self.patient_page = PatientPage(self.driver)
        self.login_page.login(NURSE_USERNM1, NURSE_PWD1)
        self.list_page.go_to_patient_list()
        patients = self.list_page.get_list_items()
        patient_to_test = patients[0]
        self.patient_url = patient_to_test.get_attribute('href')
        patient_id = self.patient_url.replace(PATIENT_PAGE, '')
        self.patient_page.remove_observations_for_patient(int(patient_id))
        self.driver.get(self.patient_url)

        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located(GRAPH_CHART))

    def test_shows_message_when_no_obs(self):
        """
        Test that the No observation data available for patient message is
        shown on no obs being available
        """

        self.assertTrue(self.patient_page.has_no_patient_data(),
                        'No Observation Data Available message not found')
Exemplo n.º 3
0
    def test_gcs_obs(self):
        """
        Test that a GCS observation can be submitted
        """
        gcs_inputs = GCS_SCORE_15_DATA

        patients = self.patient_list_page.get_list_items()

        PatientPage(self.driver).select_patient(patients)
        PatientPage(self.driver).open_form(OPEN_OBS_MENU_GCS)
        PatientPage(self.driver).enter_obs_data(gcs_inputs)

        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located(CONFIRM_SUBMIT)
        )
        self.driver.find_element(*CONFIRM_SUBMIT).click()

        success = 'Successfully Submitted GCS Observation'
        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located((
                SUCCESSFUL_SUBMIT))
        )
        response = self.driver.find_element(*SUCCESSFUL_SUBMIT)
        self.assertEqual(success, response.text,
                         'GCS observation unsuccessful')
 def setUp(self):
     self.driver.get(MOB_LOGIN)
     self.login_page = LoginPage(self.driver)
     self.list_page = ListPage(self.driver)
     self.patient_page = PatientPage(self.driver)
     self.login_page.login(NURSE_USERNM1, NURSE_PWD1)
     self.list_page.go_to_patient_list()
     patients = self.list_page.get_list_items()
     patient_to_test = patients[0]
     self.patient_url = patient_to_test.get_attribute('href')
     self.driver.get(self.patient_url)
Exemplo n.º 5
0
    def setUp(self):
        self.driver.get(MOB_LOGIN)
        self.login_page = LoginPage(self.driver)
        self.list_page = ListPage(self.driver)
        self.patient_page = PatientPage(self.driver)
        self.login_page.login(NURSE_USERNM1, NURSE_PWD1)
        self.list_page.go_to_patient_list()
        patients = self.list_page.get_list_items()
        patient_to_test = patients[0]
        self.patient_url = patient_to_test.get_attribute('href')
        patient_id = self.patient_url.replace(PATIENT_PAGE, '')
        self.patient_page.remove_observations_for_patient(int(patient_id))
        self.driver.get(self.patient_url)

        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located(GRAPH_CHART))
    def test_shows_patient_data(self):
        """
        Test that a patient record shows data (graph/table) for the patient
        """
        patients = self.patient_list_page.get_list_items()

        PatientPage(self.driver).select_patient(patients)

        ui.WebDriverWait(self.driver, 1).until(
            ec.visibility_of_element_located(patient_page_locators.GRAPH_CHART)
        )

        patient_graph = self.driver.find_element(*
                                                 patient_page_locators
                                                 .GRAPH_CHART)

        self.assertEqual(patient_graph.is_displayed(), True, 'Graph not found')

        self.driver.find_element(*patient_page_locators
                                 .TABLE_TAB_BUTTON).click()

        ui.WebDriverWait(self.driver, 1).until(
            ec.visibility_of_element_located
            (patient_page_locators.TABLE_CONTAINER_TABLE))

        patient_table = self.driver.find_element(*
                                                 patient_page_locators
                                                 .TABLE_CONTAINER_TABLE)
        self.assertEqual(patient_table.is_displayed(), True, 'Table not found')
    def setUp(self):
        self.driver.get(MOB_LOGIN)
        self.login_page = LoginPage(self.driver)
        self.list_page = ListPage(self.driver)
        self.patient_page = PatientPage(self.driver)
        self.patient_page_graph = PatientPageGraphs(self.driver)

        risk_mapping = {
            'none': self.patient_page.add_no_risk_observation,
            'low': self.patient_page.add_low_risk_observation,
            'medium': self.patient_page.add_medium_risk_observation,
            'high': self.patient_page.add_high_risk_observation,
            '3in1': self.patient_page.add_three_in_one_observation
        }
        self.login_page.login(NURSE_USERNM1, NURSE_PWD1)
        self.list_page.go_to_patient_list()
        patients = self.list_page.get_list_items()
        patient_to_test = patients[0]
        patient_id = patient_to_test.get_attribute('href').replace(
            PATIENT_PAGE, '')

        self.patient_page.remove_observations_for_patient(int(patient_id))
        risk_mapping[self.risk](int(patient_id))
        self.driver.get(patient_to_test.get_attribute('href'))
        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located((By.CSS_SELECTOR, '#chart svg')))

        self.patient_page.change_to_table()
        obs_table = self.patient_page.get_obs_table()
        rows = self.patient_page.get_table_rows(obs_table)[1:]

        self.row_data = []
        for row in rows:
            self.row_data.append(self.patient_page.get_table_data(row))

        self.patient_page_graph.change_to_chart()

        # Focus Graphs
        focus_graphs = self.patient_page_graph.get_focus_graphs()
        self.assertEqual(len(focus_graphs), 5, 'Incorrect number of graphs')
        self.graph_list = []

        for graph in focus_graphs:
            self.graph_list.append(graph)

        self.graph_data = self.get_graph_data()
 def open_clinical(self, task_id, patient_list_page):
     """
     Create a clinical notification for a patient, and then open it
     """
     PatientPage(self.driver).add_medium_risk_observation(int(task_id))
     patient_list_page.go_to_task_list()
     tasks = patient_list_page.get_list_items()
     clinical_task = tasks[0]
     clinical_task.click()
    def test_blood_sugar_obs(self):
        """
        Test that a blood sugar observation can be submitted
        """
        blood_sugar_input = BLOOD_SUGAR_DATA

        patients = self.patient_list_page.get_list_items()

        PatientPage(self.driver).select_patient(patients)
        PatientPage(self.driver).open_form(OPEN_OBS_MENU_BLOOD_SUGAR)
        PatientPage(self.driver).enter_obs_data(blood_sugar_input)

        success = 'Successfully Submitted Blood Sugar Observation'
        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located((SUCCESSFUL_SUBMIT)))
        response = self.driver.find_element(*SUCCESSFUL_SUBMIT)
        self.assertEqual(success, response.text,
                         'Blood sugar observation unsuccessful')
Exemplo n.º 10
0
    def test_pbp_obs(self):
        """
        Test that a postural blood pressure observation can be submitted
        """
        postural_pressure_inputs = POSTURAL_BLOOD_PRESSURE_DATA

        patients = self.patient_list_page.get_list_items()

        PatientPage(self.driver).select_patient(patients)
        PatientPage(self.driver).open_form(OPEN_OBS_MENU_POSTURAL_PRESSURE)
        PatientPage(self.driver).enter_obs_data(postural_pressure_inputs)

        success = 'Successfully Submitted Postural Blood Pressure Observation'
        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located((SUCCESSFUL_SUBMIT)))
        response = self.driver.find_element(*SUCCESSFUL_SUBMIT)
        self.assertEqual(success, response.text,
                         'Postural blood pressure observation unsuccessful')
Exemplo n.º 11
0
    def test_bristol_stool_obs(self):
        """
        Test that a Bristol Stool Scale observation can be submitted
        """
        bristol_stool_inputs = BRISTOL_STOOL_DATA

        patients = self.patient_list_page.get_list_items()

        PatientPage(self.driver).select_patient(patients)
        PatientPage(self.driver).open_form(OPEN_OBS_MENU_BS_SCALE)
        PatientPage(self.driver).enter_obs_data(bristol_stool_inputs)

        success = 'Successfully Submitted Bristol Stool Scale Observation'
        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located((SUCCESSFUL_SUBMIT)))
        response = self.driver.find_element(*SUCCESSFUL_SUBMIT)
        self.assertEqual(success, response.text,
                         'Bristol Stool Scale observation unsuccessful')
Exemplo n.º 12
0
    def test_height_obs(self):
        """
        Test that a height observation can be submitted
        """
        height_input = HEIGHT_DATA

        patients = self.patient_list_page.get_list_items()

        PatientPage(self.driver).select_patient(patients)
        PatientPage(self.driver).open_form(OPEN_OBS_MENU_HEIGHT)
        PatientPage(self.driver).enter_obs_data(height_input)

        success = 'Successfully Submitted Height Observation'
        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located((SUCCESSFUL_SUBMIT)))

        response = self.driver.find_element(*SUCCESSFUL_SUBMIT)
        self.assertEqual(success, response.text,
                         'Height observation unsuccessful')
 def setUp(self):
     self.driver.get(MOB_LOGIN)
     self.login_page = LoginPage(self.driver)
     self.list_page = ListPage(self.driver)
     self.patient_page = PatientPage(self.driver)
     self.login_page.login(NURSE_USERNM1, NURSE_PWD1)
     self.list_page.go_to_patient_list()
     patients = self.list_page.get_list_items()
     patient_to_test = patients[0]
     self.patient_url = patient_to_test.get_attribute('href')
     self.driver.get(self.patient_url)
    def test_up_trend(self):
        """
        Test that the trend is increased after submitting a low risk ob,
        followed by a high risk ob
        """
        tasks = self.patient_list_page.get_list_items()
        patient_to_test = tasks[0]
        task_id = patient_to_test.get_attribute('href').replace(
            PATIENT_PAGE, ''
        )

        PatientPage(self.driver).add_low_risk_observation(int(task_id))
        PatientPage(self.driver).add_high_risk_observation(int(task_id))
        self.driver.refresh()

        patient_trend = self.driver.find_element(
            *list_page_locators.LIST_ITEM_PATIENT_TREND
        )

        self.assertEqual(patient_trend.get_attribute('class'), 'icon-up-arrow',
                         'Incorrect trend')
    def test_same_trend(self):
        """
        Test that the trend stays the same after submitting two of the same ob
        """
        tasks = self.patient_list_page.get_list_items()
        patient_to_test = tasks[0]
        task_id = patient_to_test.get_attribute('href').replace(
            PATIENT_PAGE, ''
        )

        PatientPage(self.driver).add_medium_risk_observation(int(task_id))
        PatientPage(self.driver).add_medium_risk_observation(int(task_id))
        self.driver.refresh()

        patient_trend = self.driver.find_element(
            *list_page_locators.LIST_ITEM_PATIENT_TREND
        )

        self.assertEqual(patient_trend.get_attribute('class'),
                         'icon-same-arrow',
                         'Incorrect trend')
    def test_news_error(self):
        """
        Test that entering incorrect data into a NEWS ob will cause an error
        """
        incorrect_score = INCORRECT_EWS_DATA

        patients = self.patient_list_page.get_list_items()

        PatientPage(self.driver).select_patient(patients)
        PatientPage(self.driver).open_form(OPEN_OBS_MENU_NEWS_ITEM)
        PatientPage(self.driver).enter_obs_data(incorrect_score)

        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located(TASK_FORM_INVALID_SUBMIT)
        )

        response = self.driver.find_element(
            *TASK_FORM_INVALID_SUBMIT).is_displayed()

        self.assertEqual(response, True,
                         'Incorrect error handling on NEWS form')
Exemplo n.º 17
0
    def test_news_obs(self):
        """
        Test that a NEWS observation can be submitted
        """
        score = NO_RISK_EWS_DATA

        patients = self.patient_list_page.get_list_items()

        PatientPage(self.driver).select_patient(patients)
        PatientPage(self.driver).open_form(OPEN_OBS_MENU_NEWS_ITEM)
        PatientPage(self.driver).enter_obs_data(score)

        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located(CONFIRM_SUBMIT))
        self.driver.find_element(*CONFIRM_SUBMIT).click()

        success = 'Successfully Submitted NEWS Observation'
        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located((SUCCESSFUL_SUBMIT)))
        response = self.driver.find_element(*SUCCESSFUL_SUBMIT)
        self.assertEqual(success, response.text,
                         'NEWS observation unsuccessful')
def submit_observation(context, clinical_risk):

    risk_dict = {
        'no': NO_RISK_EWS_DATA,
        'a low': LOW_RISK_SCORE_1_EWS_DATA,
        'a medium': MEDIUM_RISK_SCORE_5_EWS_DATA,
        'a high': HIGH_RISK_SCORE_7_EWS_DATA
    }
    risk_score = risk_dict.get(clinical_risk)
    if not risk_score:
        raise ValueError('No risk score available')

    page_confirm = PageConfirm(context.browser)
    patient_list_page = ListPage(context.browser)

    patient_list_page.go_to_patient_list()
    assert(page_confirm.is_patient_list_page())
    patients = patient_list_page.get_list_items()

    PatientPage(context.browser).select_patient(patients)
    PatientPage(context.browser).open_form(OPEN_OBS_MENU_NEWS_ITEM)
    ObservationFormPage(context.browser).enter_obs_data(risk_score)
Exemplo n.º 19
0
    def test_medium_risk_obs(self):
        """
        Test that an 'urgently inform medical team' task
        is triggered after a medium NEWS score
        """
        medium_score = MEDIUM_RISK_SCORE_3_THREE_IN_ONE_EWS_DATA

        patients = self.patient_list_page.get_list_items()

        PatientPage(self.driver).select_patient(patients)
        PatientPage(self.driver).open_form(OPEN_OBS_MENU_NEWS_ITEM)
        PatientPage(self.driver).enter_obs_data(medium_score)

        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located(CONFIRM_SUBMIT))

        self.driver.find_element(*CONFIRM_SUBMIT).click()

        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located(RELATED_TASK))
        response = self.driver.find_element(*RELATED_TASK)

        self.assertEqual(MEDIUM_SCORE_RESPONSE, response.text,
                         'Incorrect triggered action for medium risk ob')
    def test_low_risk_obs(self):
        """
        Test that an 'assess patient' task is triggered after a low NEWS score
        """
        low_score = LOW_RISK_SCORE_1_EWS_DATA

        patients = self.patient_list_page.get_list_items()

        PatientPage(self.driver).select_patient(patients)
        PatientPage(self.driver).open_form(OPEN_OBS_MENU_NEWS_ITEM)
        PatientPage(self.driver).enter_obs_data(low_score)

        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located(CONFIRM_SUBMIT)
        )

        self.driver.find_element(*CONFIRM_SUBMIT).click()

        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located(RELATED_TASK)
        )
        response = self.driver.find_element(*RELATED_TASK)
        self.assertEqual(LOW_SCORE_RESPONSE, response.text,
                         'Incorrect triggered action for low risk ob')
    def setUp(self):
        self.driver.get(MOB_LOGIN)
        self.login_page = LoginPage(self.driver)
        self.list_page = ListPage(self.driver)
        self.patient_page = PatientPage(self.driver)
        self.patient_page_graph = PatientPageGraphs(self.driver)

        risk_mapping = {
            'none': self.patient_page.add_no_risk_observation,
            'low': self.patient_page.add_low_risk_observation,
            'medium':
                self.patient_page.add_medium_risk_observation,
            'high': self.patient_page.add_high_risk_observation,
            '3in1': self.patient_page.add_three_in_one_observation
        }
        self.login_page.login(NURSE_USERNM1, NURSE_PWD1)
        self.list_page.go_to_patient_list()
        patients = self.list_page.get_list_items()
        patient_to_test = patients[0]
        patient_id = patient_to_test.get_attribute('href').replace(
            PATIENT_PAGE, ''
        )

        self.patient_page.remove_observations_for_patient(int(patient_id))
        risk_mapping[self.risk](int(patient_id))
        self.driver.get(patient_to_test.get_attribute('href'))
        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located((By.CSS_SELECTOR, '#chart svg')))

        self.patient_page.change_to_table()
        obs_table = self.patient_page.get_obs_table()
        rows = self.patient_page.get_table_rows(obs_table)[1:]

        self.row_data = []
        for row in rows:
            self.row_data.append(self.patient_page.get_table_data(row))

        self.patient_page_graph.change_to_chart()

        # Focus Graphs
        focus_graphs = self.patient_page_graph.get_focus_graphs()
        self.assertEqual(len(focus_graphs), 5, 'Incorrect number of graphs')
        self.graph_list = []

        for graph in focus_graphs:
            self.graph_list.append(graph)

        self.graph_data = self.get_graph_data()
    def setUp(self):
        self.driver.get(MOB_LOGIN)
        self.login_page = LoginPage(self.driver)
        self.list_page = ListPage(self.driver)
        self.patient_page = PatientPage(self.driver)
        self.login_page.login(NURSE_USERNM1, NURSE_PWD1)
        self.list_page.go_to_patient_list()
        patients = self.list_page.get_list_items()
        patient_to_test = patients[0]
        self.patient_url = patient_to_test.get_attribute('href')
        patient_id = self.patient_url.replace(
            PATIENT_PAGE, ''
        )
        self.patient_page.remove_observations_for_patient(int(patient_id))
        self.driver.get(self.patient_url)

        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located(GRAPH_CHART)
        )
class TestVisualisationCommon(TestCommon):
    """
    Setup a session and ensure that patient data displays correctly
    """
    risk = 'none'

    def setUp(self):
        self.driver.get(MOB_LOGIN)
        self.login_page = LoginPage(self.driver)
        self.list_page = ListPage(self.driver)
        self.patient_page = PatientPage(self.driver)
        self.patient_page_graph = PatientPageGraphs(self.driver)

        risk_mapping = {
            'none': self.patient_page.add_no_risk_observation,
            'low': self.patient_page.add_low_risk_observation,
            'medium': self.patient_page.add_medium_risk_observation,
            'high': self.patient_page.add_high_risk_observation,
            '3in1': self.patient_page.add_three_in_one_observation
        }
        self.login_page.login(NURSE_USERNM1, NURSE_PWD1)
        self.list_page.go_to_patient_list()
        patients = self.list_page.get_list_items()
        patient_to_test = patients[0]
        patient_id = patient_to_test.get_attribute('href').replace(
            PATIENT_PAGE, '')

        self.patient_page.remove_observations_for_patient(int(patient_id))
        risk_mapping[self.risk](int(patient_id))
        self.driver.get(patient_to_test.get_attribute('href'))
        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located((By.CSS_SELECTOR, '#chart svg')))

        self.patient_page.change_to_table()
        obs_table = self.patient_page.get_obs_table()
        rows = self.patient_page.get_table_rows(obs_table)[1:]

        self.row_data = []
        for row in rows:
            self.row_data.append(self.patient_page.get_table_data(row))

        self.patient_page_graph.change_to_chart()

        # Focus Graphs
        focus_graphs = self.patient_page_graph.get_focus_graphs()
        self.assertEqual(len(focus_graphs), 5, 'Incorrect number of graphs')
        self.graph_list = []

        for graph in focus_graphs:
            self.graph_list.append(graph)

        self.graph_data = self.get_graph_data()

    def get_graph_data(self):
        """
        Helper function to get an dict of the focus chart data
        :return: dict of strings from focus chart data
        """
        rr_mes = \
            self.patient_page_graph.get_graph_measurement(self.graph_list[0])
        os_mes = \
            self.patient_page_graph.get_graph_measurement(self.graph_list[1])
        bt_mes = \
            self.patient_page_graph.get_graph_measurement(self.graph_list[2])
        hr_mes = \
            self.patient_page_graph.get_graph_measurement(self.graph_list[3])
        bp_mes = \
            self.patient_page_graph.get_graph_measurements(self.graph_list[4])

        return {
            'resp_rate': rr_mes,
            'oxy_sat': os_mes,
            'body_temp': bt_mes,
            'pulse_rate': hr_mes,
            'blood_press': bp_mes
        }

    def get_focus_chart_labels(self):
        """
        Helper function to get an dict of the focus chart labels
        :return: dict of strings from focus chart labels
        """
        rr_label = self.patient_page_graph.get_graph_label(self.graph_list[0])
        os_label = self.patient_page_graph.get_graph_label(self.graph_list[1])
        bt_label = self.patient_page_graph.get_graph_label(self.graph_list[2])
        hr_label = self.patient_page_graph.get_graph_label(self.graph_list[3])
        bp_label = self.patient_page_graph.get_graph_label(self.graph_list[4])
        return {
            'resp_rate': rr_label,
            'oxy_sat': os_label,
            'body_temp': bt_label,
            'pulse_rate': hr_label,
            'blood_press': bp_label
        }

    def get_tabular_values_value(self, row, column):
        """
        Helper function to get the value from a row and column in the tabular
        values table
        :param row: Row to get value from
        :param column: Column to get value from
        :return: String from row/column combo
        """
        tabular_values_table = self.patient_page.get_tabular_values()

        tabular_values_rows = \
            self.patient_page.get_table_rows(tabular_values_table)

        tabular_values = \
            self.patient_page.get_table_data(tabular_values_rows[row])
        self.assertEqual(len(tabular_values), 4, 'Incorrect number of data')
        return tabular_values[column]
    def test_take_task_news_obs(self):
        """
        Submit adhoc observation which creates News observation task
        and Take task NEWS Observation from task list, submit news score
        """

        # Enter high risk observation to create News Observation task in task
        # list
        self.patient_list_page.go_to_patient_list()
        high_score = HIGH_RISK_SCORE_9_EWS_DATA
        no_risk = NO_RISK_EWS_DATA
        news_task = []
        success = 'Successfully Submitted NEWS Observation'

        patients = self.patient_list_page.get_list_items()

        PatientPage(self.driver).select_patient(patients)
        PatientPage(self.driver).open_form(OPEN_OBS_MENU_NEWS_ITEM)
        PatientPage(self.driver).enter_obs_data(high_score)

        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located(CONFIRM_SUBMIT)
        )
        self.driver.find_element(*CONFIRM_SUBMIT).click()

        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located((
                SUCCESSFUL_SUBMIT))
        )
        response = self.driver.find_element(*SUCCESSFUL_SUBMIT)
        self.assertEqual(success, response.text,
                         'NEWS observation unsuccessful')

        self.driver.find_element(*GO_TO_MY_TASK).click()

        # Click on the first news score task from Task list
        self.task_list_page.go_to_task_list()

        self.driver.refresh()
        for task in self.task_list_page.get_list_task():
            # print(task.text)
            if task.text == 'NEWS Observation':
                news_task.append(task)
        news_task[0].click()

        # enter low risk observation
        PatientPage(self.driver).enter_obs_data(no_risk)

        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located(CONFIRM_SUBMIT)
        )

        self.driver.find_element(*CONFIRM_SUBMIT).click()

        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located((
                SUCCESSFUL_SUBMIT))
        )
        response = self.driver.find_element(*SUCCESSFUL_SUBMIT)
        self.assertEqual(success, response.text,
                         'NEWS observation unsuccessful')
class TestPatientPageAdhocObs(TestCommon):
    """
    Test to ensure that the adhoc observation work correctly
    """
    def setUp(self):
        self.driver.get(MOB_LOGIN)
        self.login_page = LoginPage(self.driver)
        self.list_page = ListPage(self.driver)
        self.patient_page = PatientPage(self.driver)
        self.login_page.login(NURSE_USERNM1, NURSE_PWD1)
        self.list_page.go_to_patient_list()
        patients = self.list_page.get_list_items()
        patient_to_test = patients[0]
        self.patient_url = patient_to_test.get_attribute('href')
        self.driver.get(self.patient_url)

    def test_can_logout(self):
        """
        Test that the title of the login page is Open-eObs
        """
        self.patient_page.logout()
        self.assertTrue(
            PageConfirm(self.driver).is_login_page(),
            'Did not get to the logout page correctly')

    def test_can_go_to_task_list_page(self):
        """
        Test that can go to task list page
        """
        self.patient_page.go_to_task_list()
        self.assertTrue(
            PageConfirm(self.driver).is_task_list_page(),
            'Did not get to the task list page correctly')

    def test_go_to_patient_list_page(self):
        """
        Test that can go to the patient list page
        """
        self.patient_page.go_to_patient_list()
        self.assertTrue(
            PageConfirm(self.driver).is_patient_list_page(),
            'Did not get to patient list page correctly')

    def test_can_go_to_stand_in_page(self):
        """
        Test that can navigate to the stand in page
        """
        self.patient_page.go_to_standin()
        self.assertTrue(
            PageConfirm(self.driver).is_stand_in_page(),
            'Did not get to stand in page correctly')

    def test_can_carry_out_barcode_scan(self):
        """
        Test that can do a barcode scan
        """
        task_id = self.patient_url.replace(PATIENT_PAGE, '')
        id_to_use = self.patient_page.patient_scan_helper(int(task_id))
        self.patient_page.do_barcode_scan(id_to_use['other_identifier'])

    def test_can_open_adhoc_menu(self):
        """
        Test that can see and open a menu to select an adhoc observation to
        carry out for the patient
        """
        menu = self.patient_page.open_adhoc_obs_menu()
        menu_title = menu.find_element(*OPEN_OBS_MENU_TITLE)
        observations = menu.find_elements(*OPEN_OBS_MENU_LIST_ITEMS)
        self.assertGreater(len(observations), 0,
                           'Incorrect number of adhoc obs')
        task_id = self.patient_url.replace(PATIENT_PAGE, '')
        data = self.patient_page.patient_helper(int(task_id))[0]
        patient_name = data['full_name']
        self.assertEqual(menu_title.text,
                         'Pick an observation for {0}'.format(patient_name),
                         'Incorrect menu title')

    def test_adhoc_news_ob_deadline(self):
        """
        Test that the NEWS observation in the adhoc observation list shows
        the deadline to the next scheduled NEWS observation
        """
        menu = self.patient_page.open_adhoc_obs_menu()
        news_item = menu.find_element(*OPEN_OBS_MENU_NEWS_ITEM)
        deadline = news_item.find_element(*OPEN_OBS_MENU_NEWS_DEADLINE)
        task_id = self.patient_url.replace(PATIENT_PAGE, '')
        data = self.patient_page.patient_helper(int(task_id))[0]
        ews_deadline = data['next_ews_time']
        self.assertEqual(deadline.text, ews_deadline,
                         'Incorrect NEWS deadline')
class TestPatientPageAdhocObs(TestCommon):
    """
    Test to ensure that the adhoc observation work correctly
    """

    def setUp(self):
        self.driver.get(MOB_LOGIN)
        self.login_page = LoginPage(self.driver)
        self.list_page = ListPage(self.driver)
        self.patient_page = PatientPage(self.driver)
        self.login_page.login(NURSE_USERNM1, NURSE_PWD1)
        self.list_page.go_to_patient_list()
        patients = self.list_page.get_list_items()
        patient_to_test = patients[0]
        self.patient_url = patient_to_test.get_attribute('href')
        self.driver.get(self.patient_url)

    def test_can_logout(self):
        """
        Test that the title of the login page is Open-eObs
        """
        self.patient_page.logout()
        self.assertTrue(PageConfirm(self.driver).is_login_page(),
                        'Did not get to the logout page correctly')

    def test_can_go_to_task_list_page(self):
        """
        Test that can go to task list page
        """
        self.patient_page.go_to_task_list()
        self.assertTrue(PageConfirm(self.driver).is_task_list_page(),
                        'Did not get to the task list page correctly')

    def test_go_to_patient_list_page(self):
        """
        Test that can go to the patient list page
        """
        self.patient_page.go_to_patient_list()
        self.assertTrue(PageConfirm(self.driver).is_patient_list_page(),
                        'Did not get to patient list page correctly')

    def test_can_go_to_stand_in_page(self):
        """
        Test that can navigate to the stand in page
        """
        self.patient_page.go_to_standin()
        self.assertTrue(PageConfirm(self.driver).is_stand_in_page(),
                        'Did not get to stand in page correctly')

    def test_can_carry_out_barcode_scan(self):
        """
        Test that can do a barcode scan
        """
        task_id = self.patient_url.replace(
            PATIENT_PAGE, ''
        )
        id_to_use = self.patient_page.patient_scan_helper(int(task_id))
        self.patient_page.do_barcode_scan(id_to_use['other_identifier'])

    def test_can_open_adhoc_menu(self):
        """
        Test that can see and open a menu to select an adhoc observation to
        carry out for the patient
        """
        menu = self.patient_page.open_adhoc_obs_menu()
        menu_title = menu.find_element(
            *OPEN_OBS_MENU_TITLE
        )
        observations = menu.find_elements(
            *OPEN_OBS_MENU_LIST_ITEMS
        )
        self.assertGreater(len(observations), 0,
                           'Incorrect number of adhoc obs')
        task_id = self.patient_url.replace(
            PATIENT_PAGE, ''
        )
        data = self.patient_page.patient_helper(int(task_id))[0]
        patient_name = data['full_name']
        self.assertEqual(menu_title.text,
                         'Pick an observation for {0}'.format(patient_name),
                         'Incorrect menu title')

    def test_adhoc_news_ob_deadline(self):
        """
        Test that the NEWS observation in the adhoc observation list shows
        the deadline to the next scheduled NEWS observation
        """
        menu = self.patient_page.open_adhoc_obs_menu()
        news_item = menu.find_element(
            *OPEN_OBS_MENU_NEWS_ITEM
        )
        deadline = news_item.find_element(
            *OPEN_OBS_MENU_NEWS_DEADLINE
        )
        task_id = self.patient_url.replace(
            PATIENT_PAGE, ''
        )
        data = self.patient_page.patient_helper(int(task_id))[0]
        ews_deadline = data['next_ews_time']
        self.assertEqual(deadline.text, ews_deadline,
                         'Incorrect NEWS deadline')
class TestVisualisationCommon(TestCommon):
    """
    Setup a session and ensure that patient data displays correctly
    """
    risk = 'none'

    def setUp(self):
        self.driver.get(MOB_LOGIN)
        self.login_page = LoginPage(self.driver)
        self.list_page = ListPage(self.driver)
        self.patient_page = PatientPage(self.driver)
        self.patient_page_graph = PatientPageGraphs(self.driver)

        risk_mapping = {
            'none': self.patient_page.add_no_risk_observation,
            'low': self.patient_page.add_low_risk_observation,
            'medium':
                self.patient_page.add_medium_risk_observation,
            'high': self.patient_page.add_high_risk_observation,
            '3in1': self.patient_page.add_three_in_one_observation
        }
        self.login_page.login(NURSE_USERNM1, NURSE_PWD1)
        self.list_page.go_to_patient_list()
        patients = self.list_page.get_list_items()
        patient_to_test = patients[0]
        patient_id = patient_to_test.get_attribute('href').replace(
            PATIENT_PAGE, ''
        )

        self.patient_page.remove_observations_for_patient(int(patient_id))
        risk_mapping[self.risk](int(patient_id))
        self.driver.get(patient_to_test.get_attribute('href'))
        ui.WebDriverWait(self.driver, 5).until(
            ec.visibility_of_element_located((By.CSS_SELECTOR, '#chart svg')))

        self.patient_page.change_to_table()
        obs_table = self.patient_page.get_obs_table()
        rows = self.patient_page.get_table_rows(obs_table)[1:]

        self.row_data = []
        for row in rows:
            self.row_data.append(self.patient_page.get_table_data(row))

        self.patient_page_graph.change_to_chart()

        # Focus Graphs
        focus_graphs = self.patient_page_graph.get_focus_graphs()
        self.assertEqual(len(focus_graphs), 5, 'Incorrect number of graphs')
        self.graph_list = []

        for graph in focus_graphs:
            self.graph_list.append(graph)

        self.graph_data = self.get_graph_data()

    def get_graph_data(self):
        """
        Helper function to get an dict of the focus chart data
        :return: dict of strings from focus chart data
        """
        rr_mes = \
            self.patient_page_graph.get_graph_measurement(self.graph_list[0])
        os_mes = \
            self.patient_page_graph.get_graph_measurement(self.graph_list[1])
        bt_mes = \
            self.patient_page_graph.get_graph_measurement(self.graph_list[2])
        hr_mes = \
            self.patient_page_graph.get_graph_measurement(self.graph_list[3])
        bp_mes = \
            self.patient_page_graph.get_graph_measurements(self.graph_list[4])

        return {
            'resp_rate': rr_mes,
            'oxy_sat': os_mes,
            'body_temp': bt_mes,
            'pulse_rate': hr_mes,
            'blood_press': bp_mes
        }

    def get_focus_chart_labels(self):
        """
        Helper function to get an dict of the focus chart labels
        :return: dict of strings from focus chart labels
        """
        rr_label = self.patient_page_graph.get_graph_label(self.graph_list[0])
        os_label = self.patient_page_graph.get_graph_label(self.graph_list[1])
        bt_label = self.patient_page_graph.get_graph_label(self.graph_list[2])
        hr_label = self.patient_page_graph.get_graph_label(self.graph_list[3])
        bp_label = self.patient_page_graph.get_graph_label(self.graph_list[4])
        return {
            'resp_rate': rr_label,
            'oxy_sat': os_label,
            'body_temp': bt_label,
            'pulse_rate': hr_label,
            'blood_press': bp_label
        }

    def get_tabular_values_value(self, row, column):
        """
        Helper function to get the value from a row and column in the tabular
        values table
        :param row: Row to get value from
        :param column: Column to get value from
        :return: String from row/column combo
        """
        tabular_values_table = self.patient_page.get_tabular_values()

        tabular_values_rows = \
            self.patient_page.get_table_rows(tabular_values_table)

        tabular_values = \
            self.patient_page.get_table_data(tabular_values_rows[row])
        self.assertEqual(len(tabular_values), 4, 'Incorrect number of data')
        return tabular_values[column]