defmodule GitGud.SymsTest do
use GitGud.DataCase, async: false
import GitGud.ForgeFixtures
import GitGud.AccountsFixtures
alias GitGud.Syms
setup do
on_exit(fn -> Application.delete_env(:git_gud, :syms) end)
Application.put_env(:git_gud, :syms, ["⭐", "🚀", "❤️"])
:ok
end
test "toggling adds then removes a mark" do
user = user_fixture()
{_u, repo} = repository_fixture(%{owner: user})
assert {:ok, :marked} = Syms.toggle(user, repo, "⭐")
assert Syms.marks(user, repo) == ["⭐"]
assert Syms.counts(repo) == %{"⭐" => 1}
assert {:ok, :unmarked} = Syms.toggle(user, repo, "⭐")
assert Syms.marks(user, repo) == []
assert Syms.counts(repo) == %{}
end
test "a user can hold several symbols on one repo at once" do
user = user_fixture()
{_u, repo} = repository_fixture(%{owner: user})
{:ok, :marked} = Syms.toggle(user, repo, "⭐")
{:ok, :marked} = Syms.toggle(user, repo, "❤️")
assert Enum.sort(Syms.marks(user, repo)) == Enum.sort(["⭐", "❤️"])
assert Syms.counts(repo) == %{"⭐" => 1, "❤️" => 1}
end
test "an unconfigured symbol is refused" do
user = user_fixture()
{_u, repo} = repository_fixture(%{owner: user})
assert {:error, :unknown_symbol} = Syms.toggle(user, repo, "🍕")
assert Syms.marks(user, repo) == []
end
test "an empty configured set disables the feature" do
user = user_fixture()
{_u, repo} = repository_fixture(%{owner: user})
{:ok, :marked} = Syms.toggle(user, repo, "⭐")
Application.put_env(:git_gud, :syms, [])
refute Syms.enabled?()
assert {:error, :unknown_symbol} = Syms.toggle(user, repo, "⭐")
# The row survives; it is only hidden.
assert Syms.marks(user, repo) == []
assert Syms.counts(repo) == %{}
end
test "retiring a symbol hides its marks, and re-adding brings them back" do
user = user_fixture()
{_u, repo} = repository_fixture(%{owner: user})
{:ok, :marked} = Syms.toggle(user, repo, "🚀")
Application.put_env(:git_gud, :syms, ["⭐"])
assert Syms.marks(user, repo) == []
assert Syms.list_marked(user, "🚀") == []
assert Syms.counts_for_user(user) == %{}
Application.put_env(:git_gud, :syms, ["⭐", "🚀"])
assert Syms.marks(user, repo) == ["🚀"]
assert Syms.list_marked(user, "🚀") |> Enum.map(& &1.id) == [repo.id]
end
test "list_marked and counts_for_user only see this user's marks" do
mine = user_fixture()
theirs = user_fixture()
{_u, repo} = repository_fixture(%{owner: mine})
{:ok, :marked} = Syms.toggle(mine, repo, "⭐")
{:ok, :marked} = Syms.toggle(theirs, repo, "⭐")
assert Syms.counts_for_user(mine) == %{"⭐" => 1}
assert Syms.counts(repo) == %{"⭐" => 2}
assert Syms.list_marked(mine, "⭐") |> Enum.map(& &1.id) == [repo.id]
end
test "garbage config degrades to disabled rather than raising" do
Application.put_env(:git_gud, :syms, "not a list")
assert Syms.symbols() == []
refute Syms.enabled?()
end
end
neiam /gitgud
Git Gud
public · Issues · Pulls · Labels · Forks · Compare · Actions success · Packages
⭐
Log in to mark this repository.
3.0 KiB · text
History
06a9b53