<%= for site <- @sites.entries do %>
@@ -719,6 +729,7 @@ defmodule PlausibleWeb.Live.Sites do
end
defp set_filter_text(socket, filter_text) do
+ filter_text = String.trim(filter_text)
uri = socket.assigns.uri
uri_params =
diff --git a/lib/plausible_web/plugs/auth_plug.ex b/lib/plausible_web/plugs/auth_plug.ex
index 27f6d5455a..e7deb35e16 100644
--- a/lib/plausible_web/plugs/auth_plug.ex
+++ b/lib/plausible_web/plugs/auth_plug.ex
@@ -20,7 +20,9 @@ defmodule PlausibleWeb.AuthPlug do
user = user_session.user
current_team_id_from_session = Plug.Conn.get_session(conn, "current_team_id")
- current_team_id = conn.params["__team"] || current_team_id_from_session
+
+ current_team_id =
+ conn.params["__team"] || current_team_id_from_session || user.last_team_identifier
{current_team, current_team_role} =
if current_team_id do
@@ -35,9 +37,11 @@ defmodule PlausibleWeb.AuthPlug do
conn =
cond do
current_team && current_team_id != current_team_id_from_session ->
+ Plausible.Users.remember_last_team(user, current_team_id)
Plug.Conn.put_session(conn, "current_team_id", current_team_id)
is_nil(current_team) && not is_nil(current_team_id_from_session) ->
+ Plausible.Users.remember_last_team(user, nil)
Plug.Conn.delete_session(conn, "current_team_id")
true ->
diff --git a/lib/plausible_web/templates/site/new.html.heex b/lib/plausible_web/templates/site/new.html.heex
index a504d2089e..0ad01c0340 100644
--- a/lib/plausible_web/templates/site/new.html.heex
+++ b/lib/plausible_web/templates/site/new.html.heex
@@ -14,35 +14,6 @@
resource="sites"
/>
- <%= if ee?() and (is_nil(@current_team) or is_nil(@current_team.trial_expiry_date)) do %>
-
-
-
-
-
-
- When you create your first site, your account will enter a 30 day free trial.
-
-
-
-
-
- <% end %>
-
<.input
help_text="Just the naked domain or subdomain without 'www', 'https' etc."
diff --git a/test/plausible_web/controllers/auth_controller_test.exs b/test/plausible_web/controllers/auth_controller_test.exs
index 50c1ade085..7cf0f8d5cf 100644
--- a/test/plausible_web/controllers/auth_controller_test.exs
+++ b/test/plausible_web/controllers/auth_controller_test.exs
@@ -1724,6 +1724,48 @@ defmodule PlausibleWeb.AuthControllerTest do
end
end
+ describe "GET /team/select" do
+ setup [:create_user, :log_in]
+
+ test "redirects to /sites if no teams available", %{conn: conn} do
+ conn = get(conn, Routes.auth_path(conn, :select_team))
+ assert redirected_to(conn, 302) == Routes.site_path(conn, :index)
+ end
+
+ test "redirects to /sites?__team if one team set up available", %{conn: conn, user: user} do
+ new_site(owner: user)
+ team = team_of(user)
+ assert Plausible.Teams.complete_setup(team)
+ conn = get(conn, Routes.auth_path(conn, :select_team))
+ assert redirected_to(conn, 302) == Routes.site_path(conn, :index, __team: team.identifier)
+ end
+
+ test "displays team switcher if >1 teams available", %{conn: conn, user: user} do
+ t1 = new_site(owner: user).team
+ t2 = new_site().team
+
+ add_member(t2, user: user, role: :viewer)
+
+ Plausible.Teams.complete_setup(t1)
+ Plausible.Teams.complete_setup(t2)
+
+ conn = get(conn, Routes.auth_path(conn, :select_team))
+ assert html = html_response(conn, 200)
+
+ assert text(html) =~ "Switch your current team"
+
+ assert element_exists?(
+ html,
+ ~s|a[href="#{Routes.site_path(conn, :index, __team: t1.identifier)}"]|
+ )
+
+ assert element_exists?(
+ html,
+ ~s|a[href="#{Routes.site_path(conn, :index, __team: t2.identifier)}"]|
+ )
+ end
+ end
+
defp login_with_cookie(conn, email, password) do
conn
|> post(Routes.auth_path(conn, :login), %{
diff --git a/test/plausible_web/live/sites_test.exs b/test/plausible_web/live/sites_test.exs
index 4b0f9b1f26..963d44abb8 100644
--- a/test/plausible_web/live/sites_test.exs
+++ b/test/plausible_web/live/sites_test.exs
@@ -13,9 +13,28 @@ defmodule PlausibleWeb.Live.SitesTest do
test "renders empty sites page", %{conn: conn} do
{:ok, _lv, html} = live(conn, "/sites")
- assert text(html) =~ "My Personal Sites"
+ text = text(html)
+ assert text =~ "My Personal Sites"
+ assert text =~ "You don't have any sites yet"
+ refute text =~ "You currently have no personal sites"
+ refute text =~ "Go to your team"
+ end
- assert text(html) =~ "You don't have any sites yet"
+ test "renders team switcher link, if on personal sites with other teams available", %{
+ conn: conn,
+ user: user
+ } do
+ team2 = new_site().team
+
+ add_member(team2, user: user, role: :admin)
+
+ {:ok, _lv, html} = live(conn, "/sites")
+ text = text(html)
+
+ assert text =~ "My Personal Sites"
+ refute text =~ "You don't have any sites yet"
+ assert text =~ "You currently have no personal sites"
+ assert text =~ "Go to your team"
end
test "renders settings link when current team is set", %{user: user, conn: conn} do
diff --git a/test/plausible_web/plugs/auth_plug_test.exs b/test/plausible_web/plugs/auth_plug_test.exs
index 055cd51523..53bd4cb4e5 100644
--- a/test/plausible_web/plugs/auth_plug_test.exs
+++ b/test/plausible_web/plugs/auth_plug_test.exs
@@ -123,4 +123,41 @@ defmodule PlausibleWeb.AuthPlugTest do
assert conn.assigns[:current_team].id == team.id
assert conn.assigns[:current_team_role] == :editor
end
+
+ test "stores team identifier when team changes", %{conn: conn, user: user} do
+ subscribe_to_plan(user, "123", inserted_at: NaiveDateTime.utc_now())
+ team = team_of(user)
+
+ assert is_nil(user.last_team_identifier)
+
+ conn =
+ conn
+ |> Plug.Adapters.Test.Conn.conn(:get, "/", %{__team: team.identifier})
+ |> AuthPlug.call(%{})
+
+ updated_user = Plausible.Repo.reload!(user)
+ assert updated_user.last_team_identifier == team.identifier
+ assert get_session(conn, "current_team_id") == team.identifier
+ end
+
+ test "clears team identifier when recently stored team identifier doesn't exist", %{
+ conn: conn,
+ user: user
+ } do
+ subscribe_to_plan(user, "123", inserted_at: NaiveDateTime.utc_now())
+
+ stale_team_id = Ecto.UUID.generate()
+ :ok = Plausible.Users.remember_last_team(user, stale_team_id)
+ assert Plausible.Repo.reload!(user).last_team_identifier
+
+ conn =
+ conn
+ |> put_session("current_team_id", stale_team_id)
+ |> Plug.Adapters.Test.Conn.conn(:get, "/", %{})
+ |> AuthPlug.call(%{})
+
+ updated_user = Plausible.Repo.reload!(user)
+ assert is_nil(updated_user.last_team_identifier)
+ refute get_session(conn, "current_team_id")
+ end
end
diff --git a/test/support/teams/test.ex b/test/support/teams/test.ex
index 4774458157..4d1bed473f 100644
--- a/test/support/teams/test.ex
+++ b/test/support/teams/test.ex
@@ -49,12 +49,6 @@ defmodule Plausible.Teams.Test do
|> insert(args)
end
- def new_team() do
- new_user()
- |> Map.fetch!(:team_memberships)
- |> List.first()
- end
-
def new_user(args \\ []) do
{team_args, args} = Keyword.pop(args, :team, [])
{trial_expiry_date, args} = Keyword.pop(args, :trial_expiry_date)