From bae9d105fa4c22869afbe9b1d9996c1b97ec018d Mon Sep 17 00:00:00 2001 From: Bertocq Date: Tue, 13 Jun 2017 22:50:38 +0200 Subject: [PATCH 01/11] Add phase and publications enabled column flags to Legislative Process table --- ...add_phase_pub_enabled_status_to_legislative_process.rb | 8 ++++++++ db/schema.rb | 6 +++++- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20170613203256_add_phase_pub_enabled_status_to_legislative_process.rb diff --git a/db/migrate/20170613203256_add_phase_pub_enabled_status_to_legislative_process.rb b/db/migrate/20170613203256_add_phase_pub_enabled_status_to_legislative_process.rb new file mode 100644 index 000000000..7e6ecda96 --- /dev/null +++ b/db/migrate/20170613203256_add_phase_pub_enabled_status_to_legislative_process.rb @@ -0,0 +1,8 @@ +class AddPhasePubEnabledStatusToLegislativeProcess < ActiveRecord::Migration + def change + add_column :legislation_processes, :debate_phase_enabled, :boolean, default: false + add_column :legislation_processes, :allegations_phase_enabled, :boolean, default: false + add_column :legislation_processes, :draft_publication_enabled, :boolean, default: false + add_column :legislation_processes, :result_publication_enabled, :boolean, default: false + end +end diff --git a/db/schema.rb b/db/schema.rb index 39c9d97a5..1062b3f91 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20170613174317) do +ActiveRecord::Schema.define(version: 20170613203256) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -417,6 +417,10 @@ ActiveRecord::Schema.define(version: 20170613174317) do t.datetime "created_at", null: false t.datetime "updated_at", null: false t.text "summary" + t.boolean "debate_phase_enabled", default: false + t.boolean "allegations_phase_enabled", default: false + t.boolean "draft_publication_enabled", default: false + t.boolean "result_publication_enabled", default: false end add_index "legislation_processes", ["allegations_end_date"], name: "index_legislation_processes_on_allegations_end_date", using: :btree From cb7358bb974f1009be7035b0256db0e13c92fd73 Mon Sep 17 00:00:00 2001 From: Bertocq Date: Tue, 13 Jun 2017 23:47:14 +0200 Subject: [PATCH 02/11] Send to both Phase and Publication classes the enabled flag and use for enabled? helper method --- app/models/legislation/process.rb | 10 ++++++---- app/models/legislation/process/phase.rb | 5 +++-- app/models/legislation/process/publication.rb | 5 +++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/app/models/legislation/process.rb b/app/models/legislation/process.rb index d7ad6cf62..0370d8913 100644 --- a/app/models/legislation/process.rb +++ b/app/models/legislation/process.rb @@ -20,19 +20,21 @@ class Legislation::Process < ActiveRecord::Base scope :past, -> { where("end_date < ?", Date.current).order('id DESC') } def debate_phase - Legislation::Process::Phase.new(debate_start_date, debate_end_date) + Legislation::Process::Phase.new(debate_start_date, debate_end_date, debate_phase_enabled) end def allegations_phase - Legislation::Process::Phase.new(allegations_start_date, allegations_end_date) + Legislation::Process::Phase.new(allegations_start_date, allegations_end_date, allegations_phase_enabled) end def draft_publication - Legislation::Process::Publication.new(draft_publication_date) + Legislation::Process::Publication.new(draft_publication_date, draft_publication_enabled) end def result_publication - Legislation::Process::Publication.new(result_publication_date) + Legislation::Process::Publication.new(result_publication_date, result_publication_enabled) + end + end def total_comments diff --git a/app/models/legislation/process/phase.rb b/app/models/legislation/process/phase.rb index 1b8482a9a..5d677251d 100644 --- a/app/models/legislation/process/phase.rb +++ b/app/models/legislation/process/phase.rb @@ -2,13 +2,14 @@ class Legislation::Process::Phase - def initialize(start_date, end_date) + def initialize(start_date, end_date, enabled) @start_date = start_date @end_date = end_date + @enabled = enabled end def enabled? - @start_date.present? && @end_date.present? + @enabled end def started? diff --git a/app/models/legislation/process/publication.rb b/app/models/legislation/process/publication.rb index 10110f0e7..650914f95 100644 --- a/app/models/legislation/process/publication.rb +++ b/app/models/legislation/process/publication.rb @@ -2,12 +2,13 @@ class Legislation::Process::Publication - def initialize(publication_date) + def initialize(publication_date, enabled) @publication_date = publication_date + @enabled = enabled end def enabled? - @publication_date.present? + @enabled end def started? From 9a97d09cabc6073bdf33571e26399bfe67c313e6 Mon Sep 17 00:00:00 2001 From: Bertocq Date: Tue, 13 Jun 2017 23:47:53 +0200 Subject: [PATCH 03/11] Add new phase/publication enabled flags on seeds and legislation process factory --- db/dev_seeds.rb | 6 +++++- spec/factories.rb | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/db/dev_seeds.rb b/db/dev_seeds.rb index d828262bf..2ac996f44 100644 --- a/db/dev_seeds.rb +++ b/db/dev_seeds.rb @@ -643,7 +643,11 @@ print "Creating legislation processes" draft_publication_date: Date.current + 1.day, allegations_start_date: Date.current + 2.days, allegations_end_date: Date.current + 3.days, - result_publication_date: Date.current + 4.days + result_publication_date: Date.current + 4.days, + debate_phase_enabled: true, + allegations_phase_enabled: true, + draft_publication_enabled: true, + result_publication_enabled: true ) end diff --git a/spec/factories.rb b/spec/factories.rb index cc39af5d7..8076537e4 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -612,6 +612,10 @@ FactoryGirl.define do allegations_start_date Date.current allegations_end_date Date.current + 3.days result_publication_date Date.current + 5.days + debate_phase_enabled true + allegations_phase_enabled true + draft_publication_enabled true + result_publication_enable true trait :next do start_date Date.current + 2.days From a147765273f6c588cb48cbc3935f56621a7384c5 Mon Sep 17 00:00:00 2001 From: Bertocq Date: Tue, 13 Jun 2017 23:48:31 +0200 Subject: [PATCH 04/11] Add enabled_phases_and_publications_count helper method on legislation process for views --- app/models/legislation/process.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/models/legislation/process.rb b/app/models/legislation/process.rb index 0370d8913..61dc1f7a0 100644 --- a/app/models/legislation/process.rb +++ b/app/models/legislation/process.rb @@ -2,6 +2,8 @@ class Legislation::Process < ActiveRecord::Base acts_as_paranoid column: :hidden_at include ActsAsParanoidAliases + PHASES_AND_PUBLICATIONS = %i(debate_phase allegations_phase draft_publication result_publication).freeze + has_many :draft_versions, -> { order(:id) }, class_name: 'Legislation::DraftVersion', foreign_key: 'legislation_process_id', dependent: :destroy has_one :final_draft_version, -> { where final_version: true, status: 'published' }, class_name: 'Legislation::DraftVersion', foreign_key: 'legislation_process_id' has_many :questions, -> { order(:id) }, class_name: 'Legislation::Question', foreign_key: 'legislation_process_id', dependent: :destroy @@ -35,6 +37,8 @@ class Legislation::Process < ActiveRecord::Base Legislation::Process::Publication.new(result_publication_date, result_publication_enabled) end + def enabled_phases_and_publications_count + PHASES_AND_PUBLICATIONS.count { |process| send(process).enabled? } end def total_comments From 73ff68815d7da1c16840baa54356f1ee24bb0d81 Mon Sep 17 00:00:00 2001 From: Bertocq Date: Tue, 13 Jun 2017 23:50:12 +0200 Subject: [PATCH 05/11] Update admin legislation process controller and form to allow enabling/disabling phase/publications --- .../admin/legislation/processes_controller.rb | 6 +++++- app/views/admin/legislation/processes/_form.html.erb | 12 ++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/controllers/admin/legislation/processes_controller.rb b/app/controllers/admin/legislation/processes_controller.rb index 2c352a2db..995e34eee 100644 --- a/app/controllers/admin/legislation/processes_controller.rb +++ b/app/controllers/admin/legislation/processes_controller.rb @@ -45,7 +45,11 @@ class Admin::Legislation::ProcessesController < Admin::Legislation::BaseControll :draft_publication_date, :allegations_start_date, :allegations_end_date, - :result_publication_date + :result_publication_date, + :debate_phase_enabled, + :allegations_phase_enabled, + :draft_publication_enabled, + :result_publication_enabled ) end end diff --git a/app/views/admin/legislation/processes/_form.html.erb b/app/views/admin/legislation/processes/_form.html.erb index 8233d5f14..f1c446029 100644 --- a/app/views/admin/legislation/processes/_form.html.erb +++ b/app/views/admin/legislation/processes/_form.html.erb @@ -70,8 +70,7 @@ id: "debate_end_date" %>
- <%= check_box_tag :debate_phase_active, @process.debate_phase.enabled?, @process.new_record? || @process.debate_phase.enabled?, data: {disable_date: "debate"} %> - <%= label_tag :debate_phase_active, t('admin.legislation.processes.form.active') %> + <%= f.check_box :debate_phase_enabled, checked: @process.debate_phase.enabled?, label: t('admin.legislation.processes.form.active') %>
@@ -104,8 +103,7 @@ id: "allegations_end_date" %>
- <%= check_box_tag :allegations_phase_active, @process.allegations_phase.enabled?, @process.new_record? || @process.allegations_phase.enabled?, data: {disable_date: "allegations"} %> - <%= label_tag :allegations_phase_active, t('admin.legislation.processes.form.active') %> + <%= f.check_box :allegations_phase_enabled, checked: @process.allegations_phase.enabled?, label: t('admin.legislation.processes.form.active') %>
@@ -125,8 +123,7 @@ id: "draft_publication_date" %>
- <%= check_box_tag :draft_publication_phase_active, @process.draft_publication.enabled?, @process.new_record? || @process.draft_publication.enabled?, data: {disable_date: "draft_publication"} %> - <%= label_tag :draft_publication_phase_active, t('admin.legislation.processes.form.active') %> + <%= f.check_box :draft_publication_enabled, checked: @process.draft_publication.enabled?, label: t('admin.legislation.processes.form.active') %>

