diff --git a/app/controllers/admin/administrators_controller.rb b/app/controllers/admin/administrators_controller.rb index 938a7570d..3467ee0c0 100644 --- a/app/controllers/admin/administrators_controller.rb +++ b/app/controllers/admin/administrators_controller.rb @@ -6,16 +6,10 @@ class Admin::AdministratorsController < Admin::BaseController end def search - @user = User.find_by(email: params[:email]) - - respond_to do |format| - if @user - @administrator = Administrator.find_or_initialize_by(user: @user) - format.js - else - format.js { render "user_not_found" } - end - end + @users = User.search(params[:name_or_email]) + .includes(:administrator) + .page(params[:page]) + .for_render end def create diff --git a/app/views/admin/administrators/_administrator.html.erb b/app/views/admin/administrators/_administrator.html.erb deleted file mode 100644 index d948e1eed..000000000 --- a/app/views/admin/administrators/_administrator.html.erb +++ /dev/null @@ -1,26 +0,0 @@ -
- - - - - - - - -
- <%= administrator.name %> - - <%= administrator.email %> - - <% if administrator.persisted? %> - <%= link_to t('admin.administrators.administrator.delete'), - admin_administrator_path(administrator), - method: :delete, - class: "button hollow alert" %> - <% else %> - <%= link_to t('admin.administrators.administrator.add'),{ controller: "admin/administrators", action: :create, user_id: administrator.user_id }, - method: :post, - class: "button success" %> - <% end %> -
-
diff --git a/app/views/admin/administrators/index.html.erb b/app/views/admin/administrators/index.html.erb index 1cfbf5079..b23a85d61 100644 --- a/app/views/admin/administrators/index.html.erb +++ b/app/views/admin/administrators/index.html.erb @@ -1,39 +1,24 @@

<%= t("admin.administrators.index.title") %>

-
- <%= form_tag search_admin_administrators_path, method: :get, remote: true do %> -
- <%= text_field_tag :email, '', placeholder: t('admin.administrators.search.email_placeholder') %> -
-
- <%= submit_tag t('admin.administrators.search.search'), class: 'button' %> -
- <% end %> -
- -
+<%= render 'admin/shared/user_search', url: search_admin_administrators_path %>

<%= page_entries_info @administrators %>

<% @administrators.each do |administrator| %> - - + +
- <%= administrator.name %> - - <%= administrator.email %> - <%= administrator.name %><%= administrator.email %> <% if administrator.persisted? %> <%= link_to t('admin.administrators.administrator.delete'), admin_administrator_path(administrator), method: :delete, - class: "button hollow alert" - %> + class: "button hollow alert" %> <% else %> <%= link_to t('admin.administrators.administrator.add'), - { controller: "admin/administrators", action: :create, + { controller: "admin/administrators", + action: :create, user_id: administrator.user_id }, method: :post, class: "button success" %> diff --git a/app/views/admin/administrators/search.html.erb b/app/views/admin/administrators/search.html.erb new file mode 100644 index 000000000..3f3c269f1 --- /dev/null +++ b/app/views/admin/administrators/search.html.erb @@ -0,0 +1,29 @@ +

<%= t("admin.administrators.search.title") %>

+ +<%= render 'admin/shared/user_search', url: search_admin_administrators_path %> + +

<%= page_entries_info @users %>

+ + + <% @users.each do |user| %> + + + + + + <% end %> +
<%= user.name %><%= user.email %> + <% if user.administrator? && user.administrator.persisted? %> + <%= link_to t('admin.administrators.administrator.delete'), + admin_administrator_path(user), + method: :delete, + class: "button hollow alert" %> + <% else %> + <%= link_to t('admin.administrators.administrator.add'), + { controller: "admin/administrators", + action: :create, + user_id: user }, + method: :post, + class: "button success" %> + <% end %> +
diff --git a/app/views/admin/administrators/search.js.erb b/app/views/admin/administrators/search.js.erb deleted file mode 100644 index 1c30d9595..000000000 --- a/app/views/admin/administrators/search.js.erb +++ /dev/null @@ -1 +0,0 @@ -$("#search-result").html("<%= j render 'administrator', administrator: @administrator %>"); diff --git a/app/views/admin/administrators/user_not_found.js.erb b/app/views/admin/administrators/user_not_found.js.erb deleted file mode 100644 index ba707fc9d..000000000 --- a/app/views/admin/administrators/user_not_found.js.erb +++ /dev/null @@ -1 +0,0 @@ -$("#search-result").html("
<%= j t('admin.administrators.search.user_not_found') %>
"); diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index 50e0b84ff..29117be66 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -438,9 +438,7 @@ en: delete: Delete restricted_removal: "Sorry, you can't remove yourself from the administrators" search: - email_placeholder: Search user by email - search: Search - user_not_found: User not found + title: 'Administrators: User search' moderators: index: title: Moderators diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index 76747ecf2..d998e1f33 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -387,9 +387,7 @@ es: delete: Borrar restricted_removal: "Lo sentimos, no puedes eliminarte a ti mismo de la lista" search: - email_placeholder: Buscar usuario por email - search: Buscar - user_not_found: Usuario no encontrado + title: 'Administradores: Búsqueda de usuarios' managers: index: title: Gestores diff --git a/spec/features/admin/administrators_spec.rb b/spec/features/admin/administrators_spec.rb index bef57b75d..4e2091d11 100644 --- a/spec/features/admin/administrators_spec.rb +++ b/spec/features/admin/administrators_spec.rb @@ -16,7 +16,7 @@ feature 'Admin administrators' do end scenario 'Create Administrator', :js do - fill_in 'email', with: @user.email + fill_in 'name_or_email', with: @user.email click_button 'Search' expect(page).to have_content @user.name @@ -41,5 +41,53 @@ feature 'Admin administrators' do expect(page).to have_content I18n.t("admin.administrators.administrator.restricted_removal") end end -end + context 'Search' do + + background do + user = create(:user, username: 'Bernard Sumner', email: 'bernard@sumner.com') + user2 = create(:user, username: 'Tony Soprano', email: 'tony@soprano.com') + @administrator1 = create(:administrator, user: user) + @administrator2 = create(:administrator, user: user2) + visit admin_administrators_path + end + + scenario 'returns no results if search term is empty' do + expect(page).to have_content(@administrator1.name) + expect(page).to have_content(@administrator2.name) + + fill_in 'name_or_email', with: ' ' + click_button 'Search' + + expect(page).to have_content('Administrators: User search') + expect(page).to have_content('users cannot be found') + expect(page).to_not have_content(@administrator1.name) + expect(page).to_not have_content(@administrator2.name) + end + + scenario 'search by name' do + expect(page).to have_content(@administrator1.name) + expect(page).to have_content(@administrator2.name) + + fill_in 'name_or_email', with: 'Sumn' + click_button 'Search' + + expect(page).to have_content('Administrators: User search') + expect(page).to have_content(@administrator1.name) + expect(page).to_not have_content(@administrator2.name) + end + + scenario 'search by email' do + expect(page).to have_content(@administrator1.email) + expect(page).to have_content(@administrator2.email) + + fill_in 'name_or_email', with: @administrator2.email + click_button 'Search' + + expect(page).to have_content('Administrators: User search') + expect(page).to have_content(@administrator2.email) + expect(page).to_not have_content(@administrator1.email) + end + end + +end