From 41f1f4e695ca5a5cdd55777acb10323e42e51973 Mon Sep 17 00:00:00 2001 From: Angel Perez Date: Mon, 23 Oct 2017 13:25:03 -0400 Subject: [PATCH] Enable search by name/email for Moderators --- .../admin/moderators_controller.rb | 14 ++--- .../admin/moderators/_moderator.html.erb | 26 ---------- app/views/admin/moderators/index.html.erb | 24 ++------- app/views/admin/moderators/search.html.erb | 29 +++++++++++ app/views/admin/moderators/search.js.erb | 1 - .../admin/moderators/user_not_found.js.erb | 1 - config/locales/en/admin.yml | 4 +- config/locales/es/admin.yml | 4 +- spec/features/admin/moderators_spec.rb | 52 ++++++++++++++++++- 9 files changed, 90 insertions(+), 65 deletions(-) delete mode 100644 app/views/admin/moderators/_moderator.html.erb create mode 100644 app/views/admin/moderators/search.html.erb delete mode 100644 app/views/admin/moderators/search.js.erb delete mode 100644 app/views/admin/moderators/user_not_found.js.erb diff --git a/app/controllers/admin/moderators_controller.rb b/app/controllers/admin/moderators_controller.rb index 2566c0c02..cd5072aa8 100644 --- a/app/controllers/admin/moderators_controller.rb +++ b/app/controllers/admin/moderators_controller.rb @@ -6,16 +6,10 @@ class Admin::ModeratorsController < Admin::BaseController end def search - @user = User.find_by(email: params[:email]) - - respond_to do |format| - if @user - @moderator = Moderator.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(:moderator) + .page(params[:page]) + .for_render end def create diff --git a/app/views/admin/moderators/_moderator.html.erb b/app/views/admin/moderators/_moderator.html.erb deleted file mode 100644 index 57a29d2e8..000000000 --- a/app/views/admin/moderators/_moderator.html.erb +++ /dev/null @@ -1,26 +0,0 @@ -
- - - - - - - - -
- <%= moderator.name %> - - <%= moderator.email %> - - <% if moderator.persisted? %> - <%= link_to t('admin.moderators.moderator.delete'), - admin_moderator_path(moderator), - method: :delete, - class: "button hollow alert" %> - <% else %> - <%= link_to t('admin.moderators.moderator.add'),{ controller: "admin/moderators", action: :create, user_id: moderator.user_id }, - method: :post, - class: "button success" %> - <% end %> -
-
diff --git a/app/views/admin/moderators/index.html.erb b/app/views/admin/moderators/index.html.erb index 0fc8703fd..735a193ff 100644 --- a/app/views/admin/moderators/index.html.erb +++ b/app/views/admin/moderators/index.html.erb @@ -2,30 +2,15 @@

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

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

<%= page_entries_info @moderators %>

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

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

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

<%= page_entries_info @users %>

+ + + <% @users.each do |user| %> + + + + + + <% end %> +
<%= user.name %><%= user.email %> + <% if user.moderator? && user.moderator.persisted? %> + <%= link_to t('admin.moderators.moderator.delete'), + admin_moderator_path(user), + method: :delete, + class: "button hollow alert" %> + <% else %> + <%= link_to t('admin.moderators.moderator.add'), + { controller: "admin/moderators", + action: :create, + user_id: user }, + method: :post, + class: "button success" %> + <% end %> +
diff --git a/app/views/admin/moderators/search.js.erb b/app/views/admin/moderators/search.js.erb deleted file mode 100644 index 887d8aa3a..000000000 --- a/app/views/admin/moderators/search.js.erb +++ /dev/null @@ -1 +0,0 @@ -$("#search-result").html("<%= j render 'moderator', moderator: @moderator %>"); diff --git a/app/views/admin/moderators/user_not_found.js.erb b/app/views/admin/moderators/user_not_found.js.erb deleted file mode 100644 index a8573236c..000000000 --- a/app/views/admin/moderators/user_not_found.js.erb +++ /dev/null @@ -1 +0,0 @@ -$("#search-result").html("
<%= j t('admin.moderators.search.user_not_found') %>
"); diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index 29117be66..d18a2daef 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -446,9 +446,7 @@ en: add: Add delete: Delete search: - email_placeholder: Search user by email - search: Search - user_not_found: User not found + title: 'Moderators: User search' newsletters: index: title: Newsletters diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index d998e1f33..ecb4e5179 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -446,9 +446,7 @@ es: add: Añadir como Moderador delete: Borrar search: - email_placeholder: Buscar usuario por email - search: Buscar - user_not_found: Usuario no encontrado + title: 'Moderadores: Búsqueda de usuarios' newsletters: index: title: Envío de newsletters diff --git a/spec/features/admin/moderators_spec.rb b/spec/features/admin/moderators_spec.rb index e8e29b182..2c2994d62 100644 --- a/spec/features/admin/moderators_spec.rb +++ b/spec/features/admin/moderators_spec.rb @@ -16,7 +16,7 @@ feature 'Admin moderators' do end scenario 'Create Moderator', :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 @@ -33,5 +33,53 @@ feature 'Admin moderators' do expect(page).to_not have_content @moderator.name end end -end + context 'Search' do + + background do + user = create(:user, username: 'Elizabeth Bathory', email: 'elizabeth@bathory.com') + user2 = create(:user, username: 'Ada Lovelace', email: 'ada@lovelace.com') + @moderator1 = create(:moderator, user: user) + @moderator2 = create(:moderator, user: user2) + visit admin_moderators_path + end + + scenario 'returns no results if search term is empty' do + expect(page).to have_content(@moderator1.name) + expect(page).to have_content(@moderator2.name) + + fill_in 'name_or_email', with: ' ' + click_button 'Search' + + expect(page).to have_content('Moderators: User search') + expect(page).to have_content('users cannot be found') + expect(page).to_not have_content(@moderator1.name) + expect(page).to_not have_content(@moderator2.name) + end + + scenario 'search by name' do + expect(page).to have_content(@moderator1.name) + expect(page).to have_content(@moderator2.name) + + fill_in 'name_or_email', with: 'Eliz' + click_button 'Search' + + expect(page).to have_content('Moderators: User search') + expect(page).to have_content(@moderator1.name) + expect(page).to_not have_content(@moderator2.name) + end + + scenario 'search by email' do + expect(page).to have_content(@moderator1.email) + expect(page).to have_content(@moderator2.email) + + fill_in 'name_or_email', with: @moderator2.email + click_button 'Search' + + expect(page).to have_content('Moderators: User search') + expect(page).to have_content(@moderator2.email) + expect(page).to_not have_content(@moderator1.email) + end + end + +end