@@ -145,8 +142,7 @@ id: "result_publication_date" %>
- <%= check_box_tag :result_publication_phase_active, @process.result_publication.enabled?, @process.new_record? || @process.result_publication.enabled?, data: {disable_date: "final_publication"} %> - <%= label_tag :result_publication_phase_active, t('admin.legislation.processes.form.active') %> + <%= f.check_box :result_publication_enabled, checked: @process.result_publication.enabled?, label: t('admin.legislation.processes.form.active') %>

From 4ea5df40120dffca9b5125b71385c22c6e6d7424 Mon Sep 17 00:00:00 2001 From: Bertocq Date: Tue, 13 Jun 2017 23:50:45 +0200 Subject: [PATCH 06/11] Display only the Legislation Process dates for those phase/publication enabled --- .../legislation/processes/_process.html.erb | 56 ++++++++++++------- 1 file changed, 35 insertions(+), 21 deletions(-) diff --git a/app/views/legislation/processes/_process.html.erb b/app/views/legislation/processes/_process.html.erb index a0a2d2e37..d5e44076a 100644 --- a/app/views/legislation/processes/_process.html.erb +++ b/app/views/legislation/processes/_process.html.erb @@ -17,28 +17,42 @@
-
-
-

<%= t('legislation.processes.shared.key_dates') %>

