|
8 | 8 | from sqlmesh.core.model import SqlModel, load_sql_based_model |
9 | 9 | from tests.utils.test_filesystem import create_temp_file |
10 | 10 | from unittest.mock import call |
| 11 | +from sqlmesh.core.config import ModelDefaultsConfig |
11 | 12 |
|
12 | 13 |
|
13 | 14 | def test_format_files(tmp_path: pathlib.Path, mocker: MockerFixture): |
@@ -100,3 +101,46 @@ def test_format_files(tmp_path: pathlib.Path, mocker: MockerFixture): |
100 | 101 | upd4 |
101 | 102 | == "MODEL (\n name audit.model,\n audits (\n inline_audit\n )\n);\n\nSELECT\n 3 AS item_id;\n\nAUDIT (\n name inline_audit\n);\n\nSELECT\n *\nFROM @this_model\nWHERE\n item_id < 0" |
102 | 103 | ) |
| 104 | + |
| 105 | + |
| 106 | +def test_ignore_formating_files(tmp_path: pathlib.Path): |
| 107 | + models_dir = pathlib.Path("models") |
| 108 | + audits_dir = pathlib.Path("audits") |
| 109 | + |
| 110 | + # Case 1: Model and Audit are not formatted if the flag is set to false (overriding defaults) |
| 111 | + model1_text = "MODEL(name this.model1, dialect 'duckdb', formatting false); SELECT 1 col" |
| 112 | + model1 = create_temp_file(tmp_path, pathlib.Path(models_dir, "model_1.sql"), model1_text) |
| 113 | + |
| 114 | + audit1_text = "AUDIT(name audit1, dialect 'duckdb', formatting false); SELECT col1 col2 FROM @this_model WHERE foo < 0;" |
| 115 | + audit1 = create_temp_file(tmp_path, pathlib.Path(audits_dir, "audit_1.sql"), audit1_text) |
| 116 | + |
| 117 | + audit2_text = "AUDIT(name audit2, dialect 'duckdb', standalone true, formatting false); SELECT col1 col2 FROM @this_model WHERE foo < 0;" |
| 118 | + audit2 = create_temp_file(tmp_path, pathlib.Path(audits_dir, "audit_2.sql"), audit2_text) |
| 119 | + |
| 120 | + Context( |
| 121 | + paths=tmp_path, config=Config(model_defaults=ModelDefaultsConfig(formatting=True)) |
| 122 | + ).format() |
| 123 | + |
| 124 | + assert model1.read_text(encoding="utf-8") == model1_text |
| 125 | + assert audit1.read_text(encoding="utf-8") == audit1_text |
| 126 | + assert audit2.read_text(encoding="utf-8") == audit2_text |
| 127 | + |
| 128 | + # Case 2: Model is formatted (or not) based on it's flag and the defaults flag |
| 129 | + model2_text = "MODEL(name this.model2, dialect 'duckdb'); SELECT 1 col" |
| 130 | + model2 = create_temp_file(tmp_path, pathlib.Path(models_dir, "model_2.sql"), model2_text) |
| 131 | + |
| 132 | + model3_text = "MODEL(name this.model3, dialect 'duckdb', formatting true); SELECT 1 col" |
| 133 | + model3 = create_temp_file(tmp_path, pathlib.Path(models_dir, "model_3.sql"), model3_text) |
| 134 | + |
| 135 | + Context( |
| 136 | + paths=tmp_path, config=Config(model_defaults=ModelDefaultsConfig(formatting=False)) |
| 137 | + ).format() |
| 138 | + |
| 139 | + # Case 2.1: Model is not formatted if the defaults flag is set to false |
| 140 | + assert model2.read_text(encoding="utf-8") == model2_text |
| 141 | + |
| 142 | + # Case 2.2: Model is formatted if it's flag is set to true, overriding defaults |
| 143 | + assert ( |
| 144 | + model3.read_text(encoding="utf-8") |
| 145 | + == "MODEL (\n name this.model3,\n dialect 'duckdb',\n formatting TRUE\n);\n\nSELECT\n 1 AS col" |
| 146 | + ) |
0 commit comments