diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb
index fdbc6e281..fb3ae12d9 100644
--- a/app/controllers/admin/users_controller.rb
+++ b/app/controllers/admin/users_controller.rb
@@ -6,7 +6,10 @@ module Admin
def index
authorize User
- @users = policy_scope(User).order(:email)
+ @users = policy_scope(User)
+ .left_joins(family: :subscription)
+ .includes(family: :subscription)
+ .order(Arel.sql("subscriptions.trial_ends_at IS NULL, subscriptions.trial_ends_at ASC, users.email ASC"))
end
def update
diff --git a/app/views/admin/users/index.html.erb b/app/views/admin/users/index.html.erb
index 002e1a06c..b4b8781e6 100644
--- a/app/views/admin/users/index.html.erb
+++ b/app/views/admin/users/index.html.erb
@@ -14,6 +14,10 @@
<%= user.display_name %>
<%= user.email %>
+
+ <%= t(".trial_ends_at") %>:
+ <%= user.family.subscription&.trial_ends_at&.to_fs(:long) || t(".not_available") %>
+
diff --git a/config/locales/views/admin/users/ca.yml b/config/locales/views/admin/users/ca.yml
index 25c66fc83..e0fa5149a 100644
--- a/config/locales/views/admin/users/ca.yml
+++ b/config/locales/views/admin/users/ca.yml
@@ -21,6 +21,8 @@ ca:
section_title: Usuaris
title: Gestió d'usuaris
you: "(Tu)"
+ trial_ends_at: Fi de prova
+ not_available: n/a
update:
failure: No s'ha pogut actualitzar el rol d'usuari.
success: El rol d'usuari s'ha actualitzat correctament.
diff --git a/config/locales/views/admin/users/en.yml b/config/locales/views/admin/users/en.yml
index 13af72c16..fc6c160f1 100644
--- a/config/locales/views/admin/users/en.yml
+++ b/config/locales/views/admin/users/en.yml
@@ -7,6 +7,8 @@ en:
description: "Manage user roles for your instance. Super admins can access SSO provider settings and user management."
section_title: "Users"
you: "(You)"
+ trial_ends_at: "Trial ends"
+ not_available: "n/a"
no_users: "No users found."
role_descriptions_title: "Role Descriptions"
roles:
diff --git a/config/locales/views/admin/users/fr.yml b/config/locales/views/admin/users/fr.yml
index 94044c3de..eaee30343 100644
--- a/config/locales/views/admin/users/fr.yml
+++ b/config/locales/views/admin/users/fr.yml
@@ -7,6 +7,8 @@ fr:
description: "Gérez les rôles des utilisateurs pour votre instance. Les super administrateurs peuvent accéder aux paramètres des fournisseurs SSO et à la gestion des utilisateurs."
section_title: "Utilisateurs"
you: "(Vous)"
+ trial_ends_at: "Fin de l'essai"
+ not_available: "n/a"
no_users: "Aucun utilisateur trouvé."
role_descriptions_title: "Description des rôles"
roles:
diff --git a/config/locales/views/admin/users/nl.yml b/config/locales/views/admin/users/nl.yml
index e543aa364..dde18bf14 100644
--- a/config/locales/views/admin/users/nl.yml
+++ b/config/locales/views/admin/users/nl.yml
@@ -7,6 +7,8 @@ nl:
description: "Beheer gebruikersrollen voor uw instantie. Superbeheerders hebben toegang tot SSO-providerinstellingen en gebruikersbeheer."
section_title: "Gebruikers"
you: "(U)"
+ trial_ends_at: "Proefperiode eindigt"
+ not_available: "n/a"
no_users: "Geen gebruikers gevonden."
role_descriptions_title: "Rolbeschrijvingen"
roles:
diff --git a/test/controllers/admin/users_controller_test.rb b/test/controllers/admin/users_controller_test.rb
new file mode 100644
index 000000000..a02f670f3
--- /dev/null
+++ b/test/controllers/admin/users_controller_test.rb
@@ -0,0 +1,28 @@
+require "test_helper"
+
+class Admin::UsersControllerTest < ActionDispatch::IntegrationTest
+ setup do
+ sign_in users(:sure_support_staff)
+ end
+
+ test "index sorts users by subscription trial end date with nils last" do
+ get admin_users_url
+
+ assert_response :success
+
+ body = response.body
+ trial_user_index = body.index("user1@example.com")
+ no_trial_user_index = body.index("bob@bobdylan.com")
+
+ assert_not_nil trial_user_index
+ assert_not_nil no_trial_user_index
+ assert_operator trial_user_index, :<, no_trial_user_index
+ end
+
+ test "index shows n/a when trial end date is unavailable" do
+ get admin_users_url
+
+ assert_response :success
+ assert_match(/Trial ends:\s*n\/a/, response.body)
+ end
+end