tarakan/test/tarakan_web/live/alert_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

79 lines
2.6 KiB
Elixir

defmodule TarakanWeb.AlertLiveTest do
use TarakanWeb.ConnCase, async: true
import Phoenix.LiveViewTest
alias Tarakan.Billing
alias Tarakan.Repo
test "redirects anonymous visitors to login", %{conn: conn} do
assert {:error, {:redirect, %{to: "/accounts/log-in"}}} = live(conn, ~p"/alerts")
end
test "creates, edits, toggles, and deletes a watchlist", %{conn: conn} do
account = account_fixture()
{:ok, view, _html} = conn |> log_in_account(account) |> live(~p"/alerts")
assert has_element?(view, "#watchlists")
assert has_element?(view, "#watchlist-form")
# Create
view
|> form("#watchlist-form", watchlist: %{name: "Deps", entries: "openai/codex\nacme/widget"})
|> render_submit()
[watchlist] = Billing.list_watchlists(account)
assert watchlist.name == "Deps"
assert watchlist.entries == ["openai/codex", "acme/widget"]
assert has_element?(view, "#watchlist-#{watchlist.id}")
assert has_element?(view, "#watchlist-#{watchlist.id}", "openai/codex")
# Toggle notify off
view |> element("#watchlist-notify-#{watchlist.id}") |> render_click()
refute Repo.get!(Billing.Watchlist, watchlist.id).notify
# Edit
view |> element("#watchlist-edit-#{watchlist.id}") |> render_click()
view
|> form("#watchlist-form", watchlist: %{name: "Deps v2", entries: "openai/codex"})
|> render_submit()
updated = Repo.get!(Billing.Watchlist, watchlist.id)
assert updated.name == "Deps v2"
assert updated.entries == ["openai/codex"]
assert has_element?(view, "#watchlist-#{watchlist.id}", "Deps v2")
# Delete
view |> element("#watchlist-delete-#{watchlist.id}") |> render_click()
refute has_element?(view, "#watchlist-#{watchlist.id}")
assert Billing.list_watchlists(account) == []
end
test "invalid entries show an error and do not persist", %{conn: conn} do
account = account_fixture()
{:ok, view, _html} = conn |> log_in_account(account) |> live(~p"/alerts")
html =
view
|> form("#watchlist-form", watchlist: %{name: "Bad", entries: "not a ref"})
|> render_submit()
assert html =~ "owner/name"
assert Billing.list_watchlists(account) == []
end
test "watchlists are owner-scoped", %{conn: conn} do
owner = account_fixture()
{:ok, _} =
Billing.create_watchlist(Tarakan.Accounts.Scope.for_account(owner), %{
"name" => "Private",
"entries" => ["openai/codex"]
})
{:ok, view, _html} = conn |> log_in_account(account_fixture()) |> live(~p"/alerts")
refute has_element?(view, "#watchlists", "Private")
end
end