Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Team Management UI #4997

Merged
merged 34 commits into from
Feb 10, 2025
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
ff200f9
Start PromEx first; don't run the Oban plugin in test
aerosol Jan 28, 2025
bf36b8f
Implement `find_team_invitations`
aerosol Jan 28, 2025
dd9fe1e
Implement `all_members`
aerosol Jan 28, 2025
18239e5
Allow disabling e-mail notifications on team member removal
aerosol Jan 28, 2025
9b12c76
Fix visuals per @ukutath's suggestions
aerosol Jan 28, 2025
aa5290c
Add `:setup_team` test context function
aerosol Jan 28, 2025
87faab8
Don't show team settings in the sidebar, if setup incomplete
aerosol Jan 28, 2025
bda79f7
Add high-level interface for team layout arrangement
aerosol Jan 28, 2025
e08a140
Update team/setup to use `Team.Management.Layout`
aerosol Jan 28, 2025
081861e
Implement team general settings allowing layout arrangement
aerosol Jan 28, 2025
eaf627d
Format
aerosol Jan 28, 2025
9aa2971
Remove unused setup_team
aerosol Jan 28, 2025
e81f71e
Add id attributes to member dropdown elements
aerosol Jan 28, 2025
6535e54
Format
aerosol Jan 28, 2025
5d04728
Unify team management experience
aerosol Jan 29, 2025
96b9c44
Rename Invitations/Memberships getters
aerosol Feb 5, 2025
08292ab
Tweak team setup layout
aerosol Feb 5, 2025
7002971
Update team setup markers only once
aerosol Feb 5, 2025
5a78106
Update tests
aerosol Feb 5, 2025
bcb496d
Add another future regression test
aerosol Feb 5, 2025
0d32d0c
Fix typo
aerosol Feb 5, 2025
e7035dc
Prune guest memberships on guest->team member promotion
aerosol Feb 5, 2025
739f565
Remove now unnecessary `Candidates` module
aerosol Feb 5, 2025
d0b443f
Add missing tests
aerosol Feb 5, 2025
98ec51d
Merge remote-tracking branch 'origin/master' into team-people-settings
aerosol Feb 5, 2025
8df3b86
Catch up on multiple owners fixes
aerosol Feb 5, 2025
b8f0178
Add missing describe-block setup
aerosol Feb 5, 2025
54d98fa
Hopefully make Layout easier to follow
aerosol Feb 5, 2025
e54115d
Remove default prevention from dropdown
aerosol Feb 5, 2025
72399d7
Remove unused assign
aerosol Feb 5, 2025
47d37ef
Make `sorted_for_display` skip scheduled for deletion
aerosol Feb 5, 2025
c5d3e87
`use PlausibleWeb.Component`
aerosol Feb 5, 2025
0bcdb28
Use `data-test-kind` for test specific selectors
aerosol Feb 6, 2025
5e950ab
Remove `class="relative"` from `.dropdown` instances
aerosol Feb 6, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions lib/plausible/teams/memberships/update_role.ex
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ defmodule Plausible.Teams.Memberships.UpdateRole do
|> Repo.update!()
|> Repo.preload(:user)

:ok = maybe_prune_guest_memberships(team_membership)
ukutaht marked this conversation as resolved.
Show resolved Hide resolved

{:ok, team_membership}
end
end
Expand Down Expand Up @@ -86,4 +88,15 @@ defmodule Plausible.Teams.Memberships.UpdateRole do
defp can_grant_role_to_other?(:admin, :viewer, :editor), do: true
defp can_grant_role_to_other?(:admin, :viewer, :viewer), do: true
defp can_grant_role_to_other?(_, _, _), do: false

defp maybe_prune_guest_memberships(%Teams.Membership{role: :guest}),
do: :ok

defp maybe_prune_guest_memberships(%Teams.Membership{} = team_membership) do
team_membership
|> Ecto.assoc(:guest_memberships)
|> Repo.delete_all()

:ok
end
end
19 changes: 19 additions & 0 deletions test/plausible/teams/management/layout_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -422,5 +422,24 @@ defmodule Plausible.Teams.Management.LayoutTest do

assert_no_emails_delivered()
end

test "guests promotion", %{user: user, team: team} do
site = new_site(owner: user)
u2 = new_user()

add_guest(site, user: u2, role: :viewer)
assert_guest_membership(team, site, u2, :viewer)

layout = Layout.init(team)
assert Layout.has_guests?(layout)

layout
|> Layout.update_role(u2.email, :viewer)
|> Layout.persist(%{current_user: user, my_team: team})

refute team |> Layout.init() |> Layout.has_guests?()

assert_non_guest_membership(team, site, u2)
end
end
end
1 change: 1 addition & 0 deletions test/plausible_web/controllers/team_controller_test.exs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
defmodule PlausibleWeb.TeamControllerTest do
# XXX: remove this whole controller -> rewrite to UpdateRole tests
use PlausibleWeb.ConnCase, async: true
use Plausible.Repo
use Plausible.Teams.Test
Expand Down
15 changes: 15 additions & 0 deletions test/support/teams/test.ex
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,21 @@ defmodule Plausible.Teams.Test do
)
end

def assert_non_guest_membership(team, site, user) do
assert team_membership =
Repo.get_by(Plausible.Teams.Membership,
user_id: user.id,
team_id: team.id
)

assert team_membership.role != :guest

refute Repo.get_by(Plausible.Teams.GuestMembership,
team_membership_id: team_membership.id,
site_id: site.id
)
end

def subscription_of(%Plausible.Auth.User{} = user) do
user
|> team_of()
Expand Down
Loading