towerops/test/towerops_web/live/account_live/activity_test.exs

203 lines
6 KiB
Elixir

defmodule ToweropsWeb.AccountLive.ActivityTest do
use ToweropsWeb.ConnCase, async: true
import Phoenix.LiveViewTest
alias Towerops.Admin
setup :register_and_log_in_user_with_sudo
describe "mount" do
test "renders activity log page", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/account/activity")
assert html =~ "Activity Log"
end
test "displays audit logs for current user", %{conn: conn, user: user} do
{:ok, _log} =
Admin.create_audit_log(%{
action: "user_data_viewed",
superuser_id: user.id,
target_user_id: user.id
})
{:ok, _view, html} = live(conn, ~p"/account/activity")
assert html =~ "User data viewed"
end
test "shows sudo_mode_granted from setup", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/account/activity")
assert html =~ "Sudo mode granted"
end
end
describe "action descriptions" do
test "displays user_data_exported action", %{conn: conn, user: user} do
{:ok, _} =
Admin.create_audit_log(%{
action: "user_data_exported",
superuser_id: user.id,
target_user_id: user.id
})
{:ok, _view, html} = live(conn, ~p"/account/activity")
assert html =~ "exported your account data"
end
test "displays user_profile_updated action", %{conn: conn, user: user} do
{:ok, _} =
Admin.create_audit_log(%{
action: "user_profile_updated",
superuser_id: user.id,
target_user_id: user.id
})
{:ok, _view, html} = live(conn, ~p"/account/activity")
assert html =~ "updated your profile"
end
test "displays device_created action with metadata", %{conn: conn, user: user} do
{:ok, _} =
Admin.create_audit_log(%{
action: "device_created",
superuser_id: user.id,
target_user_id: user.id,
metadata: %{"device_name" => "Test Router"}
})
{:ok, _view, html} = live(conn, ~p"/account/activity")
assert html =~ "Test Router"
end
test "displays device_deleted action", %{conn: conn, user: user} do
{:ok, _} =
Admin.create_audit_log(%{
action: "device_deleted",
superuser_id: user.id,
target_user_id: user.id,
metadata: %{"device_name" => "Old Router"}
})
{:ok, _view, html} = live(conn, ~p"/account/activity")
assert html =~ "Old Router"
end
test "displays device_updated action", %{conn: conn, user: user} do
{:ok, _} =
Admin.create_audit_log(%{
action: "device_updated",
superuser_id: user.id,
target_user_id: user.id,
metadata: %{"device_id" => "abc-123"}
})
{:ok, _view, html} = live(conn, ~p"/account/activity")
assert html =~ "abc-123"
end
test "displays failed_access_attempt action", %{conn: conn, user: user} do
{:ok, _} =
Admin.create_audit_log(%{
action: "failed_access_attempt",
superuser_id: user.id,
target_user_id: user.id,
metadata: %{"resource" => "/admin/secret"}
})
{:ok, _view, html} = live(conn, ~p"/account/activity")
assert html =~ "/admin/secret"
end
test "displays privilege_escalation action", %{conn: conn, user: user} do
{:ok, _} =
Admin.create_audit_log(%{
action: "privilege_escalation",
superuser_id: user.id,
target_user_id: user.id,
metadata: %{"from_role" => "member", "to_role" => "admin"}
})
{:ok, _view, html} = live(conn, ~p"/account/activity")
assert html =~ "member"
assert html =~ "admin"
end
test "displays impersonate_start action", %{conn: conn, user: user} do
{:ok, _} =
Admin.create_audit_log(%{
action: "impersonate_start",
superuser_id: user.id,
target_user_id: user.id
})
{:ok, _view, html} = live(conn, ~p"/account/activity")
assert html =~ "impersonating"
end
test "displays impersonate_end action", %{conn: conn, user: user} do
{:ok, _} =
Admin.create_audit_log(%{
action: "impersonate_end",
superuser_id: user.id,
target_user_id: user.id
})
{:ok, _view, html} = live(conn, ~p"/account/activity")
assert html =~ "stopped impersonating"
end
test "displays org_data_accessed action", %{conn: conn, user: user} do
{:ok, _} =
Admin.create_audit_log(%{
action: "org_data_accessed",
superuser_id: user.id,
target_user_id: user.id,
metadata: %{"organization_id" => "org-123", "action" => "exported"}
})
{:ok, _view, html} = live(conn, ~p"/account/activity")
assert html =~ "org-123"
end
test "displays fallback for action without handler", %{conn: conn, user: user} do
{:ok, _} =
Admin.create_audit_log(%{
action: "monitoring_data_queried",
superuser_id: user.id,
target_user_id: user.id
})
{:ok, _view, html} = live(conn, ~p"/account/activity")
assert html =~ "Monitoring data queried"
end
test "renders request_path when present", %{conn: conn, user: user} do
{:ok, _} =
Admin.create_audit_log(%{
action: "user_profile_updated",
superuser_id: user.id,
target_user_id: user.id,
request_path: "/account/profile/edit"
})
{:ok, _view, html} = live(conn, ~p"/account/activity")
assert html =~ "/account/profile/edit"
end
test "renders data_accessed map when present", %{conn: conn, user: user} do
{:ok, _} =
Admin.create_audit_log(%{
action: "user_data_exported",
superuser_id: user.id,
target_user_id: user.id,
data_accessed: %{"profile" => "viewed", "sessions" => "listed"}
})
{:ok, _view, html} = live(conn, ~p"/account/activity")
assert html =~ "Data accessed"
end
end
end