@@ -253,3 +253,83 @@ def test_smoke_e2e_local_zip_extractor(tmp_path: Path) -> None:
253253 raw_dir = Path (cfg .root ) / "data" / "raw" / cfg .dataset / str (year )
254254 raw_manifest = json .loads ((raw_dir / "manifest.json" ).read_text (encoding = "utf-8" ))
255255 assert raw_manifest ["primary_output_file" ] == "zip_payload.csv"
256+
257+
258+ def test_smoke_e2e_local_file_path_year_template (tmp_path : Path ) -> None :
259+ project_dir = tmp_path / "templated_local_project"
260+ data_dir = project_dir / "data"
261+ data_dir .mkdir (parents = True , exist_ok = True )
262+ shutil .copy (FIXTURES_DIR / "it_small.csv" , data_dir / "it_small_2024.csv" )
263+
264+ _write_text (
265+ project_dir / "sql" / "clean.sql" ,
266+ """
267+ SELECT
268+ comune,
269+ CAST(anno AS INTEGER) AS anno,
270+ CAST(valore AS DOUBLE) AS valore
271+ FROM raw_input
272+ """ ,
273+ )
274+ _write_text (
275+ project_dir / "sql" / "mart_totali.sql" ,
276+ """
277+ SELECT
278+ anno,
279+ SUM(valore) AS totale
280+ FROM clean_input
281+ GROUP BY anno
282+ """ ,
283+ )
284+ _write_text (
285+ project_dir / "dataset.yml" ,
286+ """
287+ schema_version: 1
288+ root: out
289+ dataset:
290+ name: tiny_csv_it_templated
291+ years: [2024]
292+ raw:
293+ output_policy: overwrite
294+ sources:
295+ - name: csv_it
296+ type: local_file
297+ primary: true
298+ args:
299+ path: data/it_small_{year}.csv
300+ filename: tiny_it_{year}.csv
301+ clean:
302+ sql: sql/clean.sql
303+ read_mode: strict
304+ read:
305+ source: config_only
306+ header: true
307+ delim: ";"
308+ decimal: ","
309+ mode: explicit
310+ include: tiny_it_2024.csv
311+ required_columns: comune
312+ validate:
313+ not_null: valore
314+ mart:
315+ tables:
316+ - name: mart_totali
317+ sql: sql/mart_totali.sql
318+ required_tables: mart_totali
319+ validate:
320+ table_rules:
321+ mart_totali:
322+ required_columns: [anno, totale]
323+ """ ,
324+ )
325+
326+ cfg = load_config (project_dir / "dataset.yml" )
327+ year = cfg .years [0 ]
328+ context = run_year (cfg , year , step = "all" , logger = _project_logger ())
329+
330+ _assert_run_success (context .path )
331+ _assert_common_outputs (Path (cfg .root ), cfg .dataset , year , ["mart_totali" ])
332+
333+ raw_dir = Path (cfg .root ) / "data" / "raw" / cfg .dataset / str (year )
334+ raw_manifest = json .loads ((raw_dir / "manifest.json" ).read_text (encoding = "utf-8" ))
335+ assert raw_manifest ["primary_output_file" ] == "tiny_it_2024.csv"
0 commit comments