Initial commit on Forgejo
Fresh repository history for elektrine/tarakan hosted at https://git.elektrine.com/elektrine/tarakan.
This commit is contained in:
commit
af6077b9c3
455 changed files with 78366 additions and 0 deletions
111
test/tarakan_web/live/repository_new_live_test.exs
Normal file
111
test/tarakan_web/live/repository_new_live_test.exs
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
defmodule TarakanWeb.RepositoryNewLiveTest do
|
||||
use TarakanWeb.ConnCase, async: false
|
||||
|
||||
import Phoenix.LiveViewTest
|
||||
|
||||
alias Tarakan.HostedRepositories
|
||||
alias Tarakan.Repositories
|
||||
|
||||
setup :register_and_log_in_account
|
||||
|
||||
setup do
|
||||
on_exit(fn ->
|
||||
File.rm_rf(Application.fetch_env!(:tarakan, Tarakan.HostedRepositories)[:root])
|
||||
end)
|
||||
|
||||
:ok
|
||||
end
|
||||
|
||||
test "requires authentication" do
|
||||
conn = Phoenix.ConnTest.build_conn()
|
||||
assert {:error, {:redirect, %{to: path}}} = live(conn, ~p"/repositories/new")
|
||||
assert path =~ "/accounts/log-in"
|
||||
end
|
||||
|
||||
test "creates a hosted repository and navigates to it", %{conn: conn, account: account} do
|
||||
{:ok, view, _html} = live(conn, ~p"/repositories/new")
|
||||
|
||||
assert has_element?(view, "#new-repository-form")
|
||||
|
||||
view
|
||||
|> form("#new-repository-form", repository: %{name: "from-the-ui"})
|
||||
|> render_submit()
|
||||
|
||||
assert_redirect(view, "/#{account.handle}/from-the-ui")
|
||||
assert HostedRepositories.resolve(account.handle, "from-the-ui")
|
||||
|
||||
# the bare GitHub-style path must dispatch through the hosted scope
|
||||
{:ok, repo_view, _html} = live(conn, "/#{account.handle}/from-the-ui")
|
||||
assert has_element?(repo_view, "#repository-name")
|
||||
end
|
||||
|
||||
test "shows validation errors inline", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, ~p"/repositories/new")
|
||||
|
||||
html =
|
||||
view
|
||||
|> form("#new-repository-form", repository: %{name: "bad name"})
|
||||
|> render_submit()
|
||||
|
||||
assert html =~ "may only contain"
|
||||
end
|
||||
|
||||
describe "remote registration" do
|
||||
setup %{conn: conn} do
|
||||
%{conn: log_in_account(conn, github_account_fixture())}
|
||||
end
|
||||
|
||||
test "registers a repository and opens its public record", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, ~p"/repositories/new")
|
||||
|
||||
view
|
||||
|> form("#register-remote-form", repository: %{url: "github.com/OpenAI/Codex"})
|
||||
|> render_submit()
|
||||
|
||||
assert_redirect(view, ~p"/github.com/openai/codex")
|
||||
assert Repositories.get_github_repository("openai", "codex")
|
||||
|
||||
{:ok, record_view, _html} = live(conn, ~p"/github.com/openai/codex/security")
|
||||
|
||||
assert has_element?(record_view, "#repository-name")
|
||||
assert has_element?(record_view, "#repository-source-link")
|
||||
assert has_element?(record_view, "#github-metadata")
|
||||
assert has_element?(record_view, "#repository-submitter")
|
||||
assert has_element?(record_view, "#scans-empty")
|
||||
end
|
||||
|
||||
test "shows a useful error for an invalid repository", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, ~p"/repositories/new")
|
||||
|
||||
view
|
||||
|> form("#register-remote-form",
|
||||
repository: %{url: "https://example.com/not/github"}
|
||||
)
|
||||
|> render_submit()
|
||||
|
||||
assert has_element?(view, "#repository_url-error")
|
||||
end
|
||||
|
||||
test "rejects a valid-looking repository that GitHub cannot find", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, ~p"/repositories/new")
|
||||
|
||||
view
|
||||
|> form("#register-remote-form", repository: %{url: "missing/repository"})
|
||||
|> render_submit()
|
||||
|
||||
assert has_element?(view, "#repository_url-error")
|
||||
refute Repositories.get_github_repository("missing", "repository")
|
||||
end
|
||||
|
||||
test "shows the same safe error for a private repository", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, ~p"/repositories/new")
|
||||
|
||||
view
|
||||
|> form("#register-remote-form", repository: %{url: "private/repository"})
|
||||
|> render_submit()
|
||||
|
||||
assert has_element?(view, "#repository_url-error")
|
||||
refute Repositories.get_github_repository("private", "repository")
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue