Fresh repository history for elektrine/tarakan hosted at https://git.elektrine.com/elektrine/tarakan.
160 lines
5.8 KiB
Elixir
160 lines
5.8 KiB
Elixir
defmodule TarakanWeb.ExploreLiveTest do
|
|
use TarakanWeb.ConnCase
|
|
|
|
import Phoenix.LiveViewTest
|
|
|
|
alias Tarakan.Activity
|
|
|
|
test "renders the wire: registrations and unverified public reviews", %{conn: conn} do
|
|
submitter = github_account_fixture()
|
|
repository = listed_github_repository_fixture(submitter)
|
|
scan = scan_fixture(repository, submitter, %{"findings_json" => findings_json_fixture(1)})
|
|
|
|
{:ok, view, _html} = live(conn, ~p"/explore")
|
|
|
|
assert has_element?(view, "#activity-wire")
|
|
assert has_element?(view, "#wire-reg-#{repository.id}", "openai/codex")
|
|
assert has_element?(view, "#wire-scan-#{scan.id}", "@#{submitter.handle}")
|
|
assert has_element?(view, "#wire-scan-#{scan.id}", "1 finding")
|
|
end
|
|
|
|
test "filters the wire by kind", %{conn: conn} do
|
|
submitter = github_account_fixture()
|
|
repository = listed_github_repository_fixture(submitter)
|
|
scan = scan_fixture(repository, submitter)
|
|
|
|
{:ok, view, _html} = live(conn, ~p"/explore")
|
|
|
|
view |> element("#explore-filter button", "Registrations") |> render_click()
|
|
|
|
assert has_element?(view, "#wire-reg-#{repository.id}")
|
|
refute has_element?(view, "#wire-scan-#{scan.id}")
|
|
|
|
view |> element("#explore-filter button", "Reports") |> render_click()
|
|
|
|
assert has_element?(view, "#wire-scan-#{scan.id}")
|
|
refute has_element?(view, "#wire-reg-#{repository.id}")
|
|
end
|
|
|
|
test "new activity lands on the wire without a reload", %{conn: conn} do
|
|
{:ok, view, _html} = live(conn, ~p"/explore")
|
|
|
|
assert has_element?(view, "#activity-wire-empty")
|
|
|
|
submitter = github_account_fixture()
|
|
repository = listed_github_repository_fixture(submitter)
|
|
Activity.broadcast_registration(repository)
|
|
|
|
assert has_element?(view, "#wire-reg-#{repository.id}", "openai/codex")
|
|
end
|
|
|
|
test "verdicts on the wire show who ruled and how", %{conn: conn} do
|
|
submitter = github_account_fixture()
|
|
repository = listed_github_repository_fixture(submitter)
|
|
scan = scan_fixture(repository, submitter, %{"findings_json" => findings_json_fixture(1)})
|
|
reviewer = reviewer_account_fixture()
|
|
confirmation_fixture(scan, reviewer)
|
|
|
|
{:ok, view, _html} = live(conn, ~p"/explore")
|
|
|
|
assert render(view) =~ "@#{reviewer.handle}"
|
|
assert render(view) =~ "confirmed a finding on"
|
|
end
|
|
|
|
test "handles link to contributor profiles", %{conn: conn} do
|
|
submitter = github_account_fixture()
|
|
repository = listed_github_repository_fixture(submitter)
|
|
scan = scan_fixture(repository, submitter)
|
|
|
|
{:ok, view, _html} = live(conn, ~p"/explore")
|
|
|
|
assert view
|
|
|> element("#wire-scan-#{scan.id} a[href='/#{submitter.handle}']")
|
|
|> render() =~ "@#{submitter.handle}"
|
|
end
|
|
|
|
test "comments join the wire live and on reload", %{conn: conn} do
|
|
submitter = github_account_fixture()
|
|
repository = listed_github_repository_fixture(submitter)
|
|
scan = scan_fixture(repository, submitter, %{"findings_json" => findings_json_fixture(1)})
|
|
[finding] = scan.findings
|
|
|
|
{:ok, view, _html} = live(conn, ~p"/explore")
|
|
|
|
commenter = account_fixture()
|
|
scope = Tarakan.Accounts.Scope.for_account(commenter)
|
|
|
|
{:ok, comment} =
|
|
Tarakan.Discussion.create_comment(scope, %{finding | scan: scan}, %{
|
|
"body" => "Reproduced on a clean checkout."
|
|
})
|
|
|
|
assert has_element?(view, "#wire-comment-#{comment.id}", "@#{commenter.handle}")
|
|
assert has_element?(view, "#wire-comment-#{comment.id}", "commented on")
|
|
|
|
{:ok, reloaded, _html} = live(conn, ~p"/explore")
|
|
assert has_element?(reloaded, "#wire-comment-#{comment.id}")
|
|
|
|
reloaded |> element("#explore-filter button", "Comments") |> render_click()
|
|
assert has_element?(reloaded, "#wire-comment-#{comment.id}")
|
|
refute has_element?(reloaded, "#wire-scan-#{scan.id}")
|
|
end
|
|
|
|
test "search narrows the wire by handle or repository", %{conn: conn} do
|
|
submitter = github_account_fixture()
|
|
repository = listed_github_repository_fixture(submitter)
|
|
scan = scan_fixture(repository, submitter)
|
|
|
|
{:ok, view, _html} = live(conn, ~p"/explore")
|
|
|
|
view
|
|
|> form("#explore-search-form", %{"q" => submitter.handle})
|
|
|> render_change()
|
|
|
|
assert has_element?(view, "#wire-scan-#{scan.id}")
|
|
refute has_element?(view, "#wire-reg-#{repository.id}")
|
|
|
|
view
|
|
|> form("#explore-search-form", %{"q" => "no-such-thing"})
|
|
|> render_change()
|
|
|
|
assert has_element?(view, "#activity-wire-empty")
|
|
end
|
|
|
|
test "shows watcher presence", %{conn: conn} do
|
|
{:ok, view, _html} = live(conn, ~p"/explore")
|
|
|
|
assert has_element?(view, "#explore-watchers")
|
|
assert view |> element("#explore-watchers") |> render() =~ "watching"
|
|
end
|
|
|
|
test "hot findings rail ranks upvoted findings and refreshes on votes", %{conn: conn} do
|
|
submitter = github_account_fixture()
|
|
repository = listed_github_repository_fixture(submitter)
|
|
scan = scan_fixture(repository, submitter, %{"findings_json" => findings_json_fixture(1)})
|
|
[finding] = scan.findings
|
|
canonical = finding.canonical_finding
|
|
|
|
# Hot rail excludes pure single-run unconfirmed noise; second detection qualifies.
|
|
_second =
|
|
scan_fixture(repository, account_fixture(), %{
|
|
"findings_json" => findings_json_fixture(1),
|
|
"commit_sha" => scan.commit_sha
|
|
})
|
|
|
|
canonical = Tarakan.Repo.get!(Tarakan.Scans.CanonicalFinding, canonical.id)
|
|
|
|
{:ok, view, _html} = live(conn, ~p"/explore")
|
|
|
|
assert has_element?(view, "#hot-findings", "No findings upvoted this week.")
|
|
|
|
voter = Tarakan.Accounts.Scope.for_account(account_fixture())
|
|
{:ok, _summary} = Tarakan.Reputation.cast_vote(voter, "canonical_finding", canonical.id, 1)
|
|
|
|
assert has_element?(view, "#hot-finding-#{canonical.id}", "+1")
|
|
|
|
assert view
|
|
|> element("#hot-finding-#{canonical.id}")
|
|
|> render() =~ ~s(href="/findings/)
|
|
end
|
|
end
|