defmodule GitGudWeb.JobTokenLiveTest do
@moduledoc "The job-token access settings page."
use GitGudWeb.ConnCase, async: false
import GitGud.AccountsFixtures
import GitGud.ForgeFixtures
import Phoenix.LiveViewTest
alias GitGud.Repositories.Storage
alias GitGud.Workflows.JobTokenGrants
@moduletag :git_required
setup do
if System.find_executable("git") == nil, do: {:skip, "git not on PATH"}, else: :ok
end
defp path_of(repo) do
repo = GitGud.Repo.preload(repo, [:owner, :organization], force: true)
Storage.repo_handle(repo) <> "/" <> repo.name
end
test "the owner grants and removes another repository's access", %{conn: conn} do
{owner, repo} = repository_fixture()
{_, source} = repository_fixture()
{:ok, view, _html} =
conn |> log_in_user(owner) |> live("/r/#{path_of(repo)}/settings/job-tokens")
html =
view
|> form("form[phx-submit=create_grant]", %{
"source" => path_of(source),
"read" => "true",
"dispatch" => "true"
})
|> render_submit()
assert html =~ path_of(source)
assert html =~ "read images & packages, dispatch workflows"
assert [grant] = JobTokenGrants.list(repo)
assert JobTokenGrants.allows?(repo, source.id, :dispatch)
view |> element("button[phx-value-id='#{grant.id}']") |> render_click()
assert JobTokenGrants.list(repo) == []
end
test "an unknown source is reported, not granted", %{conn: conn} do
{owner, repo} = repository_fixture()
{:ok, view, _html} =
conn |> log_in_user(owner) |> live("/r/#{path_of(repo)}/settings/job-tokens")
html =
view
|> form("form[phx-submit=create_grant]", %{"source" => "nobody/nothing", "read" => "true"})
|> render_submit()
assert html =~ "No repository or organization called nobody/nothing"
assert JobTokenGrants.list(repo) == []
end
test "someone who can't administer the repository doesn't see the grants", %{conn: conn} do
{_owner, repo} = repository_fixture(%{visibility: "public"})
{_, source} = repository_fixture()
{:ok, _} = JobTokenGrants.create(repo, path_of(source), %{read: true})
assert {:error, {:redirect, %{to: to}}} =
conn
|> log_in_user(user_fixture())
|> live("/r/#{path_of(repo)}/settings/job-tokens")
assert to == "/r/#{path_of(repo)}"
end
end
neiam
/gitgud
Git Gud
public · Issues · Pulls · Labels · Forks · Compare · Actions success · Badges · Packages
⭐
1
Log in to mark this repository.
2.3 KiB · text
History
b868907