From bf5dec2602a3273ac49ed0e57c73b6793ba56ce5 Mon Sep 17 00:00:00 2001 From: Eduardo Martinez Echevarria Date: Wed, 28 Jun 2017 20:46:50 +0200 Subject: [PATCH 1/7] Add published column to legislation_processes table --- .../20170626081337_add_published_to_legislation_processes.rb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 db/migrate/20170626081337_add_published_to_legislation_processes.rb diff --git a/db/migrate/20170626081337_add_published_to_legislation_processes.rb b/db/migrate/20170626081337_add_published_to_legislation_processes.rb new file mode 100644 index 000000000..abb03f2f8 --- /dev/null +++ b/db/migrate/20170626081337_add_published_to_legislation_processes.rb @@ -0,0 +1,5 @@ +class AddPublishedToLegislationProcesses < ActiveRecord::Migration + def change + add_column :legislation_processes, :published, :boolean, default: true + end +end From dfa9c988adf39c89af42d66437d17e7f04d82416 Mon Sep 17 00:00:00 2001 From: Eduardo Martinez Echevarria Date: Wed, 28 Jun 2017 20:53:20 +0200 Subject: [PATCH 2/7] Add checkbox to set published in process admin management --- app/controllers/admin/legislation/processes_controller.rb | 3 ++- app/views/admin/legislation/processes/_form.html.erb | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/controllers/admin/legislation/processes_controller.rb b/app/controllers/admin/legislation/processes_controller.rb index 995e34eee..fb4e8ee3f 100644 --- a/app/controllers/admin/legislation/processes_controller.rb +++ b/app/controllers/admin/legislation/processes_controller.rb @@ -49,7 +49,8 @@ class Admin::Legislation::ProcessesController < Admin::Legislation::BaseControll :debate_phase_enabled, :allegations_phase_enabled, :draft_publication_enabled, - :result_publication_enabled + :result_publication_enabled, + :published ) end end diff --git a/app/views/admin/legislation/processes/_form.html.erb b/app/views/admin/legislation/processes/_form.html.erb index 7d2b21703..205d97361 100644 --- a/app/views/admin/legislation/processes/_form.html.erb +++ b/app/views/admin/legislation/processes/_form.html.erb @@ -39,6 +39,9 @@ class: "js-calendar-full", id: "end_date" %> +
+ <%= f.check_box :published, checked: @process.published?, label: t('admin.legislation.processes.form.enabled') %> +

