diff --git a/app/lib/linear_cli/cli.ex b/app/lib/linear_cli/cli.ex index a717b10..7228f43 100644 --- a/app/lib/linear_cli/cli.ex +++ b/app/lib/linear_cli/cli.ex @@ -101,6 +101,8 @@ defmodule LinearCli.CLI do "l" => "list", "ls" => "list", "s" => "status", + "st" => "status", + "stat" => "status", "u" => "update", "pull-request" => "pr" }, diff --git a/app/test/linear_cli/cli/issue_commands_test.exs b/app/test/linear_cli/cli/issue_commands_test.exs index e123118..c10bc9c 100644 --- a/app/test/linear_cli/cli/issue_commands_test.exs +++ b/app/test/linear_cli/cli/issue_commands_test.exs @@ -880,6 +880,72 @@ defmodule LinearCli.CLI.IssueCommandsTest do assert_received :updated end + + test "alias 'st' routes to issue status" do + test_pid = self() + + Req.Test.stub(LinearCli.Api, fn conn -> + {:ok, body, conn} = Plug.Conn.read_body(conn) + %{"query" => query} = Jason.decode!(body) + + cond do + String.contains?(query, "issue(id: $id)") -> + Req.Test.json(conn, %{"data" => %{"issue" => issue_map()}}) + + String.contains?(query, "states {") -> + Req.Test.json(conn, states_response()) + + String.contains?(query, "issueUpdate") -> + send(test_pid, :updated) + + Req.Test.json(conn, %{ + "data" => %{"issueUpdate" => %{"issue" => issue_with_state("s3", "Done")}} + }) + + true -> + raise "no stub matched query: #{query}" + end + end) + + capture_io(fn -> + assert :ok = LinearCli.CLI.main(["issue", "st", "--status", "Done", "CRY-1"]) + end) + + assert_received :updated + end + + test "alias 'stat' routes to issue status" do + test_pid = self() + + Req.Test.stub(LinearCli.Api, fn conn -> + {:ok, body, conn} = Plug.Conn.read_body(conn) + %{"query" => query} = Jason.decode!(body) + + cond do + String.contains?(query, "issue(id: $id)") -> + Req.Test.json(conn, %{"data" => %{"issue" => issue_map()}}) + + String.contains?(query, "states {") -> + Req.Test.json(conn, states_response()) + + String.contains?(query, "issueUpdate") -> + send(test_pid, :updated) + + Req.Test.json(conn, %{ + "data" => %{"issueUpdate" => %{"issue" => issue_with_state("s3", "Done")}} + }) + + true -> + raise "no stub matched query: #{query}" + end + end) + + capture_io(fn -> + assert :ok = LinearCli.CLI.main(["issue", "stat", "--status", "Done", "CRY-1"]) + end) + + assert_received :updated + end end describe "issue update (Ruby: commands/issue/update.rb)" do diff --git a/app/test/linear_cli/cli_test.exs b/app/test/linear_cli/cli_test.exs index 16fb7b0..928ea57 100644 --- a/app/test/linear_cli/cli_test.exs +++ b/app/test/linear_cli/cli_test.exs @@ -282,6 +282,12 @@ defmodule LinearCli.CLITest do assert LinearCli.CLI.normalize_subcommand_aliases(["i", "pull-request", "CRY-1"]) == ["issue", "pr", "CRY-1"] + assert LinearCli.CLI.normalize_subcommand_aliases(["i", "st", "CRY-1"]) == + ["issue", "status", "CRY-1"] + + assert LinearCli.CLI.normalize_subcommand_aliases(["i", "stat", "CRY-1"]) == + ["issue", "status", "CRY-1"] + # `take` has no alias in Ruby either - unaliased subcommands pass through. assert LinearCli.CLI.normalize_subcommand_aliases(["issue", "take", "CRY-1"]) == ["issue", "take", "CRY-1"]