예제 #1
0
 def __init__(self):
     super().__init__()
     self.asserter = Asserter()
     self.db_logger = DBLoggerFactory.logger
     self.id = TestDetails.test_id
     self.uuid = TestDetails.test_uuid
     self.qhandler = QueryHandler()
예제 #2
0
 def __init__(self):
     super().__init__()
     self.asserter = Asserter()
     self.db_logger = DBLoggerFactory.logger
     self.id = TestDetails.test_id
     self.uuid = TestDetails.test_uuid
     self.card = Card()
     self.env = Environment()
예제 #3
0
    def __init__(self):
        self._get_env_details()
        self.req_session = requests.session()
        self.db_logger = DBLoggerFactory.logger
        self.asserter = Asserter()

        self.id = TestDetails.test_id
        self.uuid = TestDetails.test_uuid
        self.scope = TestDetails.scope
예제 #4
0
    def __init__(self):
        self.env = Environment()
        self.cert = Cert().pve_cert

        self.request = Request()
        self.asserter = Asserter()
        self.payload_gen = PayloadGen()
        self.parse_wrapper = XmlParseWrapper()
        self.db_logger = DBLoggerFactory().logger

        self.id = TestDetails.test_id
        self.uuid = TestDetails.test_uuid
        self.scope = TestDetails.scope
예제 #5
0
class PRMVerify:
    def __init__(self):
        super().__init__()
        self.asserter = Asserter()
        self.db_logger = DBLoggerFactory.logger
        self.id = TestDetails.test_id
        self.uuid = TestDetails.test_uuid
        self.qhandler = QueryHandler()

    def project_details(self, project_id, dct_expected):
        self.remarks = '\n Inside feature class: %s method: %s \n' % (
            core_helper.get_invoking_method_name())
        self.step_desc = 'Verifying Project Details after Integration'
        self.step_input = 'Expected values: %s' % dct_expected

        dct_actual = self.qhandler.select_project_details(project_id)

        self.status, remarks = self.asserter.verify(dct_actual,
                                                    expected=dct_expected)
        self.remarks += remarks

        self.db_logger.log_into_steps(self)
        assert self.status

    def verify_lk_ext_id_in_prm(self, project_key):
        scode = helper.get_scode(project_key)
        external_id = self.qhandler.select_external_id(scode)

        self.status = False
        self.step_input = str(external_id)
        self.step_desc = 'Leankit External ID verification in PRM'
        self.remarks = '\n Inside class: %s method: %s \n' % core_helper.get_method_class_names(
        )

        if external_id:
            self.status = True
            self.remarks += 'Leankit External Id is present in PRM'
        else:
            self.remarks += 'Leankit External Id is not present in PRM'

        self.db_logger.log_into_steps(self)
        assert self.status
        return external_id

    def project_description(self, project_id, expected_description):
        self.remarks = '\n Inside feature class: %s method: %s \n' % (
            core_helper.get_invoking_method_name())
        self.step_desc = 'Verifying Project Description after Integration'
        self.step_input = 'Expected Description: %s' % expected_description
        actual_description = ''

        description = self.qhandler.select_project_description(project_id)
        # Logic to concatenate the work description as they are stored in multiple rows when they are more than 1000 characters
        if description:
            desc_generator = (''.join(row[0]) for row in description)
            actual_description = ''.join(desc_generator)

        self.status, remarks = self.asserter.verify(
            actual_description,
            expected=expected_description,
            condition='is_equal_to_ignoring_case')
        self.remarks += remarks

        self.db_logger.log_into_steps(self)
        assert self.status

    def project_name(self, project_id, expected_name):
        self.remarks = '\n Inside feature class: %s method: %s \n' % (
            core_helper.get_invoking_method_name())
        self.step_desc = 'Verifying Project Name after Integration'
        self.step_input = 'Expected Name: %s' % expected_name

        if project_id:
            actual_name = self.qhandler.select_project_name(project_id)

            self.status, remarks = self.asserter.verify(
                actual_name,
                expected=expected_name,
                condition='is_equal_to_ignoring_case')
            self.remarks += remarks
        else:
            self.status = False
            self.remarks += 'Invalid Project Id : {}'.format(project_id)

        self.db_logger.log_into_steps(self)
        assert self.status
