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:
committed by
Javi Martín
parent
76400a8c23
commit
f071ca6cb5
8
app/controllers/admin/local_census_records_controller.rb
Normal file
8
app/controllers/admin/local_census_records_controller.rb
Normal 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
|
||||
@@ -3,4 +3,6 @@ class LocalCensusRecord < ApplicationRecord
|
||||
validates :document_type, presence: true
|
||||
validates :date_of_birth, presence: true
|
||||
validates :postal_code, presence: true
|
||||
|
||||
scope :search, -> (terms) { where("document_number ILIKE ?", "%#{terms}%") }
|
||||
end
|
||||
|
||||
@@ -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>
|
||||
@@ -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 %>
|
||||
20
app/views/admin/local_census_records/index.html.erb
Normal file
20
app/views/admin/local_census_records/index.html.erb
Normal 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>
|
||||
1
app/views/admin/local_census_records/index.js.erb
Normal file
1
app/views/admin/local_census_records/index.js.erb
Normal file
@@ -0,0 +1 @@
|
||||
$("#local_census_records").html("<%= j render "local_census_records" %>");
|
||||
@@ -1664,3 +1664,19 @@ en:
|
||||
progress_bars:
|
||||
index:
|
||||
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!
|
||||
|
||||
@@ -1662,3 +1662,19 @@ es:
|
||||
progress_bars:
|
||||
index:
|
||||
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!
|
||||
|
||||
@@ -255,4 +255,6 @@ namespace :admin do
|
||||
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"
|
||||
|
||||
resources :local_census_records
|
||||
end
|
||||
|
||||
75
spec/features/admin/local_census_records_spec.rb
Normal file
75
spec/features/admin/local_census_records_spec.rb
Normal 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
|
||||
51
spec/models/local_census_record_spec.rb
Normal file
51
spec/models/local_census_record_spec.rb
Normal 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
|
||||
Reference in New Issue
Block a user