1.8 KiB · text 5af55d9
defmodule GitGud.OrganizationsTest do
use GitGud.DataCase, async: true
alias GitGud.Organizations
import GitGud.AccountsFixtures
import GitGud.ForgeFixtures
test "creating an organization makes the creator an admin" do
user = user_fixture()
assert {:ok, org} = Organizations.create_organization(user, %{"handle" => "acme"})
assert org.handle == "acme"
assert Organizations.org_admin?(org, user)
end
test "handle is normalized lowercase + unique" do
user = user_fixture()
{:ok, _} = Organizations.create_organization(user, %{"handle" => "AcMe"})
assert {:error, cs} = Organizations.create_organization(user, %{"handle" => "acme"})
assert "has already been taken" in errors_on(cs).handle
end
test "permission: repo owner is admin" do
{user, repo} = repository_fixture()
assert Organizations.permission(user, repo) == "admin"
end
test "permission: public repo is readable by anyone" do
{_user, repo} = repository_fixture()
{:ok, repo} = GitGud.Repositories.update_repository(repo, %{"visibility" => "public"})
assert Organizations.permission(nil, repo) == "read"
assert Organizations.permission(user_fixture(), repo) == "read"
end
test "permission: team grants" do
creator = user_fixture()
{:ok, org} = Organizations.create_organization(creator, %{"handle" => "permz"})
{:ok, team} = Organizations.create_team(org, %{"name" => "devs"})
member = user_fixture()
{:ok, _} = Organizations.add_team_member(team, member, "member")
{_, repo} = repository_fixture()
{:ok, _} = Organizations.grant_team_repo(team, repo, "write")
assert Organizations.permission(member, repo) == "write"
assert Organizations.can?(member, repo, :write)
refute Organizations.can?(member, repo, :admin)
end
end