1.7 KiB · text 5af55d9
defmodule GitGud.ReportsTest do
use GitGud.DataCase, async: true
alias GitGud.Reports
import GitGud.AccountsFixtures
test "open + list_open" do
u = user_fixture()
assert {:ok, r} = Reports.open(u, {"issue_comment", 42}, "spam", "spammy link")
assert r.state == "open"
open = Reports.list_open()
assert Enum.any?(open, &(&1.id == r.id))
end
test "duplicate open by same reporter is rejected" do
u = user_fixture()
{:ok, _} = Reports.open(u, {"issue_comment", 1}, "abuse")
assert {:error, cs} = Reports.open(u, {"issue_comment", 1}, "abuse")
assert errors_on(cs)[:target_id] != nil
end
test "different reporters can report the same target" do
a = user_fixture()
b = user_fixture()
{:ok, _} = Reports.open(a, {"actor", 99}, "harassment")
{:ok, _} = Reports.open(b, {"actor", 99}, "harassment")
end
test "rejects unknown reason" do
u = user_fixture()
assert {:error, cs} = Reports.open(u, {"issue", 1}, "weird_reason")
assert errors_on(cs)[:reason] |> List.first() =~ "invalid"
end
test "dismiss + action flip state and stamp resolver" do
u = user_fixture()
admin = user_fixture()
{:ok, r} = Reports.open(u, {"issue", 1}, "spam")
{:ok, dismissed} = Reports.dismiss(r, admin, "looked fine")
assert dismissed.state == "dismissed"
assert dismissed.resolved_by_id == admin.id
assert dismissed.resolution_notes == "looked fine"
assert dismissed.resolved_at
# After resolution, reporter may open a fresh one.
assert {:ok, _r2} = Reports.open(u, {"issue", 1}, "spam")
end
test "open_count" do
assert Reports.open_count() == 0
u = user_fixture()
{:ok, _} = Reports.open(u, {"issue", 7}, "off_topic")
assert Reports.open_count() == 1
end
end