tarakan/test/tarakan_web/live/profile_live_test.exs
Maxfield Luke af6077b9c3
All checks were successful
CI and deploy / Test (push) Successful in 4m52s
CI and deploy / Deploy production (push) Successful in 23s
Initial commit on Forgejo
Fresh repository history for elektrine/tarakan hosted at
https://git.elektrine.com/elektrine/tarakan.
2026-07-29 04:43:40 -04:00

101 lines
4 KiB
Elixir

defmodule TarakanWeb.ProfileLiveTest do
use TarakanWeb.ConnCase
import Phoenix.LiveViewTest
test "renders a contributor profile with public contribution counts", %{conn: conn} do
submitter = github_account_fixture()
repository = listed_github_repository_fixture(submitter)
scan = scan_fixture(repository, submitter, %{"findings_json" => findings_json_fixture(2)})
confirmation_fixture(scan, reviewer_account_fixture())
{:ok, view, _html} = live(conn, ~p"/#{submitter.handle}")
assert has_element?(view, "#profile-handle", submitter.handle)
assert has_element?(view, "#profile-review-count", "1")
assert has_element?(view, "#profile-finding-count", "2")
assert has_element?(view, "#profile-repo-count", "1")
assert has_element?(view, "#profile-reviews", "reviewed")
assert has_element?(view, "#profile-repositories", repository.name)
assert has_element?(view, "#profile-findings")
end
test "a moderator profile shows the role badge", %{conn: conn} do
moderator = moderator_account_fixture()
{:ok, view, _html} = live(conn, ~p"/#{moderator.handle}")
assert has_element?(view, "#profile-role", "Moderator")
end
test "an unknown handle returns not found", %{conn: conn} do
assert_error_sent 404, fn -> get(conn, ~p"/#{"ghost-nobody"}") end
end
test "a submitter handle on the security page links to the profile", %{conn: conn} do
submitter = github_account_fixture()
repository = listed_github_repository_fixture(submitter)
scan_fixture(repository, submitter, %{"findings_json" => findings_json_fixture(1)})
{:ok, view, _html} = live(conn, ~p"/github.com/openai/codex/security")
assert has_element?(view, ~s(a[href="/#{submitter.handle}"]))
end
test "finding rows link to the finding page", %{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 = hd(scan.findings || Tarakan.Repo.preload(scan, :findings).findings)
{:ok, view, _html} = live(conn, ~p"/#{submitter.handle}")
assert has_element?(
view,
~s(#profile-finding-#{finding.public_id} a[href="/findings/#{finding.public_id}"])
)
end
test "renders the credits tile and the recent ledger", %{conn: conn} do
account = account_fixture()
{:ok, _entry} =
Tarakan.Credits.credit(account, :mint_finding_verified, {"canonical_finding", 1})
{:ok, _entry} = Tarakan.Credits.debit(account, :spend_priority_boost, nil, 20)
{:ok, view, _html} = live(conn, ~p"/#{account.handle}")
assert has_element?(view, "#profile-credit-balance", "30")
assert has_element?(view, "#profile-credits", "mint finding verified")
assert has_element?(view, "#profile-credits", "+50")
assert has_element?(view, "#profile-credits", "-20")
assert has_element?(view, "#profile-credits", "balance 30")
end
test "renders an empty credits ledger", %{conn: conn} do
account = account_fixture()
{:ok, view, _html} = live(conn, ~p"/#{account.handle}")
assert has_element?(view, "#profile-credit-balance", "0")
assert has_element?(view, "#profile-no-credits")
end
test "the badge strip renders earned badges only", %{conn: conn} do
submitter = github_account_fixture()
repository = listed_github_repository_fixture(submitter)
scan_fixture(repository, submitter, %{"findings_json" => findings_json_fixture(1)})
{:ok, view, _html} = live(conn, ~p"/#{submitter.handle}")
assert has_element?(view, "#profile-badges")
assert has_element?(view, "#profile-badge-first_blood", "First blood")
refute has_element?(view, "#profile-badge-century")
refute has_element?(view, "#profile-badge-sharpshooter")
end
test "a profile without earned badges renders no badge strip", %{conn: conn} do
account = account_fixture()
{:ok, view, _html} = live(conn, ~p"/#{account.handle}")
refute has_element?(view, "#profile-badges")
end
end