Fresh repository history for elektrine/tarakan hosted at https://git.elektrine.com/elektrine/tarakan.
72 lines
2 KiB
Elixir
72 lines
2 KiB
Elixir
defmodule TarakanWeb.ModelAnalyticsLiveTest do
|
|
use TarakanWeb.ConnCase, async: true
|
|
|
|
import Phoenix.LiveViewTest
|
|
|
|
alias Tarakan.Repo
|
|
alias Tarakan.Scans.CanonicalFinding
|
|
|
|
defp confirm_findings(scan) do
|
|
for occurrence <- scan.findings do
|
|
CanonicalFinding
|
|
|> Repo.get!(occurrence.canonical_finding_id)
|
|
|> Ecto.Changeset.change(status: "verified")
|
|
|> Repo.update!()
|
|
end
|
|
end
|
|
|
|
test "says so plainly when nothing has been reported", %{conn: conn} do
|
|
{:ok, _view, html} = live(conn, ~p"/models")
|
|
|
|
assert html =~ "No model has reported enough findings yet"
|
|
end
|
|
|
|
# The scoreboard hides models below five reported findings, so both models
|
|
# need a real body of work before they show up at all.
|
|
defp unrelated_findings_json(count) do
|
|
findings =
|
|
for index <- 1..count do
|
|
%{
|
|
"file" => "lib/unrelated/module_#{index}.ex",
|
|
"line_start" => index * 7,
|
|
"line_end" => index * 7 + 2,
|
|
"severity" => "low",
|
|
"title" => "Unrelated observation (#{index})",
|
|
"description" => "Something else entirely."
|
|
}
|
|
end
|
|
|
|
Jason.encode!(%{"tarakan_scan_format" => 1, "findings" => findings})
|
|
end
|
|
|
|
test "scores models and lists the selected model's blind spots", %{conn: conn} do
|
|
account = github_account_fixture()
|
|
repository = github_repository_fixture(account)
|
|
|
|
found =
|
|
scan_fixture(repository, account, %{
|
|
"model" => "sharp-model",
|
|
"findings_json" => findings_json_fixture(5)
|
|
})
|
|
|
|
confirm_findings(found)
|
|
|
|
scan_fixture(repository, account, %{
|
|
"model" => "blunt-model",
|
|
"findings_json" => unrelated_findings_json(5)
|
|
})
|
|
|
|
{:ok, view, html} = live(conn, ~p"/models")
|
|
|
|
assert html =~ "sharp-model"
|
|
assert html =~ "blunt-model"
|
|
|
|
html =
|
|
view
|
|
|> element("#model-row-blunt-model")
|
|
|> render_click()
|
|
|
|
assert html =~ "Blind spots"
|
|
assert html =~ "Unsanitized input reaches interpolated query"
|
|
end
|
|
end
|