from csv import DictReader import pytest from common.src.connectors import snowflake as sf @pytest.mark.skip # TODO: Remove this skip when Jenkins can run lambdas during build class TestRunSql: sample_sql = sf.SqlString( """ SELECT name FROM FACTS.PROD.DIM_BRAND LIMIT 5; """ ) class DummyModel(sf.BaseColumns): name: str def test_run_sql_default_json(self): result = sf.run_sql(self.sample_sql) assert next(result)["name"], "Expected at least one non-empty result" def test_run_sql_json_with_model(self): result = sf.run_sql(self.sample_sql, resp_model=self.DummyModel) assert isinstance( next(result).name, str ), "Expected at least one non-empty result, with key `name` and str type" def test_run_sql_csv(self): result = sf.run_sql( self.sample_sql, output_format=sf.Formats.CSV, # Pass the model to ensure it makes no difference when output is CSV resp_model=self.DummyModel, ) csv_reader = DictReader(result.splitlines()) as_list_of_dicts = list(csv_reader) assert len(as_list_of_dicts) > 0, "Expected at least one non-empty result" for item in as_list_of_dicts[0:]: assert "name" in item, "Expected key `name` in each item" assert isinstance(item["name"], str), "Expected value of type str" # TODO test staged