From 3e5c5d7e4946bf524f0a4d82b3fb82ed1421e9d3 Mon Sep 17 00:00:00 2001 From: Eduardo Martinez Echevarria Date: Wed, 28 Jun 2017 21:13:41 +0200 Subject: [PATCH 3/7] Define some actions on legislation processes as member actions --- app/controllers/legislation/processes_controller.rb | 12 ++---------- app/views/legislation/processes/_key_dates.html.erb | 8 ++++---- config/routes.rb | 10 ++++++---- spec/features/legislation/processes_spec.rb | 12 ++++++------ 4 files changed, 18 insertions(+), 24 deletions(-) diff --git a/app/controllers/legislation/processes_controller.rb b/app/controllers/legislation/processes_controller.rb index ee5c10830..adb7906fa 100644 --- a/app/controllers/legislation/processes_controller.rb +++ b/app/controllers/legislation/processes_controller.rb @@ -13,14 +13,13 @@ class Legislation::ProcessesController < Legislation::BaseController if @process.allegations_phase.enabled? && @process.allegations_phase.started? && draft_version.present? redirect_to legislation_process_draft_version_path(@process, draft_version) elsif @process.debate_phase.enabled? - redirect_to legislation_process_debate_path(@process) + redirect_to debate_legislation_process_path(@process) else - redirect_to legislation_process_allegations_path(@process) + redirect_to allegations_legislation_process_path(@process) end end def debate - set_process @phase = :debate_phase if @process.debate_phase.started? @@ -31,7 +30,6 @@ class Legislation::ProcessesController < Legislation::BaseController end def draft_publication - set_process @phase = :draft_publication if @process.draft_publication.started? @@ -48,7 +46,6 @@ class Legislation::ProcessesController < Legislation::BaseController end def allegations - set_process @phase = :allegations_phase if @process.allegations_phase.started? @@ -65,7 +62,6 @@ class Legislation::ProcessesController < Legislation::BaseController end def result_publication - set_process @phase = :result_publication if @process.result_publication.started? @@ -81,9 +77,5 @@ class Legislation::ProcessesController < Legislation::BaseController end end - private - def set_process - @process = ::Legislation::Process.find(params[:process_id]) - end end diff --git a/app/views/legislation/processes/_key_dates.html.erb b/app/views/legislation/processes/_key_dates.html.erb index d6131034b..375be7d51 100644 --- a/app/views/legislation/processes/_key_dates.html.erb +++ b/app/views/legislation/processes/_key_dates.html.erb @@ -9,7 +9,7 @@
    <% if process.debate_phase.enabled? %>
  • > - <%= link_to legislation_process_debate_path(process) do %> + <%= link_to debate_legislation_process_path(process) do %>

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

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

    <% end %> @@ -18,7 +18,7 @@ <% if process.draft_publication.enabled? %>
  • > - <%= link_to legislation_process_draft_publication_path(process) do %> + <%= link_to draft_publication_legislation_process_path(process) do %>

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

    <%= format_date(process.draft_publication_date) %>

    <% end %> @@ -27,7 +27,7 @@ <% if process.allegations_phase.enabled? %>
  • > - <%= link_to legislation_process_allegations_path(process) do %> + <%= link_to allegations_legislation_process_path(process) do %>

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

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

    <% end %> @@ -36,7 +36,7 @@ <% if process.result_publication.enabled? %>
  • > - <%= link_to legislation_process_result_publication_path(process) do %> + <%= link_to result_publication_legislation_process_path(process) do %>

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

    <%= format_date(process.result_publication_date) %>

    <% end %> diff --git a/config/routes.rb b/config/routes.rb index ef476cf28..dbf3e4709 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -109,10 +109,12 @@ Rails.application.routes.draw do namespace :legislation do resources :processes, only: [:index, :show] do - get :debate - get :draft_publication - get :allegations - get :result_publication + member do + get :debate + get :draft_publication + get :allegations + get :result_publication + end resources :questions, only: [:show] do resources :answers, only: [:create] end diff --git a/spec/features/legislation/processes_spec.rb b/spec/features/legislation/processes_spec.rb index 3ed4ccb74..282b13191 100644 --- a/spec/features/legislation/processes_spec.rb +++ b/spec/features/legislation/processes_spec.rb @@ -70,7 +70,7 @@ feature 'Legislation' do scenario 'not open' do process = create(:legislation_process, draft_publication_date: Date.current + 1.day) - visit legislation_process_draft_publication_path(process) + visit draft_publication_legislation_process_path(process) expect(page).to have_content("This phase is not open yet") end @@ -78,7 +78,7 @@ feature 'Legislation' do scenario 'open' do process = create(:legislation_process, draft_publication_date: Date.current) - visit legislation_process_draft_publication_path(process) + visit draft_publication_legislation_process_path(process) expect(page).to have_content("Nothing published yet") end @@ -88,7 +88,7 @@ feature 'Legislation' do scenario 'not open' do process = create(:legislation_process, allegations_start_date: Date.current + 1.day, allegations_end_date: Date.current + 2.days) - visit legislation_process_allegations_path(process) + visit allegations_legislation_process_path(process) expect(page).to have_content("This phase is not open yet") end @@ -96,7 +96,7 @@ feature 'Legislation' do scenario 'open' do process = create(:legislation_process, allegations_start_date: Date.current - 1.day, allegations_end_date: Date.current + 2.days) - visit legislation_process_allegations_path(process) + visit allegations_legislation_process_path(process) expect(page).to have_content("Nothing published yet") end @@ -106,7 +106,7 @@ feature 'Legislation' do scenario 'not open' do process = create(:legislation_process, result_publication_date: Date.current + 1.day) - visit legislation_process_result_publication_path(process) + visit result_publication_legislation_process_path(process) expect(page).to have_content("This phase is not open yet") end @@ -114,7 +114,7 @@ feature 'Legislation' do scenario 'open' do process = create(:legislation_process, result_publication_date: Date.current) - visit legislation_process_result_publication_path(process) + visit result_publication_legislation_process_path(process) expect(page).to have_content("Nothing published yet") end From 0bc318c8231d4113a3c3f63cfe352b5cf2d4bcbb Mon Sep 17 00:00:00 2001 From: Eduardo Martinez Echevarria Date: Thu, 29 Jun 2017 17:53:20 +0200 Subject: [PATCH 4/7] Add tests to check visibility of processes depending on published attribute --- spec/factories.rb | 6 ++ .../admin/legislation/processes_spec.rb | 1 + spec/features/legislation/processes_spec.rb | 77 +++++++++++++++++++ 3 files changed, 84 insertions(+) diff --git a/spec/factories.rb b/spec/factories.rb index 8ada920b8..c0cbd1cc1 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -629,6 +629,7 @@ FactoryGirl.define do allegations_phase_enabled true draft_publication_enabled true result_publication_enabled true + published true trait :next do start_date Date.current + 2.days @@ -662,6 +663,11 @@ FactoryGirl.define do allegations_end_date Date.current + 3.days result_publication_date Date.current + 5.days end + + trait :not_published do + published false + end + end factory :legislation_draft_version, class: 'Legislation::DraftVersion' do diff --git a/spec/features/admin/legislation/processes_spec.rb b/spec/features/admin/legislation/processes_spec.rb index e945f6ce8..8ad2fa456 100644 --- a/spec/features/admin/legislation/processes_spec.rb +++ b/spec/features/admin/legislation/processes_spec.rb @@ -88,6 +88,7 @@ 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 + expect(find("#legislation_process_published")).to be_checked fill_in 'legislation_process_summary', with: '' click_button "Save changes" diff --git a/spec/features/legislation/processes_spec.rb b/spec/features/legislation/processes_spec.rb index 282b13191..0ef5e0c7c 100644 --- a/spec/features/legislation/processes_spec.rb +++ b/spec/features/legislation/processes_spec.rb @@ -2,6 +2,27 @@ require 'rails_helper' feature 'Legislation' do + let!(:administrator) { create(:administrator).user } + shared_examples "not published permissions" do |path| + + let(:not_published_process) { create(:legislation_process, :not_published, title: "Process not published") } + let!(:not_permission_message) { "You do not have permission to carry out the action" } + + it "is forbidden for a normal user" do + visit send(path, not_published_process) + + expect(page).to have_content not_permission_message + expect(page).to_not have_content("Process not published") + end + + it "is available for an administrator user" do + login_as(administrator) + visit send(path, not_published_process) + + expect(page).to have_content("Process not published") + end + end + context 'processes home page' do scenario 'Processes can be listed' do @@ -45,9 +66,57 @@ feature 'Legislation' do expect(page).to_not have_content('Process next') expect(page).to have_content('Process past') end + + context "not published processes" do + before do + create(:legislation_process, title: "published") + create(:legislation_process, :not_published, title: "not published") + [:next, :past].each do |trait| + create(:legislation_process, trait, title: "#{trait} published") + create(:legislation_process, :not_published, trait, title: "#{trait} not published") + end + end + + it "aren't listed" do + visit legislation_processes_path + expect(page).to_not have_content('not published') + expect(page).to have_content('published') + + login_as(administrator) + visit legislation_processes_path + expect(page).to_not have_content('not published') + expect(page).to have_content('published') + end + + it "aren't listed with next filter" do + visit legislation_processes_path(filter: 'next') + expect(page).to_not have_content('not published') + expect(page).to have_content('next published') + + login_as(administrator) + visit legislation_processes_path(filter: 'next') + expect(page).to_not have_content('not published') + expect(page).to have_content('next published') + end + + it "aren't listed with past filter" do + visit legislation_processes_path(filter: 'past') + expect(page).to_not have_content('not published') + expect(page).to have_content('past published') + + login_as(administrator) + visit legislation_processes_path(filter: 'past') + expect(page).to_not have_content('not published') + expect(page).to have_content('past published') + end + end end context 'process page' do + context "show" do + include_examples "not published permissions", :legislation_process_path + end + context 'debate phase' do scenario 'not open' do process = create(:legislation_process, debate_start_date: Date.current + 1.day, debate_end_date: Date.current + 2.days) @@ -64,6 +133,8 @@ feature 'Legislation' do expect(page).to have_content("Participate in the debate") end + + include_examples "not published permissions", :debate_legislation_process_path end context 'draft publication phase' do @@ -82,6 +153,8 @@ feature 'Legislation' do expect(page).to have_content("Nothing published yet") end + + include_examples "not published permissions", :draft_publication_legislation_process_path end context 'allegations phase' do @@ -100,6 +173,8 @@ feature 'Legislation' do expect(page).to have_content("Nothing published yet") end + + include_examples "not published permissions", :allegations_legislation_process_path end context 'final version publication phase' do @@ -118,6 +193,8 @@ feature 'Legislation' do expect(page).to have_content("Nothing published yet") end + + include_examples "not published permissions", :result_publication_legislation_process_path end end end From a599a0b91e5bdc9ea8928794eb5b14f6cc64bfa7 Mon Sep 17 00:00:00 2001 From: Eduardo Martinez Echevarria Date: Thu, 29 Jun 2017 17:58:43 +0200 Subject: [PATCH 5/7] Set legislation processes visibility depending on publication --- app/controllers/legislation/processes_controller.rb | 2 +- app/models/abilities/everyone.rb | 2 +- app/models/legislation/process.rb | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/controllers/legislation/processes_controller.rb b/app/controllers/legislation/processes_controller.rb index adb7906fa..6593821cb 100644 --- a/app/controllers/legislation/processes_controller.rb +++ b/app/controllers/legislation/processes_controller.rb @@ -4,7 +4,7 @@ class Legislation::ProcessesController < Legislation::BaseController def index @current_filter ||= 'open' - @processes = ::Legislation::Process.send(@current_filter).page(params[:page]) + @processes = ::Legislation::Process.send(@current_filter).published.page(params[:page]) end def show diff --git a/app/models/abilities/everyone.rb b/app/models/abilities/everyone.rb index eaa971016..4e6183a2a 100644 --- a/app/models/abilities/everyone.rb +++ b/app/models/abilities/everyone.rb @@ -19,7 +19,7 @@ module Abilities can [:read, :print], Budget::Investment can :read_results, Budget, phase: "finished" can :new, DirectMessage - can [:read, :debate, :draft_publication, :allegations, :result_publication], Legislation::Process + can [:read, :debate, :draft_publication, :allegations, :result_publication], Legislation::Process, published: true can [:read, :changes, :go_to_version], Legislation::DraftVersion can [:read], Legislation::Question can [:create], Legislation::Answer diff --git a/app/models/legislation/process.rb b/app/models/legislation/process.rb index 61dc1f7a0..59ab99433 100644 --- a/app/models/legislation/process.rb +++ b/app/models/legislation/process.rb @@ -21,6 +21,8 @@ class Legislation::Process < ActiveRecord::Base scope :next, -> { where("start_date > ?", Date.current).order('id DESC') } scope :past, -> { where("end_date < ?", Date.current).order('id DESC') } + scope :published, -> { where(published: true) } + def debate_phase Legislation::Process::Phase.new(debate_start_date, debate_end_date, debate_phase_enabled) end From 331976e3b5679aae68cb19368d63a20d6b043921 Mon Sep 17 00:00:00 2001 From: Eduardo Martinez Echevarria Date: Fri, 30 Jun 2017 14:21:43 +0200 Subject: [PATCH 6/7] Make explicit the creation of legislation processes as published in db/seeds --- db/dev_seeds.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/db/dev_seeds.rb b/db/dev_seeds.rb index 35257931a..c0655bfe7 100644 --- a/db/dev_seeds.rb +++ b/db/dev_seeds.rb @@ -651,7 +651,8 @@ print "Creating legislation processes" debate_phase_enabled: true, allegations_phase_enabled: true, draft_publication_enabled: true, - result_publication_enabled: true + result_publication_enabled: true, + published: true ) end From 87fc8e8fddb3200890ce9f3d14b34f15d185e7c6 Mon Sep 17 00:00:00 2001 From: Eduardo Martinez Echevarria Date: Fri, 30 Jun 2017 15:49:10 +0200 Subject: [PATCH 7/7] Update db/schema.rb --- db/schema.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/db/schema.rb b/db/schema.rb index 3c21882e9..042bec7dd 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: 20170623141655) do +ActiveRecord::Schema.define(version: 20170626081337) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -429,6 +429,7 @@ ActiveRecord::Schema.define(version: 20170623141655) do t.boolean "allegations_phase_enabled", default: false t.boolean "draft_publication_enabled", default: false t.boolean "result_publication_enabled", default: false + t.boolean "published", default: true end add_index "legislation_processes", ["allegations_end_date"], name: "index_legislation_processes_on_allegations_end_date", using: :btree