From bfcbb6c0ad6a646fb44ece0512557535e14c13ac Mon Sep 17 00:00:00 2001 From: iagirre Date: Tue, 31 Oct 2017 13:04:30 +0100 Subject: [PATCH] Validation in model and in form added. When users makes the on focus on population field an explanation appears. Some specs added to test the model validations --- app/models/budget/heading.rb | 1 + app/views/admin/budgets/_group.html.erb | 11 +++++++++-- config/locales/en/admin.yml | 1 + config/locales/es/admin.yml | 1 + spec/models/budget/heading_spec.rb | 14 ++++++++++++++ 5 files changed, 26 insertions(+), 2 deletions(-) diff --git a/app/models/budget/heading.rb b/app/models/budget/heading.rb index 1a232c75e..d740db502 100644 --- a/app/models/budget/heading.rb +++ b/app/models/budget/heading.rb @@ -10,6 +10,7 @@ class Budget validates :name, presence: true, uniqueness: { if: :name_exists_in_budget_headings } validates :price, presence: true validates :slug, presence: true, format: /\A[a-z0-9\-_]+\z/ + validates :population, numericality: { greater_than: 0 }, allow_nil: true delegate :budget, :budget_id, to: :group, allow_nil: true diff --git a/app/views/admin/budgets/_group.html.erb b/app/views/admin/budgets/_group.html.erb index 8537fa477..3d65730cc 100644 --- a/app/views/admin/budgets/_group.html.erb +++ b/app/views/admin/budgets/_group.html.erb @@ -49,10 +49,17 @@
- <%= f.text_field :population, + <%= f.number_field :population, label: false, maxlength: 8, - placeholder: t("admin.budgets.form.population") %> + min: 1, + placeholder: t("admin.budgets.form.population"), + data: {toggle_focus: "population-info"} %> +
+
+
diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index 483777d6f..e3ccb4446 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -105,6 +105,7 @@ en: table_heading: Heading table_amount: Amount table_population: Population + population_info: "Budget Heading population field is used for Statistic purposes at the end of the Budget to show for each Heading that represents an area with population what percentage voted. The field is optional so you can leave it empty if it doesn't apply." winners: calculate: Calculate Winner Investments calculated: Winners being calculated, it may take a minute. diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index 648fdb8a6..109078002 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -105,6 +105,7 @@ es: table_heading: Partida table_amount: Cantidad table_population: Población + population_info: "El campo población de las partidas presupuestarias se usa con fines estadísticos únicamente, con el objetivo de mostrar el porcentaje de votos habidos en cada partida que represente un área con población. Es un campo opcional, así que puedes dejarlo en blanco si no aplica." winners: calculate: Calcular propuestas ganadoras calculated: Calculando ganadoras, puede tardar un minuto. diff --git a/spec/models/budget/heading_spec.rb b/spec/models/budget/heading_spec.rb index ee2e4c142..73e3bb994 100644 --- a/spec/models/budget/heading_spec.rb +++ b/spec/models/budget/heading_spec.rb @@ -25,4 +25,18 @@ describe Budget::Heading do end end + describe "Save population" do + it "Allows nil for population" do + expect(create(:budget_heading, group: group, name: 'Population is nil')).to be_valid + end + + it "Doesn't allow 0 for population" do + expect(create(:budget_heading, group: group, name: 'Population is 0', population: 0)).not_to be_valid + end + + it "Allows value > 0 for population" do + expect(create(:budget_heading, group: group, name: 'Population is 10', population: 10)).to be_valid + end + end + end