Merge pull request #288 from AyuntamientoMadrid/officials-search

admins can search officials by name or email
This commit is contained in:
Raimond Garcia
2015-08-29 17:06:53 +02:00
8 changed files with 19 additions and 11 deletions

View File

@@ -5,7 +5,7 @@ class Admin::OfficialsController < Admin::BaseController
end end
def search def search
@users = User.with_email(params[:email]).page(params[:page]).for_render @users = User.search(params[:name_or_email]).page(params[:page]).for_render
end end
def edit def edit

View File

@@ -110,8 +110,8 @@ class User < ActiveRecord::Base
update official_position: nil, official_level: 0 update official_position: nil, official_level: 0
end end
def self.with_email(e) def self.search(term)
e.present? ? where(email: e) : none term.present? ? where("email = ? OR username ILIKE ?", term, "%#{term}%") : none
end end
def email_provided? def email_provided?

View File

@@ -3,7 +3,7 @@
<%= form_for(User.new, url: search_admin_officials_path, as: :user, method: :get) do |f| %> <%= form_for(User.new, url: search_admin_officials_path, as: :user, method: :get) do |f| %>
<div class="row"> <div class="row">
<div class="small-12 medium-6 column"> <div class="small-12 medium-6 column">
<%= text_field_tag :email, "", placeholder: t("admin.officials.index.search_email_placeholder") %> <%= text_field_tag :name_or_email, "", placeholder: t("admin.officials.index.search_placeholder") %>
</div> </div>
<div class="form-inline small-12 medium-6 column"> <div class="form-inline small-12 medium-6 column">
<%= f.submit t("admin.officials.index.search"), class: "button radius success" %> <%= f.submit t("admin.officials.index.search"), class: "button radius success" %>

View File

@@ -3,7 +3,7 @@
<%= form_for(User.new, url: search_admin_officials_path, as: :user, method: :get) do |f| %> <%= form_for(User.new, url: search_admin_officials_path, as: :user, method: :get) do |f| %>
<div class="row"> <div class="row">
<div class="small-12 medium-6 column"> <div class="small-12 medium-6 column">
<%= text_field_tag :email, "", placeholder: t("admin.officials.index.search_email_placeholder") %> <%= text_field_tag :name_or_email, "", placeholder: t("admin.officials.index.search_placeholder") %>
</div> </div>
<div class="small-12 medium-6 column"> <div class="small-12 medium-6 column">
<%= f.submit t("admin.officials.search.search"), class: "button radius success" %> <%= f.submit t("admin.officials.search.search"), class: "button radius success" %>

View File

@@ -88,7 +88,7 @@ en:
level_5: Level 5 level_5: Level 5
index: index:
title: Officials title: Officials
search_email_placeholder: 'Search user by email' search_placeholder: 'Search user by name or email'
search: Search search: Search
search: search:
title: 'Officials: Search users' title: 'Officials: Search users'

View File

@@ -88,7 +88,7 @@ es:
level_5: Nivel 5 level_5: Nivel 5
index: index:
title: Cargos Públicos title: Cargos Públicos
search_email_placeholder: 'Buscar usuario por email' search_placeholder: 'Buscar usuario por nombre o email'
search: Buscar search: Buscar
search: search:
title: 'Cargos Públicos: Búsqueda de usuarios' title: 'Cargos Públicos: Búsqueda de usuarios'

View File

@@ -43,7 +43,7 @@ feature 'Admin officials' do
scenario 'Create an official' do scenario 'Create an official' do
visit admin_officials_path visit admin_officials_path
fill_in 'email', with: @citizen.email fill_in 'name_or_email', with: @citizen.email
click_button 'Search' click_button 'Search'
expect(current_path).to eq(search_admin_officials_path) expect(current_path).to eq(search_admin_officials_path)

View File

@@ -210,17 +210,25 @@ describe User do
end end
end end
describe "self.with_email" do describe "self.search" do
it "find users by email" do it "find users by email" do
user1 = create(:user, email: "larry@madrid.es") user1 = create(:user, email: "larry@madrid.es")
create(:user, email: "bird@madrid.es") create(:user, email: "bird@madrid.es")
search = User.with_email("larry@madrid.es") search = User.search("larry@madrid.es")
expect(search.size).to eq(1)
expect(search.first).to eq(user1)
end
it "find users by name" do
user1 = create(:user, username: "Larry Bird")
create(:user, username: "Robert Parish")
search = User.search("larry")
expect(search.size).to eq(1) expect(search.size).to eq(1)
expect(search.first).to eq(user1) expect(search.first).to eq(user1)
end end
it "returns no results if no email provided" do it "returns no results if no email provided" do
expect(User.with_email(" ").size).to eq(0) expect(User.search(" ").size).to eq(0)
end end
end end