+ <% if process.enabled_phases_and_publications_count.positive? %> + <% column_width = 12 / process.enabled_phases_and_publications_count %> +
+
+

<%= t('legislation.processes.shared.key_dates') %>

+
-
-
-
-
<%= t('legislation.processes.shared.debate_dates') %>
-

<%= format_date(process.debate_start_date) %> - <%= format_date(process.debate_end_date) %>

+
+ <% if process.debate_phase.enabled? %> +
+
<%= t('legislation.processes.shared.debate_dates') %>
+

<%= format_date(process.debate_start_date) %> - <%= format_date(process.debate_end_date) %>

+
+ <% end %> + + <% if process.draft_publication.enabled? %> +
+
<%= t('legislation.processes.shared.draft_publication_date') %>
+

<%= format_date(process.draft_publication_date) %>

+
+ <% end %> + + <% if process.allegations_phase.enabled? %> +
+
<%= t('legislation.processes.shared.allegations_dates') %>
+

<%= format_date(process.allegations_start_date) %> - <%= format_date(process.allegations_end_date) %>

+
+ <% end %> + + <% if process.result_publication.enabled? %> +
+
<%= t('legislation.processes.shared.result_publication_date') %>
+

<%= format_date(process.result_publication_date) %>

+
+ <% end %>
-
-
<%= t('legislation.processes.shared.draft_publication_date') %>
-

<%= format_date(process.draft_publication_date) %>

-
-
-
<%= t('legislation.processes.shared.allegations_dates') %>
-

<%= format_date(process.allegations_start_date) %> - <%= format_date(process.allegations_end_date) %>

-
-
-
<%= t('legislation.processes.shared.result_publication_date') %>
-

<%= format_date(process.result_publication_date) %>

