Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion src/fabric_cli/commands/jobs/fab_jobs_run.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,16 @@ def exec_command(args: Namespace, item: Item) -> None:
fab_ui.print_output_format(
args,
message=f"Job instance '{args.instance_id}' cancelled (async)",
data={"job_id": args.instance_id},
show_key_value_list=True,
)

else:
fab_ui.print_output_format(
args, message=f"Job instance '{job_instance_id}' created"
args,
message=f"Job instance '{job_instance_id}' created",
data={"job_id": job_instance_id},
show_key_value_list=True,
)
fab_ui.print_grey(
f"→ To see status run 'job run-status {item.path} --id {job_instance_id}'"
Expand Down
5 changes: 4 additions & 1 deletion src/fabric_cli/commands/jobs/fab_jobs_run_cancel.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@ def exec_command(args: Namespace, item: Item) -> None:
)
else:
fab_ui.print_output_format(
args, message=f"Job instance '{args.id}' cancelled (async)"
args,
message=f"Job instance '{args.id}' cancelled (async)",
data={"job_id": args.id},
show_key_value_list=True,
)
fab_ui.print_grey(
f"→ To see status run 'job run-status {item.path} --id {args.id}'"
Expand Down
4 changes: 3 additions & 1 deletion src/fabric_cli/utils/fab_cmd_job_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,9 @@ def wait_for_job_completion(
fab_ui.print_progress(f"Job instance status: {status}")
if status == "Completed":
fab_ui.print_output_format(
args, message=f"Job instance '{job_ins_id}' completed"
args, message=f"Job instance '{job_ins_id}' completed",
data={"job_id": job_ins_id},
show_key_value_list=True,
)
else:
fab_logger.log_warning(
Expand Down
43 changes: 43 additions & 0 deletions tests/test_utils/test_fab_cmd_job_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
wait_for_job_completion,
validate_timeout_polling_interval,
)
from fabric_cli.commands.jobs.fab_jobs_run import exec_command as job_run_exec_command
from fabric_cli.utils.fab_http_polling_utils import DEFAULT_POLLING_INTERVAL
from fabric_cli.core.fab_exceptions import FabricCLIError
from fabric_cli.core import fab_constant
Expand Down Expand Up @@ -58,6 +59,22 @@ def test_wait_for_job_completion_immediate_success(mock_sleep, mock_api, mock_ge
mock_get_polling_interval.assert_called_once_with({}, None)


@patch('fabric_cli.utils.fab_cmd_job_utils.fab_ui.print_output_format')
@patch('fabric_cli.utils.fab_cmd_job_utils.get_polling_interval')
@patch('fabric_cli.utils.fab_cmd_job_utils.jobs_api.get_item_job_instance')
@patch('fabric_cli.utils.fab_cmd_job_utils.time.sleep')
def test_wait_for_job_completion_includes_job_id_in_data(mock_sleep, mock_api, mock_get_polling_interval, mock_print_output, default_job_args, mock_job_response):
mock_get_polling_interval.return_value = DEFAULT_POLLING_INTERVAL
mock_api.return_value = create_mock_response()

wait_for_job_completion(default_job_args, "test-job-id", mock_job_response, custom_polling_interval=None)

mock_print_output.assert_called_once()
call_kwargs = mock_print_output.call_args
assert call_kwargs.kwargs.get("data") == {"job_id": "test-job-id"}
assert call_kwargs.kwargs.get("show_key_value_list") is True


@patch('fabric_cli.utils.fab_cmd_job_utils.get_polling_interval')
@patch('fabric_cli.utils.fab_cmd_job_utils.jobs_api.get_item_job_instance')
@patch('fabric_cli.utils.fab_cmd_job_utils.time.sleep')
Expand Down Expand Up @@ -183,5 +200,31 @@ def test_validate_timeout_polling_interval_none_values_success():

validate_timeout_polling_interval(args)


@patch('fabric_cli.commands.jobs.fab_jobs_run.fab_ui.print_grey')
@patch('fabric_cli.commands.jobs.fab_jobs_run.fab_ui.print_output_format')
@patch('fabric_cli.commands.jobs.fab_jobs_run.jobs_api.run_on_demand_item_job')
def test_job_start_includes_job_id_in_data(mock_run_api, mock_print_output, mock_print_grey):
mock_response = Mock()
mock_response.status_code = 202
mock_run_api.return_value = (mock_response, "abc-123-job-id")

args = Namespace(
command="job",
jobs_command="start",
command_path="job start",
wait=False,
configuration=None,
)
item = Mock()
item.path = "/ws.Workspace/nb.Notebook"

job_run_exec_command(args, item)

mock_print_output.assert_called_once()
call_kwargs = mock_print_output.call_args
assert call_kwargs.kwargs.get("data") == {"job_id": "abc-123-job-id"}
assert call_kwargs.kwargs.get("show_key_value_list") is True

if __name__ == "__main__":
pytest.main([__file__])