def test_df_to_sql(self): """ DB Eng Specs (bigquery): Test DataFrame to SQL contract """ # test missing google.oauth2 dependency sys.modules["pandas_gbq"] = mock.MagicMock() df = DataFrame() self.assertRaisesRegexp( Exception, "Could not import libraries", BigQueryEngineSpec.df_to_sql, df, con="some_connection", schema="schema", name="name", ) invalid_kwargs = [ {"name": "some_name"}, {"schema": "some_schema"}, {"con": "some_con"}, {"name": "some_name", "con": "some_con"}, {"name": "some_name", "schema": "some_schema"}, {"con": "some_con", "schema": "some_schema"}, ] # Test check for missing required kwargs (name, schema, con) sys.modules["google.oauth2"] = mock.MagicMock() for invalid_kwarg in invalid_kwargs: self.assertRaisesRegexp( Exception, "name, schema and con need to be defined in kwargs", BigQueryEngineSpec.df_to_sql, df, **invalid_kwarg, ) import pandas_gbq from google.oauth2 import service_account pandas_gbq.to_gbq = mock.Mock() service_account.Credentials.from_service_account_info = mock.MagicMock( return_value="account_info" ) connection = mock.Mock() connection.engine.url.host = "google-host" connection.dialect.credentials_info = "secrets" BigQueryEngineSpec.df_to_sql( df, con=connection, schema="schema", name="name", if_exists="extra_key" ) pandas_gbq.to_gbq.assert_called_with( df, project_id="google-host", destination_table="schema.name", credentials="account_info", if_exists="extra_key", )
def test_df_to_sql(self, mock_get_engine): """ DB Eng Specs (bigquery): Test DataFrame to SQL contract """ # test missing google.oauth2 dependency sys.modules["pandas_gbq"] = mock.MagicMock() df = DataFrame() database = mock.MagicMock() self.assertRaisesRegexp( Exception, "Could not import libraries", BigQueryEngineSpec.df_to_sql, database=database, table=Table(table="name", schema="schema"), df=df, to_sql_kwargs={}, ) invalid_kwargs = [ {"name": "some_name"}, {"schema": "some_schema"}, {"con": "some_con"}, {"name": "some_name", "con": "some_con"}, {"name": "some_name", "schema": "some_schema"}, {"con": "some_con", "schema": "some_schema"}, ] # Test check for missing schema. sys.modules["google.oauth2"] = mock.MagicMock() for invalid_kwarg in invalid_kwargs: self.assertRaisesRegexp( Exception, "The table schema must be defined", BigQueryEngineSpec.df_to_sql, database=database, table=Table(table="name"), df=df, to_sql_kwargs=invalid_kwarg, ) import pandas_gbq from google.oauth2 import service_account pandas_gbq.to_gbq = mock.Mock() service_account.Credentials.from_service_account_info = mock.MagicMock( return_value="account_info" ) mock_get_engine.return_value.url.host = "google-host" mock_get_engine.return_value.dialect.credentials_info = "secrets" BigQueryEngineSpec.df_to_sql( database=database, table=Table(table="name", schema="schema"), df=df, to_sql_kwargs={"if_exists": "extra_key"}, ) pandas_gbq.to_gbq.assert_called_with( df, project_id="google-host", destination_table="schema.name", credentials="account_info", if_exists="extra_key", )