diff --git a/CHANGELOG.md b/CHANGELOG.md index de5252c4bb..80627ae6ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ All notable changes to this project will be documented in this file. ### Fixed - To make internal stats API requests for password-protected shared links, shared link auth cookie must be set in the requests +- Fix issue with site guests in Editor role and team members in Editor role not being able to change the domain of site ## v3.1.0 - 2025-11-13 diff --git a/lib/plausible_web/live/change_domain.ex b/lib/plausible_web/live/change_domain.ex index a840f623dc..c3d71009e0 100644 --- a/lib/plausible_web/live/change_domain.ex +++ b/lib/plausible_web/live/change_domain.ex @@ -28,6 +28,7 @@ defmodule PlausibleWeb.Live.ChangeDomain do site = Plausible.Sites.get_for_user!(socket.assigns.current_user, domain, roles: [ + :editor, :owner, :admin, :super_admin diff --git a/test/plausible_web/live/change_domain_test.exs b/test/plausible_web/live/change_domain_test.exs index 9b7ac6b1b0..18ef42a876 100644 --- a/test/plausible_web/live/change_domain_test.exs +++ b/test/plausible_web/live/change_domain_test.exs @@ -82,22 +82,38 @@ defmodule PlausibleWeb.Live.ChangeDomainTest do assert is_nil(site.domain_changed_from) end - test "successful form submission updates database", %{conn: conn, site: site} do - original_domain = site.domain - new_domain = "new.#{site.domain}" - {:ok, lv, _html} = live(conn, "/#{site.domain}/change-domain") + for {role, membership_type} <- [ + {:editor, :site_guest}, + {:editor, :team_member}, + {:admin, :team_member}, + {:owner, :team_member} + ] do + test "#{Phoenix.Naming.humanize(membership_type)} with role #{role} can submit the form and it changes the record in the database", + %{conn: conn, user: user} do + site = new_site() - lv - |> element("form") - |> render_submit(%{site: %{domain: new_domain}}) + add_site_guest_or_team_member(site, + user: user, + role: unquote(role), + membership_type: unquote(membership_type) + ) - on_ee do - render_async(lv, 500) + original_domain = site.domain + new_domain = "new.#{site.domain}" + {:ok, lv, _html} = live(conn, "/#{site.domain}/change-domain") + + lv + |> element("form") + |> render_submit(%{site: %{domain: new_domain}}) + + on_ee do + render_async(lv, 500) + end + + site = Repo.reload!(site) + assert site.domain == new_domain + assert site.domain_changed_from == original_domain end - - site = Repo.reload!(site) - assert site.domain == new_domain - assert site.domain_changed_from == original_domain end test "successful form submission navigates to success page", %{conn: conn, site: site} do diff --git a/test/support/teams/test.ex b/test/support/teams/test.ex index 93738a6285..d4c699889d 100644 --- a/test/support/teams/test.ex +++ b/test/support/teams/test.ex @@ -112,6 +112,13 @@ defmodule Plausible.Teams.Test do end end + def add_site_guest_or_team_member(site, args \\ []) do + case Keyword.pop!(args, :membership_type) do + {:site_guest, args} -> add_guest(site, args) + {:team_member, args} -> add_member(site.team, args) + end + end + def add_guest(site, args \\ []) do user = Keyword.get(args, :user, new_user()) role = Keyword.fetch!(args, :role)