Create LocalCensusRecords index page

* Create admin controller and routes
* Add pagination
* Add search by document_number
* Add EN and ES translations
* Add index specs
* Add missing model specs
This commit is contained in:
Senén Rodero Rodríguez
2019-05-08 13:13:33 +02:00
committed by Javi Martín
parent 76400a8c23
commit f071ca6cb5
11 changed files with 239 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
class Admin::LocalCensusRecordsController < Admin::BaseController
load_and_authorize_resource
def index
@local_census_records = @local_census_records.search(params[:search])
@local_census_records = @local_census_records.page(params[:page])
end
end

View File

@@ -3,4 +3,6 @@ class LocalCensusRecord < ApplicationRecord
validates :document_type, presence: true validates :document_type, presence: true
validates :date_of_birth, presence: true validates :date_of_birth, presence: true
validates :postal_code, presence: true validates :postal_code, presence: true
scope :search, -> (terms) { where("document_number ILIKE ?", "%#{terms}%") }
end end

View File

@@ -0,0 +1,25 @@
<tr id="<%= dom_id(local_census_record) %>" class="local_census_record">
<td>
<%= local_census_record.document_type %>
</td>
<td>
<%= local_census_record.document_number %>
</td>
<td>
<%= l local_census_record.date_of_birth %>
</td>
<td>
<%= local_census_record.postal_code %>
</td>
<td>
<%= link_to t("admin.actions.edit"),
edit_admin_local_census_record_path(local_census_record),
class: "button hollow" %>
<%= link_to t("admin.actions.delete"),
admin_local_census_record_path(local_census_record),
method: :delete,
class: "button hollow alert",
data: { confirm: t("admin.actions.confirm") } %>
</td>
</tr>

View File

@@ -0,0 +1,23 @@
<% if @local_census_records.any? %>
<h3 class="margin"><%= page_entries_info @local_census_records %></h3>
<table>
<thead>
<tr>
<th><%= t("admin.local_census_records.index.document_type") %></th>
<th><%= t("admin.local_census_records.index.document_number") %></th>
<th><%= t("admin.local_census_records.index.date_of_birth") %></th>
<th><%= t("admin.local_census_records.index.postal_code") %></th>
<th><%= t("admin.actions.actions") %></th>
</tr>
</thead>
<tbody>
<%= render @local_census_records %>
</tbody>
</table>
<%= paginate @local_census_records %>
<% else %>
<div class="callout primary">
<%= t("admin.local_census_records.index.no_local_census_records") %>
</div>
<% end %>

View File

@@ -0,0 +1,20 @@
<h2 class="inline-block"><%= t("admin.local_census_records.index.title") %></h2>
<%= link_to t("admin.local_census_records.index.create"),
new_admin_local_census_record_path,
class: "button float-right" %>
<div class="small-12 medium-6">
<%= form_tag admin_local_census_records_path, method: :get, remote: true do %>
<div class="input-group">
<%= text_field_tag :search, "", placeholder: t("admin.local_census_records.index.search.placeholder") %>
<div class="input-group-button">
<%= submit_tag t("admin.local_census_records.index.search.search"), class: "button" %>
</div>
</div>
<% end %>
</div>
<div id="local_census_records">
<%= render "local_census_records" %>
</div>

View File

@@ -0,0 +1 @@
$("#local_census_records").html("<%= j render "local_census_records" %>");

View File

@@ -1664,3 +1664,19 @@ en:
progress_bars: progress_bars:
index: index:
title: "Progress bars" title: "Progress bars"
local_census_records:
index:
title: Manage local census
create: Create new local census record
no_local_census_records: There are no local census records.
document_type: Document type
document_number: Document number
date_of_birth: Date of birth
postal_code: Postal code
search:
placeholder: Search by document number
search: Search
new:
creating: Creating new local census record
create:
notice: New local census record created successfully!

View File

@@ -1662,3 +1662,19 @@ es:
progress_bars: progress_bars:
index: index:
title: "Barras de progreso" title: "Barras de progreso"
local_census_records:
index:
title: Gestionar censo local
create: Crear nuevo registro en el censo local
no_local_census_records: No hay registros de censo local
document_type: Tipo de documento
document_number: Número de documento
date_of_birth: Fecha de nacimiento
postal_code: Código postal
search:
placeholder: Búsqueda por número de documento
search: Buscar
new:
creating: Creando nuevo registro de censo local
create:
notice: ¡Nuevo registro de censo local creado correctamente!

View File

@@ -255,4 +255,6 @@ namespace :admin do
put 'download_settings/:resource', to: 'download_settings#update', as: 'update_download_settings' put 'download_settings/:resource', to: 'download_settings#update', as: 'update_download_settings'
get "/change_log/:id", to: "budget_investments#show_investment_log", as: "change_log" get "/change_log/:id", to: "budget_investments#show_investment_log", as: "change_log"
resources :local_census_records
end end

View File

@@ -0,0 +1,75 @@
require "rails_helper"
feature "Admin local census records" do
background do
login_as(create(:administrator).user)
end
context "Index" do
let!(:local_census_record) { create(:local_census_record) }
scenario "Should show empty message when no local census records exists" do
LocalCensusRecord.delete_all
visit admin_local_census_records_path
expect(page).to have_content("There are no local census records.")
end
scenario "Should show existing local census records" do
visit admin_local_census_records_path
expect(page).to have_content(local_census_record.document_type)
expect(page).to have_content(local_census_record.document_number)
expect(page).to have_content(local_census_record.date_of_birth)
expect(page).to have_content(local_census_record.postal_code)
end
scenario "Should show edit and destroy actions for each record" do
visit admin_local_census_records_path
within "#local_census_record_#{local_census_record.id}" do
expect(page).to have_link "Edit"
expect(page).to have_link "Delete"
end
end
scenario "Should show page entries info" do
visit admin_local_census_records_path
expect(page).to have_content("There is 1 local census record")
end
scenario "Should show paginator" do
create_list(:local_census_record, 25)
visit admin_local_census_records_path
within ".pagination" do
expect(page).to have_link("2")
end
end
context "Search" do
background do
create(:local_census_record, document_number: "X66777888" )
end
scenario "Should show matching records by document number at first visit" do
visit admin_local_census_records_path(search: "X66777888")
expect(page).to have_content "X66777888"
expect(page).not_to have_content local_census_record.document_number
end
scenario "Should show matching records by document number", :js do
visit admin_local_census_records_path
fill_in :search, with: "X66777888"
click_on "Search"
expect(page).to have_content "X66777888"
expect(page).not_to have_content local_census_record.document_number
end
end
end
end

View File

@@ -0,0 +1,51 @@
require "rails_helper"
describe LocalCensusRecord do
let(:local_census_record) { build(:local_census_record) }
context "validations" do
it "is valid" do
expect(local_census_record).to be_valid
end
it "is not valid without document_number" do
local_census_record.document_number = nil
expect(local_census_record).not_to be_valid
end
it "is not valid without document_type" do
local_census_record.document_type = nil
expect(local_census_record).not_to be_valid
end
it "is not valid without date_of_birth" do
local_census_record.date_of_birth = nil
expect(local_census_record).not_to be_valid
end
it "is not valid without postal_code" do
local_census_record.postal_code = nil
expect(local_census_record).not_to be_valid
end
end
context "scopes" do
let!(:a_local_census_record) { create(:local_census_record, document_number: "AAAA") }
let!(:b_local_census_record) { create(:local_census_record, document_number: "BBBB") }
context "search" do
it "filter document_numbers by given terms" do
expect(LocalCensusRecord.search("A")).to include a_local_census_record
expect(LocalCensusRecord.search("A")).not_to include b_local_census_record
end
it "ignores terms case" do
expect(LocalCensusRecord.search("a")).to eq [a_local_census_record]
end
end
end
end