from typer.testing import CliRunner from spriteforge.cli import app runner=CliRunner() def test_validate_and_dry_run(tmp_path): path=tmp_path/"assets.yaml" path.write_text("floor:\n backend: procedural\n generator: floor\n tags: [environment]\n") result=runner.invoke(app,["validate",str(path)]) assert result.exit_code==0 and "1 asset(s)" in result.stdout result=runner.invoke(app,["build",str(path),"--tag","environment","--jobs","3","--dry-run"]) assert result.exit_code==0 and "floor\tprocedural" in result.stdout and "jobs=3" in result.stdout def test_cli_reports_line(tmp_path): path=tmp_path/"bad.yaml";path.write_text("Bad-ID:\n backend: import\n source: x.png\n") result=runner.invoke(app,["validate",str(path)]) assert result.exit_code==1 and ":1:1:" in result.stderr def test_missing_catalog_is_explicit(): result=runner.invoke(app,["stats","--build-dir","missing"]) assert result.exit_code==1 and "index.json" in result.stderr