2.1 KiB · text 5af55d9
defmodule GitGud.IssuesTest do
use GitGud.DataCase, async: true
alias GitGud.Issues
alias GitGud.Repositories.Numbering
import GitGud.ForgeFixtures
import GitGud.AccountsFixtures
setup do
{user, repo} = repository_fixture()
{:ok, repo: repo, user: user}
end
test "creates issues numbered from 1", %{repo: repo, user: user} do
{:ok, i1} = Issues.create_issue(repo, user, %{"title" => "first"})
{:ok, i2} = Issues.create_issue(repo, user, %{"title" => "second"})
assert i1.number == 1
assert i2.number == 2
end
test "numbering is shared with PRs via Numbering.next_for/1", %{repo: repo, user: user} do
{:ok, _i1} = Issues.create_issue(repo, user, %{"title" => "i1"})
# PR numbering should pick up at 2 even though no PR has been opened
# — Numbering looks at the higher of the two tables.
assert Numbering.next_for(repo.id) == 2
end
test "attach/detach label", %{repo: repo, user: user} do
{:ok, issue} = Issues.create_issue(repo, user, %{"title" => "labelled"})
label = label_fixture(repo)
assert :ok = Issues.attach_label(issue, label)
issue = Issues.get_issue!(repo, issue.number)
assert Enum.any?(issue.labels, &(&1.id == label.id))
assert :ok = Issues.detach_label(issue, label)
issue = Issues.get_issue!(repo, issue.number)
assert issue.labels == []
end
test "state transitions", %{repo: repo, user: user} do
{:ok, issue} = Issues.create_issue(repo, user, %{"title" => "closeable"})
assert {:ok, closed} = Issues.set_state(issue, "closed")
assert closed.state == "closed"
assert %DateTime{} = closed.closed_at
assert {:ok, reopened} = Issues.set_state(closed, "open")
assert reopened.state == "open"
end
test "add_comment", %{repo: repo, user: user} do
{:ok, issue} = Issues.create_issue(repo, user, %{"title" => "with comments"})
commenter = user_fixture()
assert {:ok, c} = Issues.add_comment(issue, commenter, %{"body" => "hello"})
assert c.author_id == commenter.id
assert c.body == "hello"
issue = Issues.get_issue!(repo, issue.number)
assert length(issue.comments) == 1
end
end