Skip to content

Commit 420b7e9

Browse files
committed
feat: add --use-desc-for-id to deactivate_jobs; add CLI tests for all commands
Add the missing @option_use_desc_for_id decorator and use_desc_for_id kwarg to DBTCloud() in deactivate_jobs, matching the pattern used by all other commands. Add five new tests (validate, import_jobs, link, unlink, deactivate_jobs) that verify DBTCloud is constructed with use_desc_for_id=True when the flag is passed.
1 parent ba421de commit 420b7e9

2 files changed

Lines changed: 137 additions & 1 deletion

File tree

src/dbt_jobs_as_code/main.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -645,8 +645,15 @@ def unlink(
645645
multiple=True,
646646
help="The ID of the job to deactivate.",
647647
)
648+
@option_use_desc_for_id
648649
def deactivate_jobs(
649-
config, account_id, project_id, environment_id, job_id, disable_ssl_verification
650+
config,
651+
account_id,
652+
project_id,
653+
environment_id,
654+
job_id,
655+
disable_ssl_verification,
656+
use_desc_for_id,
650657
):
651658
"""
652659
Deactivate jobs triggers in dbt Cloud (schedule and CI/CI triggers) without remoing the jobs.
@@ -669,6 +676,7 @@ def deactivate_jobs(
669676
api_key=os.environ.get("DBT_API_KEY"),
670677
base_url=os.environ.get("DBT_BASE_URL", "https://cloud.getdbt.com"),
671678
disable_ssl_verification=disable_ssl_verification,
679+
use_desc_for_id=use_desc_for_id,
672680
)
673681
cloud_jobs = dbt_cloud.get_jobs()
674682

tests/test_main.py

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,3 +534,131 @@ def test_use_desc_for_id_default_false(mock_build_change_set, mock_empty_change_
534534
mock_build_change_set.assert_called_once()
535535
call_args = mock_build_change_set.call_args
536536
assert call_args.kwargs.get("use_desc_for_id") is False
537+
538+
539+
@patch("dbt_jobs_as_code.main.DBTCloud")
540+
@patch("dbt_jobs_as_code.main.load_job_configuration")
541+
@patch("dbt_jobs_as_code.main.resolve_file_paths")
542+
def test_use_desc_for_id_option_validate(
543+
mock_resolve_file_paths, mock_load_job_configuration, mock_DBTCloud
544+
):
545+
"""Test that validate --online passes use_desc_for_id=True to DBTCloud"""
546+
from dbt_jobs_as_code.schemas.common_types import Settings, Triggers
547+
from dbt_jobs_as_code.schemas.job import JobDefinition
548+
549+
mock_resolve_file_paths.return_value = (["config.yml"], [])
550+
551+
job = JobDefinition(
552+
project_id=123,
553+
environment_id=456,
554+
account_id=789,
555+
name="Test Job",
556+
settings=Settings(threads=4),
557+
run_generate_sources=False,
558+
execute_steps=["dbt run"],
559+
generate_docs=False,
560+
schedule={"cron": "0 * * * *"},
561+
triggers=Triggers(schedule=True),
562+
)
563+
mock_config = Mock()
564+
mock_config.jobs = {"test-job": job}
565+
mock_load_job_configuration.return_value = mock_config
566+
567+
instance = mock_DBTCloud.return_value
568+
instance.get_environments.return_value = [{"id": 456, "project_id": 123}]
569+
instance.get_jobs.return_value = []
570+
571+
runner = CliRunner()
572+
result = runner.invoke(cli, ["validate", "--online", "--use-desc-for-id", "config.yml"])
573+
574+
assert result.exit_code == 0
575+
mock_DBTCloud.assert_called_once()
576+
assert mock_DBTCloud.call_args.kwargs["use_desc_for_id"] is True
577+
578+
579+
@patch("dbt_jobs_as_code.main.DBTCloud")
580+
def test_use_desc_for_id_option_import_jobs(mock_DBTCloud):
581+
"""Test that import-jobs passes use_desc_for_id=True to DBTCloud"""
582+
instance = mock_DBTCloud.return_value
583+
instance.get_jobs.return_value = []
584+
instance.get_env_vars.return_value = {}
585+
586+
runner = CliRunner()
587+
result = runner.invoke(
588+
cli,
589+
["import-jobs", "--account-id", "789", "--use-desc-for-id"],
590+
)
591+
592+
assert result.exit_code == 0
593+
mock_DBTCloud.assert_called_once()
594+
assert mock_DBTCloud.call_args.kwargs["use_desc_for_id"] is True
595+
596+
597+
@patch("dbt_jobs_as_code.main.DBTCloud")
598+
@patch("dbt_jobs_as_code.main.load_job_configuration")
599+
@patch("dbt_jobs_as_code.main.resolve_file_paths")
600+
def test_use_desc_for_id_option_link(
601+
mock_resolve_file_paths, mock_load_job_configuration, mock_DBTCloud
602+
):
603+
"""Test that link passes use_desc_for_id=True to DBTCloud"""
604+
from dbt_jobs_as_code.schemas.common_types import Settings, Triggers
605+
from dbt_jobs_as_code.schemas.job import JobDefinition
606+
607+
mock_resolve_file_paths.return_value = (["config.yml"], [])
608+
609+
job = JobDefinition(
610+
project_id=123,
611+
environment_id=456,
612+
account_id=789,
613+
name="Test Job",
614+
settings=Settings(threads=4),
615+
run_generate_sources=False,
616+
execute_steps=["dbt run"],
617+
generate_docs=False,
618+
schedule={"cron": "0 * * * *"},
619+
triggers=Triggers(schedule=True),
620+
)
621+
mock_config = Mock()
622+
mock_config.jobs = {"test-job": job}
623+
mock_load_job_configuration.return_value = mock_config
624+
625+
runner = CliRunner()
626+
result = runner.invoke(cli, ["link", "--dry-run", "--use-desc-for-id", "config.yml"])
627+
628+
assert result.exit_code == 0
629+
mock_DBTCloud.assert_called_once()
630+
assert mock_DBTCloud.call_args.kwargs["use_desc_for_id"] is True
631+
632+
633+
@patch("dbt_jobs_as_code.main.DBTCloud")
634+
def test_use_desc_for_id_option_unlink(mock_DBTCloud):
635+
"""Test that unlink passes use_desc_for_id=True to DBTCloud"""
636+
instance = mock_DBTCloud.return_value
637+
instance.get_jobs.return_value = []
638+
639+
runner = CliRunner()
640+
result = runner.invoke(
641+
cli,
642+
["unlink", "--account-id", "789", "--use-desc-for-id"],
643+
)
644+
645+
assert result.exit_code == 0
646+
mock_DBTCloud.assert_called_once()
647+
assert mock_DBTCloud.call_args.kwargs["use_desc_for_id"] is True
648+
649+
650+
@patch("dbt_jobs_as_code.main.DBTCloud")
651+
def test_use_desc_for_id_option_deactivate_jobs(mock_DBTCloud):
652+
"""Test that deactivate-jobs passes use_desc_for_id=True to DBTCloud"""
653+
instance = mock_DBTCloud.return_value
654+
instance.get_jobs.return_value = []
655+
656+
runner = CliRunner()
657+
result = runner.invoke(
658+
cli,
659+
["deactivate-jobs", "--account-id", "789", "--use-desc-for-id"],
660+
)
661+
662+
assert result.exit_code == 0
663+
mock_DBTCloud.assert_called_once()
664+
assert mock_DBTCloud.call_args.kwargs["use_desc_for_id"] is True

0 commit comments

Comments
 (0)