예제 #6
0
class Card:
    tbl_name = 'LK_Card'

    def __init__(self):
        self._get_env_details()
        self.req_session = requests.session()
        self.db_logger = DBLoggerFactory.logger
        self.asserter = Asserter()

        self.id = TestDetails.test_id
        self.uuid = TestDetails.test_uuid
        self.scope = TestDetails.scope

    def _get_env_details(self):
        env = Environment()
        self.protocol = env.external_env.protocol
        self.host_name = env.external_env.name

        lk_json_const = ConstantsReader.lk_json_const
        self.headers = {"Authorization": lk_json_const['token']}

    def create(self, payload):
        create_url = CREATE_URL.format(protocol=self.protocol,
                                       host_name=self.host_name)
        response = self.req_session.post(url=create_url,
                                         json=payload,
                                         headers=self.headers)
        card_id = self.verify_create_update(response, payload)

        DataStore.insert(Card.tbl_name,
                         id=card_id,
                         name=payload['title'],
                         scope=self.scope,
                         test_id=self.id,
                         **payload)
        print("*****LK_CARD TABLE*****\n", DataStore.read_all('LK_Card'))
        return card_id

    def update(self, card_id, payload):
        update_url = UPDATE_READ_DEL_URL.format(protocol=self.protocol,
                                                host_name=self.host_name,
                                                card_id=card_id)
        response = self.req_session.patch(update_url,
                                          json=payload,
                                          headers=self.headers)

        expected_dct = {}
        for dct in payload:
            expected_key = dct['path'].split('/')[-1]
            expected_value = dct['value']
            expected_dct[expected_key] = expected_value

        self.verify_create_update(response, expected_dct)

        if 'title' in expected_dct:
            dct_update_ds = {'name': expected_dct['title']}
            DataStore.update(Card.tbl_name, dct_update_ds, id=card_id)
        else:
            DataStore.update(Card.tbl_name, expected_dct, id=card_id)

        print("*****LK_CARD TABLE*****\n", DataStore.read_all('LK_Card'))

    def move(self, card_id, payload):
        url = MOVE_URL.format(protocol=self.protocol, host_name=self.host_name)
        response = self.req_session.post(url,
                                         json=payload,
                                         headers=self.headers)

        dct_expected = payload['destination']

        self.verify_move(card_id, response, dct_expected)
        DataStore.update(Card.tbl_name, dct_expected, id=card_id)
        print("*****LK_CARD TABLE*****\n", DataStore.read_all('LK_Card'))

    def read(self, artifact_id):
        read_url = UPDATE_READ_DEL_URL.format(protocol=self.protocol,
                                              host_name=self.host_name,
                                              card_id=artifact_id)
        response = self.req_session.get(read_url, headers=self.headers)
        return response

    def delete(self, artifact_id):
        delete_url = UPDATE_READ_DEL_URL.format(protocol=self.protocol,
                                                host_name=self.host_name,
                                                card_id=artifact_id)
        self.req_session.delete(delete_url, headers=self.headers)
        self.verify_delete(artifact_id)
        DataStore.delete(Card.tbl_name, id=artifact_id)
        # On explicit deletion of a card, corresponding external_id column should be removed in PRM_Project Table
        DataStore.delete_column('PRM_Project',
                                'external_id',
                                external_id=artifact_id)
        print("*****LK_CARD TABLE*****\n", DataStore.read_all('LK_Card'))
        print("*****PRM_PROJECT TABLE AFTER EXTERNAL_ID POP UP*****\n",
              DataStore.read_all('PRM_Project'))

    def verify_create_update(self, response, dct_expected):
        self.status = False
        self.step_desc = 'Leankit Card create/update verification'
        self.remarks = '\n Inside feature class: %s method: %s \n' % (
            core_helper.get_invoking_method_name())
        self.step_input = 'Expected response is {}'.format(dct_expected)

        card_id = None

        if response.status_code in (200, 201):
            card_id = response.json().get('id')
            read_resp = self.read(card_id)
            if read_resp.status_code == 200:
                dct_expected, dct_actual = self.construct_expected_actual_dct(
                    dct_expected, read_resp)
                self.status, remarks = self.asserter.verify(
                    dct_actual, expected=dct_expected)
                self.remarks += remarks
            else:
                self.remarks += "Read Response failed with status code: {0} and response: {1}".format(
                    read_resp.status_code, read_resp.text)
        else:
            self.remarks += "Card Creation/update failed with status code: {0} and response: {1}".format(
                response.status_code, response.text)

        self.db_logger.log_into_steps(self)
        assert self.status, self.remarks
        return card_id

    def verify_move(self, card_id, response, dct_expected):
        self.status = False
        self.step_desc = 'Leankit Card Move verification'
        self.remarks = '\n Inside feature class: %s method: %s \n' % (
            core_helper.get_invoking_method_name())
        self.step_input = 'Input value card_id: {0}'.format(card_id)

        if response.status_code == 200:
            read_resp = self.read(card_id)
            if read_resp.status_code == 200:
                dct_expected, dct_actual = self.construct_expected_actual_dct(
                    dct_expected, read_resp)
                self.status, remarks = self.asserter.verify(
                    dct_actual, expected=dct_expected)
                self.remarks += remarks
            else:
                self.remarks += "Read Response failed with status code: {0} and response: {1}".format(
                    read_resp.status_code, read_resp.text)
        else:
            self.remarks += "Card Move failed with status code: {0} and response: {1}".format(
                response.status_code, response.text)

        self.db_logger.log_into_steps(self)
        assert self.status, self.remarks
        return card_id

    def verify_delete(self, card_id):
        self.status = False
        self.step_desc = 'Leankit Card delete verification'
        self.remarks = '\n Inside feature class: %s method: %s \n' % (
            core_helper.get_invoking_method_name())
        self.step_input = 'Input value {}'.format(card_id)

        read_resp = self.read(card_id)

        if read_resp.status_code == 404:
            expected_msg = 'Not found.'
            actual_msg = read_resp.json()['message']

            self.status, remarks = self.asserter.verify(
                actual_msg, expected=expected_msg, condition='is_equal_to')
            self.remarks += remarks
        else:
            self.remarks += 'Card is not deleted'

        self.db_logger.log_into_steps(self)
        assert self.status, self.remarks

    def construct_expected_actual_dct(self, dct_expected, read_resp):
        if 'connections' in dct_expected:
            exp_parent_card_id = dct_expected['connections']['parents'][0]
            dct_expected.pop('connections')

            actual_parent_card_id = objectpath_wrapper.filter_dct_for_key(
                'cardId', exp_parent_card_id, 'cardId', read_resp.json())[0]
            dct_actual = helper.construct_actual(read_resp.json(),
                                                 dct_expected)

            dct_expected.update({'parent_card_id': exp_parent_card_id})
            dct_actual.update({'parent_card_id': actual_parent_card_id})
        else:
            dct_actual = helper.construct_actual(read_resp.json(),
                                                 dct_expected)

        return dct_expected, dct_actual
