|
| 1 | +from types import SimpleNamespace |
| 2 | + |
| 3 | +import jinja2 |
| 4 | + |
| 5 | + |
| 6 | +def _render_create_table_as(temporary, dist="my_col", sort=["my_col"]): |
| 7 | + env = jinja2.Environment( |
| 8 | + loader=jinja2.FileSystemLoader("src/dbt/include/redshift/macros"), |
| 9 | + extensions=["jinja2.ext.do"], |
| 10 | + ) |
| 11 | + template = env.get_template("adapters.sql") |
| 12 | + |
| 13 | + config_values = { |
| 14 | + "dist": dist, |
| 15 | + "sort_type": None, |
| 16 | + "sort": sort, |
| 17 | + "sql_header": None, |
| 18 | + "backup": None, |
| 19 | + } |
| 20 | + contract_config = SimpleNamespace(enforced=False) |
| 21 | + config = SimpleNamespace( |
| 22 | + get=lambda key, default=None, validator=None: ( |
| 23 | + contract_config if key == "contract" else config_values.get(key, default) |
| 24 | + ) |
| 25 | + ) |
| 26 | + |
| 27 | + relation = SimpleNamespace(include=lambda database=True, schema=True: "my_rel") |
| 28 | + |
| 29 | + class _AnyValidator: |
| 30 | + def __getitem__(self, item): |
| 31 | + return None |
| 32 | + |
| 33 | + validation = SimpleNamespace(any=_AnyValidator()) |
| 34 | + |
| 35 | + macros = template.make_module({"config": config, "validation": validation}) |
| 36 | + return macros.redshift__create_table_as(temporary, relation, "select 1") |
| 37 | + |
| 38 | + |
| 39 | +def test_dist_and_sort_omitted_for_temporary_tables(): |
| 40 | + rendered = _render_create_table_as(temporary=True).lower() |
| 41 | + assert "distkey" not in rendered |
| 42 | + assert "sortkey" not in rendered |
| 43 | + |
| 44 | + |
| 45 | +def test_dist_and_sort_applied_for_non_temporary_tables(): |
| 46 | + rendered = _render_create_table_as(temporary=False).lower() |
| 47 | + assert "distkey" in rendered |
| 48 | + assert "sortkey" in rendered |
0 commit comments