diff --git a/app/lib/linear_cli/linear/user.ex b/app/lib/linear_cli/linear/user.ex index 94ffbdb..60ad370 100644 --- a/app/lib/linear_cli/linear/user.ex +++ b/app/lib/linear_cli/linear/user.ex @@ -74,8 +74,8 @@ defmodule LinearCli.Linear.User.Read.ByTeam do document = "query($id: String!) { team(id: $id) { members(first: 50) { nodes { #{User.base_fields()} } } } }" - with {:ok, %{"team" => team}} when is_map(team) <- Api.call(document, %{"id" => team_id}), - %{"members" => %{"nodes" => nodes}} <- team do + with {:ok, %{"team" => %{"members" => %{"nodes" => nodes}}}} <- + Api.call(document, %{"id" => team_id}) do {:ok, Enum.map(nodes, &User.from_map/1)} else {:ok, _} -> {:ok, []} diff --git a/app/test/linear_cli/linear/user_test.exs b/app/test/linear_cli/linear/user_test.exs index 0888385..41a174b 100644 --- a/app/test/linear_cli/linear/user_test.exs +++ b/app/test/linear_cli/linear/user_test.exs @@ -3,6 +3,58 @@ defmodule LinearCli.Linear.UserTest do alias LinearCli.Linear + test "team_members/1 returns a list of users for a valid team response" do + Req.Test.stub(LinearCli.Api, fn conn -> + Req.Test.json(conn, %{ + "data" => %{ + "team" => %{ + "members" => %{ + "nodes" => [ + %{"id" => "u1", "name" => "Alice", "email" => "alice@example.com"}, + %{"id" => "u2", "name" => "Bob", "email" => "bob@example.com"} + ] + } + } + } + }) + end) + + assert {:ok, [%Linear.User{id: "u1", name: "Alice"}, %Linear.User{id: "u2", name: "Bob"}]} = + Linear.team_members("t1") + end + + test "team_members/1 returns an empty list when team is null" do + Req.Test.stub(LinearCli.Api, fn conn -> + Req.Test.json(conn, %{"data" => %{"team" => nil}}) + end) + + assert {:ok, []} = Linear.team_members("nonexistent") + end + + test "team_members/1 returns an empty list when members key is absent" do + Req.Test.stub(LinearCli.Api, fn conn -> + Req.Test.json(conn, %{"data" => %{"team" => %{}}}) + end) + + assert {:ok, []} = Linear.team_members("t1") + end + + test "team_members/1 returns an empty list when nodes key is absent" do + Req.Test.stub(LinearCli.Api, fn conn -> + Req.Test.json(conn, %{"data" => %{"team" => %{"members" => %{}}}}) + end) + + assert {:ok, []} = Linear.team_members("t1") + end + + test "team_members/1 propagates API errors" do + Req.Test.stub(LinearCli.Api, fn conn -> + Req.Test.json(conn, %{"errors" => [%{"message" => "Unauthorized"}]}) + end) + + assert {:error, %Ash.Error.Unknown{}} = Linear.team_members("t1") + end + test "me/0 decodes the viewer, including nested teams" do Req.Test.stub(LinearCli.Api, fn conn -> Req.Test.json(conn, %{