diff --git a/elixir/apps/web/lib/web/components/core_components.ex b/elixir/apps/web/lib/web/components/core_components.ex index 578b1f44a..02de65900 100644 --- a/elixir/apps/web/lib/web/components/core_components.ex +++ b/elixir/apps/web/lib/web/components/core_components.ex @@ -926,7 +926,8 @@ defmodule Web.CoreComponents do end def identity_has_email?(identity) do - not is_nil(provider_email(identity)) or identity.provider.adapter == :email + not is_nil(provider_email(identity)) or identity.provider.adapter == :email or + identity.provider_identifier =~ "@" end defp provider_email(identity) do diff --git a/elixir/apps/web/test/web/live/actors/show_test.exs b/elixir/apps/web/test/web/live/actors/show_test.exs index 5696a1b71..2bcfca2a4 100644 --- a/elixir/apps/web/test/web/live/actors/show_test.exs +++ b/elixir/apps/web/test/web/live/actors/show_test.exs @@ -501,7 +501,34 @@ defmodule Web.Live.Actors.ShowTest do } ) - oidc_identity = Fixtures.Auth.create_identity(account: account, actor: actor) + {oidc_provider, _bypass} = + Fixtures.Auth.start_and_create_openid_connect_provider(account: account) + + oidc_manually_provisioned_identity = + Fixtures.Auth.create_identity( + account: account, + actor: actor, + provider: oidc_provider, + provider_identifier: Fixtures.Auth.email() + ) + + oidc_identity = + Fixtures.Auth.create_identity( + account: account, + actor: actor, + provider: oidc_provider, + provider_state: %{ + "userinfo" => %{"email" => Fixtures.Auth.email()} + } + ) + + oidc_identity_with_no_email = + Fixtures.Auth.create_identity( + account: account, + actor: actor, + provider: oidc_provider, + provider_identifier: "sub123" + ) email_identity = Fixtures.Auth.create_identity(account: account, actor: actor, provider: email_provider) @@ -524,9 +551,23 @@ defmodule Web.Live.Actors.ShowTest do |> element("#identity-#{google_identity.id} button", "Send Welcome Email") |> has_element?() - refute lv + assert lv + |> element( + "#identity-#{oidc_manually_provisioned_identity.id} button", + "Send Welcome Email" + ) + |> has_element?() + + assert lv |> element("#identity-#{oidc_identity.id} button", "Send Welcome Email") |> has_element?() + + refute lv + |> element( + "#identity-#{oidc_identity_with_no_email.id} button", + "Send Welcome Email" + ) + |> has_element?() end test "allows deleting identities", %{