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