예제 #7
0
 def __init__(self):
     self._get_env_details()
     self.db_logger = DBLoggerFactory.logger
     self.req_session = requests.session()
     self.asserter = Asserter()
예제 #8
0
class Board:
    def __init__(self):
        self._get_env_details()
        self.db_logger = DBLoggerFactory.logger
        self.req_session = requests.session()
        self.asserter = Asserter()

    def _get_env_details(self):
        env = Environment()
        self.protocol = env.external_env.protocol
        self.host_name = env.external_env.name

        lk_json_const = ConstantsReader.lk_json_const
        self.headers = {"Authorization": lk_json_const['token']}

    def create(self, payload):
        pass

    def update(self, board_id, lane_id, payload):
        update_url = UPDATE_LANE_URL.format(protocol=self.protocol,
                                            host_name=self.host_name,
                                            board_id=board_id,
                                            lane_id=lane_id)
        response = self.req_session.patch(update_url,
                                          json=payload,
                                          headers=self.headers)

        self.verify_update(response, board_id, lane_id, paylaod)

    def read(self, board_id):
        read_url = READ_URL.format(protocol=self.protocol,
                                   host_name=self.host_name,
                                   board_id=board_id)
        resp = self.req_session.get(read_url, headers=self.headers)
        return resp

    def delete(self, artifact_id):
        pass

    def verify_update(self, response, board_id, lane_id, dct_expected):
        self.status = False
        self.step_desc = 'Leankit Board Lane Update verification'
        self.remarks = '\n Inside feature class: %s method: %s \n' % (
            core_helper.get_invoking_method_name())
        self.step_input = 'Input value board_id: {0}, lane_id: {1}'.format(
            board_id, lane_id)

        if response.status_code == 200:
            read_resp = self.read(board_id)
            if read_resp.status_code == 200:
                dct_actual = objectpath_wrapper.get_dct_containing_condition(
                    'id', lane_id, read_resp)
                self.status, remarks = self.asserter.verify(
                    dct_actual, expected=dct_expected)
                self.remarks += remarks
            else:
                self.remarks += "Read Response failed with status code: {0} and response: {1}".format(
                    read_resp.status_code, read_resp.text)
        else:
            self.remarks += "Board Lane update failed with status code: {0} and response: {1}".format(
                response.status_code, response.text)

        self.db_logger.log_into_steps(self)
        assert self.status

    def verify_delete(self, card_id):
        pass
