From ed94e410504b014a9fc0bb3147e78977d6ea3ea0 Mon Sep 17 00:00:00 2001 From: Andrew Dryga Date: Thu, 7 Sep 2023 09:34:56 -0600 Subject: [PATCH] Unlock editing synced users (#1991) --- elixir/apps/domain/lib/domain/actors.ex | 1 - .../web/lib/web/live/actors/components.ex | 6 +-- elixir/apps/web/lib/web/live/actors/show.ex | 6 +-- .../web/test/web/live/actors/edit_test.exs | 46 +++++++++++++++++-- .../live/actors/service_accounts/new_test.exs | 13 ++++++ .../test/web/live/actors/users/new_test.exs | 14 ++++++ 6 files changed, 74 insertions(+), 12 deletions(-) diff --git a/elixir/apps/domain/lib/domain/actors.ex b/elixir/apps/domain/lib/domain/actors.ex index 7ea7704ef..88d81b0d0 100644 --- a/elixir/apps/domain/lib/domain/actors.ex +++ b/elixir/apps/domain/lib/domain/actors.ex @@ -317,7 +317,6 @@ defmodule Domain.Actors do end end - # TODO: when actor is synced we should not allow changing the name def actor_synced?(%Actor{last_synced_at: nil}), do: false def actor_synced?(%Actor{}), do: true diff --git a/elixir/apps/web/lib/web/live/actors/components.ex b/elixir/apps/web/lib/web/live/actors/components.ex index f993e3e24..ab02c0361 100644 --- a/elixir/apps/web/lib/web/live/actors/components.ex +++ b/elixir/apps/web/lib/web/live/actors/components.ex @@ -44,7 +44,7 @@ defmodule Web.Actors.Components do end attr :type, :atom, required: true - attr :actor, :any, default: %{memberships: [], last_synced_at: nil}, required: false + attr :actor, :any, default: %Actors.Actor{memberships: [], last_synced_at: nil}, required: false attr :groups, :any, required: true attr :form, :any, required: true attr :subject, :any, required: true @@ -53,7 +53,7 @@ defmodule Web.Actors.Components do ~H"""
<.input - :if={is_nil(@actor.last_synced_at)} + :if={not Actors.actor_synced?(@actor)} label="Name" field={@form[:name]} placeholder="Full Name" @@ -76,7 +76,7 @@ defmodule Web.Actors.Components do required />
-
+
<.input type="select" multiple={true} diff --git a/elixir/apps/web/lib/web/live/actors/show.ex b/elixir/apps/web/lib/web/live/actors/show.ex index 06036ba51..e65e5d7dc 100644 --- a/elixir/apps/web/lib/web/live/actors/show.ex +++ b/elixir/apps/web/lib/web/live/actors/show.ex @@ -108,11 +108,7 @@ defmodule Web.Actors.Show do Viewing <%= actor_type(@actor.type) %> <%= @actor.name %> - <:action - :if={not Actors.actor_synced?(@actor)} - navigate={~p"/#{@account}/actors/#{@actor}/edit"} - icon="hero-pencil" - > + <:action navigate={~p"/#{@account}/actors/#{@actor}/edit"} icon="hero-pencil"> Edit <%= actor_type(@actor.type) %> diff --git a/elixir/apps/web/test/web/live/actors/edit_test.exs b/elixir/apps/web/test/web/live/actors/edit_test.exs index 1718da772..646e653b4 100644 --- a/elixir/apps/web/test/web/live/actors/edit_test.exs +++ b/elixir/apps/web/test/web/live/actors/edit_test.exs @@ -74,11 +74,39 @@ defmodule Web.Live.Actors.EditTest do form = form(lv, "form") + assert find_inputs(form) == [ + "actor[name]", + "actor[type]" + ] + + Fixtures.Actors.create_group(account: account) + + {:ok, lv, _html} = + conn + |> authorize_conn(identity) + |> live(~p"/#{account}/actors/#{actor}/edit") + + form = form(lv, "form") + assert find_inputs(form) == [ "actor[memberships][]", "actor[name]", "actor[type]" ] + + Fixtures.Actors.update(actor, last_synced_at: DateTime.utc_now()) + + {:ok, lv, _html} = + conn + |> authorize_conn(identity) + |> live(~p"/#{account}/actors/#{actor}/edit") + + form = form(lv, "form") + + assert find_inputs(form) == [ + "actor[memberships][]", + "actor[type]" + ] end test "renders changeset errors on input change", %{ @@ -184,7 +212,7 @@ defmodule Web.Live.Actors.EditTest do describe "service account" do setup do account = Fixtures.Accounts.create_account() - actor = Fixtures.Actors.create_actor(type: :account_admin_user, account: account) + actor = Fixtures.Actors.create_actor(type: :service_account, account: account) identity = Fixtures.Auth.create_identity( @@ -259,10 +287,22 @@ defmodule Web.Live.Actors.EditTest do form = form(lv, "form") + assert find_inputs(form) == [ + "actor[name]" + ] + + Fixtures.Actors.create_group(account: account) + + {:ok, lv, _html} = + conn + |> authorize_conn(identity) + |> live(~p"/#{account}/actors/#{actor}/edit") + + form = form(lv, "form") + assert find_inputs(form) == [ "actor[memberships][]", - "actor[name]", - "actor[type]" + "actor[name]" ] end diff --git a/elixir/apps/web/test/web/live/actors/service_accounts/new_test.exs b/elixir/apps/web/test/web/live/actors/service_accounts/new_test.exs index 83626b7ba..e02eafb49 100644 --- a/elixir/apps/web/test/web/live/actors/service_accounts/new_test.exs +++ b/elixir/apps/web/test/web/live/actors/service_accounts/new_test.exs @@ -74,6 +74,19 @@ defmodule Web.Live.Actors.ServiceAccount.NewTest do form = form(lv, "form") + assert find_inputs(form) == [ + "actor[name]" + ] + + Fixtures.Actors.create_group(account: account) + + {:ok, lv, _html} = + conn + |> authorize_conn(identity) + |> live(~p"/#{account}/actors/service_accounts/new") + + form = form(lv, "form") + assert find_inputs(form) == [ "actor[memberships][]", "actor[name]" diff --git a/elixir/apps/web/test/web/live/actors/users/new_test.exs b/elixir/apps/web/test/web/live/actors/users/new_test.exs index 704378298..423312a39 100644 --- a/elixir/apps/web/test/web/live/actors/users/new_test.exs +++ b/elixir/apps/web/test/web/live/actors/users/new_test.exs @@ -58,6 +58,20 @@ defmodule Web.Live.Actors.User.NewTest do form = form(lv, "form") + assert find_inputs(form) == [ + "actor[name]", + "actor[type]" + ] + + Fixtures.Actors.create_group(account: account) + + {:ok, lv, _html} = + conn + |> authorize_conn(identity) + |> live(~p"/#{account}/actors/users/new") + + form = form(lv, "form") + assert find_inputs(form) == [ "actor[memberships][]", "actor[name]",