Пример #1
0
    def test_read_empty_table(self):
        with dwetl.test_database_session() as session:
            table_base_class = dwetl.Base.classes.dw_stg_1_mai01_z00

            # Use negative processing cycle id, so any actual data in the tables
            # won't interfere with the tests.
            processing_cycle_id = -1
            reader = SqlAlchemyReader(session, table_base_class,
                                      'em_create_dw_prcsng_cycle_id',
                                      processing_cycle_id)

            results = []
            for row in reader:
                results.append(row)

            self.assertEqual(0, len(results))
Пример #2
0
    def test_job_info_factory_create_from_db(self):
        # expected user
        expected_user = getpass.getuser()

        with dwetl.test_database_session() as session:
            table_base_class = dwetl.Base.classes.dw_prcsng_cycle
            prcsng_cycle_id = self.get_max_prcsng_cycle_id(
                session, table_base_class)
            next_pcid = prcsng_cycle_id + 1
            job_info = JobInfoFactory.create_job_info_from_db(
                session, table_base_class)
            self.assertEqual(next_pcid, job_info.prcsng_cycle_id)
            self.assertEqual(1, job_info.job_exectn_id)
            self.assertEqual(dwetl.version, job_info.job_version_no)
            self.assertEqual(expected_user, job_info.user_id)

            added_record = session.query(table_base_class).filter(
                table_base_class.dw_prcsng_cycle_id ==
                next_pcid).one().__dict__
            self.assertEqual(next_pcid, added_record['dw_prcsng_cycle_id'])
            self.assertEqual(expected_user, added_record['em_create_user_id'])
Пример #3
0
    def test_job_info_factory_create_from_db_existing(self):
        '''test when there are existing entries in the dw_prcsng_cycle table'''
        with dwetl.test_database_session() as session:
            table_base_class = dwetl.Base.classes.dw_prcsng_cycle
            prcsng_cycle_id = self.get_max_prcsng_cycle_id(
                session, table_base_class)

            job_info = JobInfoFactory.create_job_info_from_db(
                session, table_base_class)
            self.assertEqual(prcsng_cycle_id + 1, job_info.prcsng_cycle_id)

            expected_version = dwetl.version
            self.assertEqual(expected_version, job_info.job_version_no)

            self.assertEqual(1, job_info.job_exectn_id)

            job_info = JobInfoFactory.create_job_info_from_db(
                session, table_base_class)
            self.assertEqual(prcsng_cycle_id + 2, job_info.prcsng_cycle_id)

            expected_version = dwetl.version
            self.assertEqual(expected_version, job_info.job_version_no)
Пример #4
0
    def test_add_row_to_table(self):
        with dwetl.test_database_session() as session:
            table_base_class = dwetl.Base.classes.dw_stg_1_mai01_z00

            row_dict = {
                'rec_type_cd': 'D',
                'db_operation_cd': 'U',
                'rec_trigger_key': '000007520',
                'z00_doc_number': '000007520',
                'z00_no_lines': '0041',
                'z00_data_len': '001504'
            }

            # Using negative processing_cycle_id so having real data in the
            # tables won't interfere with the tests.
            processing_cycle_id = -1

            job_info = {
                'em_create_dw_prcsng_cycle_id': processing_cycle_id,
                'em_create_dw_job_exectn_id': 1,
                'em_create_dw_job_name': 'TEST',
                'em_create_dw_job_version_no': '0.0',
                'em_create_user_id': 'test_user',
                'em_create_tmstmp': datetime.datetime.now()
            }

            row_dict.update(job_info)

            writer = SqlAlchemyWriter(session, table_base_class)
            writer.write_row(row_dict)

            # Verify that the row was added
            result = session.query(table_base_class).filter(
                table_base_class.em_create_dw_prcsng_cycle_id ==
                processing_cycle_id).one()

            result_dict = result.__dict__
            self.assertEqual('000007520', result_dict['rec_trigger_key'])
            self.assertEqual('001504', result_dict['z00_data_len'])
Пример #5
0
    def test_read_rows_from_table(self):
        with dwetl.test_database_session() as session:
            # Add some sample rows to the "dw_stg_1_mai01_z00" table
            table_base_class = dwetl.Base.classes.dw_stg_1_mai01_z00

            rows = [{
                'rec_type_cd': 'D',
                'db_operation_cd': 'U',
                'rec_trigger_key': '000205993',
                'z00_doc_number': '000205993',
                'z00_no_lines': '0043',
                'z00_data_len': '001583'
            }, {
                'rec_type_cd': 'D',
                'db_operation_cd': 'U',
                'rec_trigger_key': '000245526'
            }]

            # Use negative processing cycle id, so any actual data in the tables
            # won't interfere with the tests.
            processing_cycle_id = -1

            for row in rows:
                self.append_job_info(row, 'em_create_dw_prcsng_cycle_id',
                                     processing_cycle_id)

            self.setup_rows(session, table_base_class, rows)

            reader = SqlAlchemyReader(session, table_base_class,
                                      'em_create_dw_prcsng_cycle_id',
                                      processing_cycle_id)
            results = []
            for row in reader:
                results.append(row)

            self.assertEqual(2, len(results))
            self.assertEqual('000205993', results[0]['rec_trigger_key'])
            self.assertEqual('000245526', results[1]['rec_trigger_key'])
Пример #6
0
    def test_read_rows_from_table_with_multiple_processing_ids(self):
        with dwetl.test_database_session() as session:
            # Add some sample rows to the "dw_stg_1_mai01_z00" table
            table_base_class = dwetl.Base.classes.dw_stg_1_mai01_z00

            rows = [{
                'rec_type_cd': 'D',
                'db_operation_cd': 'U',
                'rec_trigger_key': '000205993',
                'z00_doc_number': '000205993',
                'z00_no_lines': '0043',
                'z00_data_len': '001583'
            }, {
                'rec_type_cd': 'D',
                'db_operation_cd': 'U',
                'rec_trigger_key': '000245526'
            }]

            # Use different em_create_dw_prcsng_cycle_ids for each row
            #
            # Using negative processing_cycle_ids so having real data in the
            # tables won't interfere with the tests.
            self.append_job_info(rows[0], 'em_create_dw_prcsng_cycle_id', -1)
            self.append_job_info(rows[1], 'em_create_dw_prcsng_cycle_id', -2)

            self.setup_rows(session, table_base_class, rows)

            reader = SqlAlchemyReader(session, table_base_class,
                                      'em_create_dw_prcsng_cycle_id', -2)
            results = []
            for row in reader:
                results.append(row)

            # Only the row matching the em_create_dw_prcsng_cycle_id should be returned
            self.assertEqual(1, len(results))
            self.assertEqual('000245526', results[0]['rec_trigger_key'])