Public Access
Post-merge / detect-type (push) Successful in 6s
Post-merge / validate-commit-msg (push) Successful in 6s
Post-merge / configure-repo (push) Successful in 9s
Post-merge / release (push) Successful in 1m0s
Post-merge / vikunja (push) Successful in 14s
Post-merge / sync-wiki (push) Successful in 59s
Post-merge / badges (push) Successful in 1m12s
84 lines
3.5 KiB
Python
84 lines
3.5 KiB
Python
"""Unit tests for devx.tools.create_task."""
|
|
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
from click.testing import CliRunner
|
|
|
|
from devx.tools.create_task import cli
|
|
|
|
|
|
class TestCreateTaskCli:
|
|
@patch("devx.tools.create_task.VikunjaClient")
|
|
@patch.dict("os.environ", {"VIKUNJA_TOKEN": "tok"})
|
|
def test_success(self, mock_client_cls: MagicMock) -> None:
|
|
mock_client = MagicMock()
|
|
mock_client.create_task.return_value = {"identifier": "DEVX-60", "id": 60}
|
|
mock_client_cls.return_value = mock_client
|
|
runner = CliRunner()
|
|
result = runner.invoke(cli, ["--title", "Add feature X"])
|
|
assert result.exit_code == 0
|
|
assert "DEVX-60" in result.output
|
|
mock_client.create_task.assert_called_once()
|
|
|
|
@patch.dict("os.environ", {}, clear=True)
|
|
def test_missing_token(self) -> None:
|
|
runner = CliRunner()
|
|
result = runner.invoke(cli, ["--title", "Add feature X"])
|
|
assert result.exit_code != 0
|
|
assert "VIKUNJA_TOKEN" in result.output
|
|
|
|
@patch("devx.tools.create_task.VikunjaClient")
|
|
@patch.dict("os.environ", {"VIKUNJA_TOKEN": "tok"})
|
|
def test_with_description(self, mock_client_cls: MagicMock) -> None:
|
|
mock_client = MagicMock()
|
|
mock_client.create_task.return_value = {"identifier": "DEVX-61", "id": 61}
|
|
mock_client_cls.return_value = mock_client
|
|
runner = CliRunner()
|
|
result = runner.invoke(
|
|
cli,
|
|
["--title", "Add feature Y", "--description", "<p>desc</p>"],
|
|
)
|
|
assert result.exit_code == 0
|
|
call_args = mock_client.create_task.call_args
|
|
assert call_args.args[1] == "Add feature Y"
|
|
assert call_args.args[2] == "<p>desc</p>"
|
|
|
|
@patch("devx.tools.create_task.VikunjaClient")
|
|
@patch.dict("os.environ", {"VIKUNJA_TOKEN": "tok"})
|
|
def test_description_from_stdin(self, mock_client_cls: MagicMock) -> None:
|
|
mock_client = MagicMock()
|
|
mock_client.create_task.return_value = {"identifier": "DEVX-62", "id": 62}
|
|
mock_client_cls.return_value = mock_client
|
|
runner = CliRunner()
|
|
result = runner.invoke(
|
|
cli,
|
|
["--title", "Add feature Z", "--description", "-"],
|
|
input="<p>stdin desc</p>",
|
|
)
|
|
assert result.exit_code == 0
|
|
mock_client.create_task.assert_called_once()
|
|
call_args = mock_client.create_task.call_args
|
|
assert call_args.args[2] == "<p>stdin desc</p>"
|
|
|
|
@patch("devx.tools.create_task.VikunjaClient")
|
|
@patch.dict("os.environ", {"VIKUNJA_TOKEN": "tok"})
|
|
def test_custom_project_id(self, mock_client_cls: MagicMock) -> None:
|
|
mock_client = MagicMock()
|
|
mock_client.create_task.return_value = {"identifier": "GRM-10", "id": 10}
|
|
mock_client_cls.return_value = mock_client
|
|
runner = CliRunner()
|
|
result = runner.invoke(cli, ["--title", "Task", "--project-id", "3"])
|
|
assert result.exit_code == 0
|
|
mock_client.create_task.assert_called_once_with(3, "Task", "")
|
|
|
|
@patch("devx.tools.create_task.VikunjaClient")
|
|
@patch.dict("os.environ", {"VIKUNJA_TOKEN": "tok"})
|
|
def test_no_identifier_in_response(self, mock_client_cls: MagicMock) -> None:
|
|
mock_client = MagicMock()
|
|
mock_client.create_task.return_value = {"id": 99}
|
|
mock_client_cls.return_value = mock_client
|
|
runner = CliRunner()
|
|
result = runner.invoke(cli, ["--title", "Task"])
|
|
assert result.exit_code == 0
|
|
assert "id=99" in result.output
|