-
-
+ <% end %>
From 33e825672c992908abc8769962936ab54c4f1239 Mon Sep 17 00:00:00 2001 From: Bertocq Date: Tue, 13 Jun 2017 23:56:31 +0200 Subject: [PATCH 07/11] Rename label for legislation process active checkbox to enabled on both translations and form --- app/views/admin/legislation/processes/_form.html.erb | 8 ++++---- config/locales/admin.en.yml | 2 +- config/locales/admin.es.yml | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/views/admin/legislation/processes/_form.html.erb b/app/views/admin/legislation/processes/_form.html.erb index f1c446029..7d2b21703 100644 --- a/app/views/admin/legislation/processes/_form.html.erb +++ b/app/views/admin/legislation/processes/_form.html.erb @@ -70,7 +70,7 @@ id: "debate_end_date" %>
- <%= f.check_box :debate_phase_enabled, checked: @process.debate_phase.enabled?, label: t('admin.legislation.processes.form.active') %> + <%= f.check_box :debate_phase_enabled, checked: @process.debate_phase.enabled?, label: t('admin.legislation.processes.form.enabled') %>
@@ -103,7 +103,7 @@ id: "allegations_end_date" %>
- <%= f.check_box :allegations_phase_enabled, checked: @process.allegations_phase.enabled?, label: t('admin.legislation.processes.form.active') %> + <%= f.check_box :allegations_phase_enabled, checked: @process.allegations_phase.enabled?, label: t('admin.legislation.processes.form.enabled') %>
@@ -123,7 +123,7 @@ id: "draft_publication_date" %>
- <%= f.check_box :draft_publication_enabled, checked: @process.draft_publication.enabled?, label: t('admin.legislation.processes.form.active') %> + <%= f.check_box :draft_publication_enabled, checked: @process.draft_publication.enabled?, label: t('admin.legislation.processes.form.enabled') %>

@@ -142,7 +142,7 @@ id: "result_publication_date" %>
- <%= f.check_box :result_publication_enabled, checked: @process.result_publication.enabled?, label: t('admin.legislation.processes.form.active') %> + <%= f.check_box :result_publication_enabled, checked: @process.result_publication.enabled?, label: t('admin.legislation.processes.form.enabled') %>

diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml index 15e0d2ed7..1ba256dfe 100755 --- a/config/locales/admin.en.yml +++ b/config/locales/admin.en.yml @@ -211,7 +211,7 @@ en: form: error: Error form: - active: Active + enabled: Enabled process: Process debate_phase: Debate phase allegations_phase: Allegations phase diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml index bee867531..1cd133da4 100644 --- a/config/locales/admin.es.yml +++ b/config/locales/admin.es.yml @@ -211,7 +211,7 @@ es: form: error: Error form: - active: Activa + enabled: Habilitado process: Proceso debate_phase: Fase previa allegations_phase: Fase de alegaciones From a279e77c39448a2e751e1b9b765962ee319c1967 Mon Sep 17 00:00:00 2001 From: Bertocq Date: Wed, 14 Jun 2017 00:13:56 +0200 Subject: [PATCH 08/11] Fix typo on legislation process factory --- spec/factories.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/factories.rb b/spec/factories.rb index 8076537e4..c63792dce 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -615,7 +615,7 @@ FactoryGirl.define do debate_phase_enabled true allegations_phase_enabled true draft_publication_enabled true - result_publication_enable true + result_publication_enabled true trait :next do start_date Date.current + 2.days From c18d1b6e8f0a7c4b512b265bf0c41f7af0088747 Mon Sep 17 00:00:00 2001 From: Bertocq Date: Wed, 14 Jun 2017 00:21:08 +0200 Subject: [PATCH 09/11] Check new enabled? logic on both Legislation::Process Phase and Publication classes --- spec/models/legislation/process/phase_spec.rb | 4 ++-- spec/models/legislation/process/publication_spec.rb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/models/legislation/process/phase_spec.rb b/spec/models/legislation/process/phase_spec.rb index a92b36f78..40d6296b2 100644 --- a/spec/models/legislation/process/phase_spec.rb +++ b/spec/models/legislation/process/phase_spec.rb @@ -7,14 +7,14 @@ RSpec.describe Legislation::Process::Phase, type: :model do it "checks debate phase" do expect(process.debate_phase.enabled?).to be true - process.update_attributes(debate_start_date: nil, debate_end_date: nil) + process.update_attributes(debate_phase_enabled: false) expect(process.debate_phase.enabled?).to be false end it "checks allegations phase" do expect(process.allegations_phase.enabled?).to be true - process.update_attributes(allegations_start_date: nil, allegations_end_date: nil) + process.update_attributes(allegations_phase_enabled: false) expect(process.allegations_phase.enabled?).to be false end end diff --git a/spec/models/legislation/process/publication_spec.rb b/spec/models/legislation/process/publication_spec.rb index 4731d14b2..a489568d4 100644 --- a/spec/models/legislation/process/publication_spec.rb +++ b/spec/models/legislation/process/publication_spec.rb @@ -7,14 +7,14 @@ RSpec.describe Legislation::Process::Publication, type: :model do it "checks draft publication" do expect(process.draft_publication.enabled?).to be true - process.update_attributes(draft_publication_date: nil) + process.update_attributes(draft_publication_enabled: false) expect(process.draft_publication.enabled?).to be false end it "checks result publication" do expect(process.result_publication.enabled?).to be true - process.update_attributes(result_publication_date: nil) + process.update_attributes(result_publication_enabled: false) expect(process.result_publication.enabled?).to be false end end From 1dac73eb48ad30b8891013a176b4c04728e0fa84 Mon Sep 17 00:00:00 2001 From: Bertocq Date: Wed, 14 Jun 2017 00:29:09 +0200 Subject: [PATCH 10/11] Fix debate phase checkbox name on admin legislation process feature spec, as well as expectations --- spec/features/admin/legislation/processes_spec.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/features/admin/legislation/processes_spec.rb b/spec/features/admin/legislation/processes_spec.rb index 2c8de0d95..df2b7faf6 100644 --- a/spec/features/admin/legislation/processes_spec.rb +++ b/spec/features/admin/legislation/processes_spec.rb @@ -87,15 +87,15 @@ feature 'Admin legislation processes' do click_link "An example legislation process" expect(page).to have_selector("h2", text: "An example legislation process") - expect(find("#debate_phase_active")).to be_checked + expect(find("#legislation_process_debate_phase_enabled")).to be_checked - uncheck "debate_phase_active" + uncheck "legislation_process_debate_phase_enabled" fill_in 'legislation_process_summary', with: '' click_button "Save changes" expect(page).to have_content "Process updated successfully" - expect(find("#debate_start_date").value).to be_blank - expect(find("#debate_end_date").value).to be_blank + expect(find("#debate_start_date").value).not_to be_blank + expect(find("#debate_end_date").value).not_to be_blank visit legislation_processes_path expect(page).not_to have_content 'Summarizing the process' From 8440f6c74941594733898555936458893a652a94 Mon Sep 17 00:00:00 2001 From: Bertocq Date: Wed, 14 Jun 2017 00:36:07 +0200 Subject: [PATCH 11/11] Increase coverage of admin feature spec for legislation process dates enabling --- .../admin/legislation/processes_spec.rb | 34 ++++++++++++++++--- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/spec/features/admin/legislation/processes_spec.rb b/spec/features/admin/legislation/processes_spec.rb index df2b7faf6..e945f6ce8 100644 --- a/spec/features/admin/legislation/processes_spec.rb +++ b/spec/features/admin/legislation/processes_spec.rb @@ -73,7 +73,7 @@ feature 'Admin legislation processes' do end context 'Update' do - scenario 'Deactivate debate phase', js: true do + scenario 'Remove summary text', js: true do process = create(:legislation_process, title: 'An example legislation process', summary: 'Summarizing the process', @@ -89,17 +89,41 @@ feature 'Admin legislation processes' do expect(page).to have_selector("h2", text: "An example legislation process") expect(find("#legislation_process_debate_phase_enabled")).to be_checked - uncheck "legislation_process_debate_phase_enabled" fill_in 'legislation_process_summary', with: '' click_button "Save changes" + expect(page).to have_content "Process updated successfully" + + visit legislation_processes_path + expect(page).not_to have_content 'Summarizing the process' + expect(page).to have_content 'Description of the process' + end + + scenario 'Deactivate draft publication', js: true do + process = create(:legislation_process, + title: 'An example legislation process', + summary: 'Summarizing the process', + description: 'Description of the process') + visit admin_root_path + + within('#side_menu') do + click_link "Collaborative Legislation" + end + + click_link "An example legislation process" + + expect(find("#legislation_process_draft_publication_enabled")).to be_checked + + uncheck "legislation_process_draft_publication_enabled" + click_button "Save changes" + expect(page).to have_content "Process updated successfully" expect(find("#debate_start_date").value).not_to be_blank expect(find("#debate_end_date").value).not_to be_blank - visit legislation_processes_path - expect(page).not_to have_content 'Summarizing the process' - expect(page).to have_content 'Description of the process' + click_link 'Click to visit' + + expect(page).not_to have_content 'Draft publication' end end end