def test_writting_sql_table_without_index(self, mocker, pandas_dataframe_with_data, specification, sql_specification_format, sql_specification_writer): expected = "123456789" table_name = "mytable" index_flag = False formatter_spec = sql_specification_format(table_name=table_name, index=index_flag) formatter = SQLFormatter(specification=formatter_spec) writer = MysqlDirectDatabaseWriter( formatter=formatter, specification=sql_specification_writer) db_engine = create_engine('sqlite:///:memory:') mock = mocker.patch('getpass._raw_input') mock.return_value = expected mock_ = mocker.patch.object(MysqlDirectDatabaseWriter, 'engine') mock_.return_value = db_engine writer.before_write() writer.write(dataframe=pandas_dataframe_with_data) dataframe_from_sql = pd.read_sql_table(table_name='mytable', con=db_engine) assert dataframe_from_sql.equals(pandas_dataframe_with_data) mock_.assert_called()
def test_writing_sql_script(self, sql_specification_format, pandas_dataframe_with_data): table_name = "mytable" index_flag = True index_label = "myindexlabel" uri = uuid.uuid4().hex formatter_spec = sql_specification_format(table_name=table_name, index=index_flag, index_label=index_label) formatter = SQLFormatter(specification=formatter_spec) formatter.format(dataframe=pandas_dataframe_with_data, path_or_buffer=uri) assert os.path.exists(uri) with open(uri, 'r') as f: assert len(f.read()) > 0 os.remove(uri)
def test_writting_dataframe_without_records(self, mocker, pandas_dataframe_without_data, postgres_specification_cli): mock_conn = mocker.patch.object(PostgresSqlPsql, 'execute_query') mock_conn.return_value = lambda x: None formatter = SQLFormatter(specification={}) writer = PostgreSqlClientDatabaseWriter( formatter=formatter, specification=postgres_specification_cli) writer.write(dataframe=pandas_dataframe_without_data) mock_conn.assert_not_called()
def test_writting_dataframe_without_records(self, mocker, pandas_dataframe_without_data, mysql_specification): mock_conn = mocker.patch('src.lib.shell.Shell.execute') mock_conn.cursor.return_value = lambda x: 0 formatter = SQLFormatter(specification={}) writer = MysqlClientDatabaseWriter(formatter=formatter, specification=mysql_specification) writer.write(dataframe=pandas_dataframe_without_data) mock_conn.assert_not_called()
def test_writting_dataframe_without_records(self, mocker, sql_specification_format, pandas_dataframe_without_data, postgres_specification_direct): mock_conn = mocker.patch('psycopg2.connect') mock_conn.cursor.return_value = lambda x: 0 formatter = SQLFormatter(specification={}) writer = PostgresDirectDatabaseWriter( formatter=formatter, specification=postgres_specification_direct) writer.write(dataframe=pandas_dataframe_without_data) mock_conn.assert_not_called()
def test_before_write(self, mocker, sql_specification_format): expected = "123" mock = mocker.patch('getpass._raw_input') mock.return_value = expected formatter = SQLFormatter( specification=sql_specification_format('mytable')) writer = PostgresDirectDatabaseWriter(formatter=formatter, specification={'options': {}}) writer.before_write() mock.assert_called() assert writer.specification['options']['password'] == expected
def test_writting_csv_with_records(self, mocker, pandas_dataframe_with_data, sql_specification_format, postgres_specification_direct): db_engine = create_engine('sqlite:///:memory:') mock = mocker.patch('getpass._raw_input') mock.return_value = "mytable" mock_ = mocker.patch.object(PostgresDirectDatabaseWriter, 'engine') mock_.return_value = db_engine formatter = SQLFormatter( specification=sql_specification_format('mytable')) writer = PostgresDirectDatabaseWriter( formatter=formatter, specification=postgres_specification_direct) writer.before_write() writer.write(dataframe=pandas_dataframe_with_data) dataframe_from_sql = pd.read_sql_table(table_name='mytable', con=db_engine) assert dataframe_from_sql.equals(pandas_dataframe_with_data) mock_.assert_called()