class TestDBLogger(unittest.TestCase):

    def setUp(self):
        self.cm = ConnectionManager(default_db)
        self.cm.connect()

    def tearDown(self):
        self.cm.close()

    def test_create_and_finalize(self):
        db_logger = DatabaseLogger(cm=self.cm, report_name="TestDBLogger")
        db_logger.create_record()
        self.assertIsInstance(db_logger.report_log.primary_key, int)
        self.assertTrue(db_logger.report_log.inserted)
        self.assertFalse(db_logger.report_log.updated)
        db_logger.finalize_record()
        self.assertTrue(db_logger.report_log.updated)

    def test_log_recipients(self):
        test_recipients = ["*****@*****.**", "*****@*****.**"]
        db_logger = DatabaseLogger(cm=self.cm, report_name="TestDBLogger")
        db_logger.create_record()
        db_logger.finalize_record(test_recipients)
        sql = f"select recipients from {self.cm.schema}.report_logs where id = {db_logger.report_log.primary_key}"
        with QueryExecutor(default_db) as qe:
            result = qe.execute_query(sql=sql)
        self.assertEqual(result.result_data[0]['recipients'], "; ".join(test_recipients))
class TestReportWriter(unittest.TestCase):
    def setUp(self):
        self.cm = ConnectionManager(default_db)
        self.cm.connect()

    def tearDown(self):
        self.cm.close()

    def test_create_workbook(self):
        writer = ReportWriter("Test Report")
        writer.build_file()
        writer.close_workbook()
        self.assertIsNotNone(writer.workbook_builder)
        self.assertTrue(os.path.isfile(writer.report_file))
        os.unlink(writer.report_file)

    def test_create_worksheet(self):
        writer = ReportWriter("Test Report 2")
        writer.build_file()
        self.assertEqual(writer.record_count, 0)
        test_query = TEST_QUERY.format(self.cm.schema)
        writer.create_worksheet_from_query(self.cm, "sheet1", sql=test_query)
        writer.close_workbook()
        self.assertTrue(writer.record_count > 0)
        self.assertTrue(writer.logger.error_buffer.empty)

    def test_invalid_sheet_name_raises_error(self):
        """Should log an error if attempt to add worksheet with invalid name"""
        writer = ReportWriter("Test Report 3")
        writer.build_file()
        test_query = TEST_QUERY.format(self.cm.schema)
        writer.create_worksheet_from_query(self.cm, "sheet/1", sql=test_query)
        writer.close_workbook()
        self.assertFalse(writer.logger.error_buffer.empty)
Beispiel #3
0
 def test_close_connection_successfully(self):
     # TODO This test only works if the 'Test' db is defined in config.ini.
     # TODO Should instead create a test db fixture of some kind.
     cm = ConnectionManager(db='Test')
     cm.connect()
     cm.conn.close()
     with self.assertRaisesRegex(StatementError, "ResourceClosedError"):
         cm.conn.execute("select * from test;")
class TestReportActiveChecker(unittest.TestCase):

    def setUp(self):
        self.cm = ConnectionManager(default_db)
        self.cm.connect()

    def tearDown(self):
        self.cm.close()

    def test_active(self):
        active_checker = ReportActiveChecker(self.cm, 'test_report_active')
        inactive_checker = ReportActiveChecker(self.cm, 'test_report_inactive')
        self.assertTrue(active_checker)
        self.assertFalse(inactive_checker)
class TestRecipientsChecker(unittest.TestCase):

    def setUp(self):
        self.cm = ConnectionManager(default_db)
        self.cm.connect()

    def tearDown(self):
        self.cm.close()

    def test_get_recipients(self):
        checker = RecipientsChecker(cm=self.cm, report_name='test_report_active')
        checker.assertFalse(checker.to_recipients)
        checker.assertFalse(checker.cc_recipients)
        checker.get_recipients()
        checker.assertTrue(checker.to_recipients)
        checker.assertTrue(checker.cc_recipients)
Beispiel #6
0
 def execute_statement(self, statement: sa.sql.base.Executable):
     with ConnectionManager(self.database) as cm:
         proxy = cm.conn.execute(statement)
         if proxy.cursor:
             result = proxy.fetchall()
         else:
             result = None
     return result
Beispiel #7
0
def teardown_test_db():
    db = config['Default']['database']
    try:
        os.unlink('test.db')
    except FileNotFoundError:
        pass
    if config[db]['rdbms'] == 'mysql':
        with ConnectionManager(db) as cm:
            metadata.drop_all(cm.engine)
            test_metadata.drop_all(cm.engine)
Beispiel #8
0
def send_unschedulable_alert(report):
    with ConnectionManager('Celery-Docker') as cm:
        checker = RecipientsChecker(cm, 'alert')
        checker.get_recipients()
    alert = Alert(
        subject=f"Unschedulable Task: {report['report_name']}",
        message=
        "Task is active but cannot be scheduled. You must provide all cron schedule attributes, or none.",
        recipients=checker.to_recipients)
    alert.send()
Beispiel #9
0
 def test_allow_valid_rdbms_types(self):
     """Raise an error if an unsupported RDBMS is specified."""
     cm = ConnectionManager()
     cm.db = 'Fake_DB'
     cm.config.add_section('Fake_DB')
     cm.config.set('Fake_DB', 'rdbms', 'fakedb')
     cm.unpack_params()
     with self.assertRaisesRegex(ValueError, "Unsupported RDBMS"):
         cm.connect()
Beispiel #10
0
def setup_test_db():
    db = config['Default']['database']
    if config[db]['rdbms'] == 'sqlite':
        cm = ConnectionManager(db)
        cm.connect()
        metadata.create_all(cm.engine)
        test_metadata.create_all(cm.engine)
        create_fixtures(cm)
        cm.close()
    if config[db]['rdbms'] == 'mysql':
        with ConnectionManager(db) as cm:
            metadata.create_all(cm.engine)
            test_metadata.create_all(cm.engine)
            create_fixtures(cm)
Beispiel #11
0
 def test_raise_error_if_no_db(self):
     """Raise an error if no db is provided"""
     cm = ConnectionManager()
     with self.assertRaisesRegex(ValueError, "db attribute not set"):
         cm.connect()
Beispiel #12
0
 def test_context_manager(self):
     with ConnectionManager(db='Test') as cm:
         self.assertFalse(cm.closed())
         cm.conn.execute("select * from sys.flarp;")
     self.assertTrue(cm.closed())
 def setUp(self):
     self.cm = ConnectionManager(default_db)
     self.cm.connect()
 def setUp(self):
     db = config['Default']['database']
     cm = ConnectionManager(db)
     cm.connect()
     self.cm = cm