예제 #9
0
class LKVerify:
    def __init__(self):
        super().__init__()
        self.asserter = Asserter()
        self.db_logger = DBLoggerFactory.logger
        self.id = TestDetails.test_id
        self.uuid = TestDetails.test_uuid
        self.card = Card()
        self.env = Environment()

    def card_details(self, card_id, dct_expected):
        # card_id = dct_expected['id']

        self.status = False
        self.remarks = '\n Inside feature class: %s method: %s \n' % (
            core_helper.get_method_class_names())
        self.step_desc = 'Verifying Card Details after Integration'
        self.step_input = 'Expected values: %s' % dct_expected

        response = self.card.read(card_id)
        status_code = response.status_code
        if status_code == 200:
            dct_actual = helper.construct_actual(response.json(), dct_expected)
            self.status, remarks = self.asserter.verify(dct_actual,
                                                        expected=dct_expected)
            self.remarks += remarks
        else:
            self.remarks += 'Card Read API failed with status code: {0} and response: {1}'.format(
                status_code, response.text)
        self.db_logger.log_into_steps(self)
        assert self.status

    def verify_prm_ext_link_in_lk(self, card_id, prm_project_key):

        self.status = False
        self.remarks = '\n Inside feature class: %s method: %s \n' % (
            core_helper.get_method_class_names())
        self.step_desc = 'PRM External Link verification in Leankit'
        self.step_input = 'Expected values: LK Crad ID: {0}, PRM Project Key: {1}'.format(
            card_id, prm_project_key)

        read_resp = self.card.read(card_id)
        status_code = read_resp.status_code
        card_name = None
        if status_code == 200:
            card_name = read_resp.json()['title']

            scode = helper.get_scode(prm_project_key)
            protocol = self.env.pve.protocol
            host_name = self.env.pve.name

            actual_external_url = objectpath_wrapper.filter_dct_for_key(
                'label', 'Enterprise One', 'url', read_resp.json())[0]
            expected_url = '{protocol}://{host_name}/planview/PLP/EntityLandingPage.aspx?pt=PROJECT&scode={scode}'.format(
                protocol=protocol, host_name=host_name, scode=scode)

            self.status, remarks = self.asserter.verify(
                actual_external_url,
                expected=expected_url,
                condition='is_equal_to_ignoring_case')
            self.remarks += remarks
        else:
            self.remarks += 'PRM External link is not Present in Leankit after Integration'

        self.db_logger.log_into_steps(self)
        assert self.status
        return card_name