defmodule OpenAgentsWeb.CommentControllerTest do
use OpenAgentsWeb.ConnCase
setup %{conn: conn}, do: {:ok, conn: put_forge_api_token(conn, "comments", repository())}
alias OpenAgents.Issues
alias OpenAgents.Agents
setup do
{:ok, issue} = Issues.create_issue(repository(), %{title: "Comment target"})
%{issue: issue}
end
test "GET /api/v1/repos/:owner/:repo/issues/:issue_number/comments lists comments", %{
conn: conn,
issue: issue
} do
Issues.create_comment(%{issue_id: issue.id, body: "First comment"})
conn =
get(conn, ~p"/api/v1/repos/OpenAgentsInc/openagents.com/issues/#{issue.number}/comments")
assert %{"comments" => [comment]} = json_response(conn, 200)
assert comment["body"] == "First comment"
end
test "POST /api/v1/repos/:owner/:repo/issues/:issue_number/comments creates a comment", %{
conn: conn,
issue: issue
} do
conn =
post(
conn,
~p"/api/v1/repos/OpenAgentsInc/openagents.com/issues/#{issue.number}/comments",
%{
body: "New comment"
}
)
assert %{"body" => "New comment"} = json_response(conn, 201)
end
test "an unlinked agent can create a comment with an agent author", %{
conn: conn,
issue: issue
} do
{:ok, _agent, credential} =
Agents.register(%{
handle: "comment-agent",
display_name: "Comment agent",
registration_ip: "192.0.2.51"
})
conn =
conn
|> put_req_header("authorization", "Bearer #{credential}")
|> post(
~p"/api/v1/repos/OpenAgentsInc/openagents.com/issues/#{issue.number}/comments",
%{body: "Agent comment"}
)
assert %{"body" => "Agent comment", "user" => %{"agent" => true, "handle" => "comment-agent"}} =
json_response(conn, 201)
end
test "GET /api/v1/repos/:owner/:repo/issues/comments/:id returns a comment", %{
conn: conn,
issue: issue
} do
{:ok, comment} = Issues.create_comment(%{issue_id: issue.id, body: "Show me"})
conn =
get(conn, ~p"/api/v1/repos/OpenAgentsInc/openagents.com/issues/comments/#{comment.id}")
assert %{"body" => "Show me"} = json_response(conn, 200)
end
test "PATCH /api/v1/repos/:owner/:repo/issues/comments/:id updates a comment", %{
conn: conn,
issue: issue
} do
{:ok, comment} = Issues.create_comment(%{issue_id: issue.id, body: "Before"})
conn =
patch(conn, ~p"/api/v1/repos/OpenAgentsInc/openagents.com/issues/comments/#{comment.id}", %{
body: "After"
})
assert %{"body" => "After"} = json_response(conn, 200)
end
test "DELETE /api/v1/repos/:owner/:repo/issues/comments/:id removes a comment", %{
conn: conn,
issue: issue
} do
{:ok, comment} = Issues.create_comment(%{issue_id: issue.id, body: "Delete me"})
conn =
delete(conn, ~p"/api/v1/repos/OpenAgentsInc/openagents.com/issues/comments/#{comment.id}")
assert response(conn, 204)
end
defp repository do
OpenAgents.Repositories.get_by_path!("OpenAgentsInc", "openagents.com")
end
end