Make it possible to select proposals without JavaScript
This way, when JavaScript hasn't loaded (for whatever reason), administrators can still use this functionality.
This commit is contained in:
@@ -11,12 +11,18 @@ class Admin::Legislation::ProposalsController < Admin::Legislation::BaseControll
|
|||||||
def select
|
def select
|
||||||
@proposal.update!(selected: true)
|
@proposal.update!(selected: true)
|
||||||
|
|
||||||
render :toggle_selection
|
respond_to do |format|
|
||||||
|
format.html { redirect_to request.referer, notice: t("flash.actions.update.proposal") }
|
||||||
|
format.js { render :toggle_selection }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def deselect
|
def deselect
|
||||||
@proposal.update!(selected: false)
|
@proposal.update!(selected: false)
|
||||||
|
|
||||||
render :toggle_selection
|
respond_to do |format|
|
||||||
|
format.html { redirect_to request.referer, notice: t("flash.actions.update.proposal") }
|
||||||
|
format.js { render :toggle_selection }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -22,13 +22,19 @@ class Admin::ProposalsController < Admin::BaseController
|
|||||||
def select
|
def select
|
||||||
@proposal.update!(selected: true)
|
@proposal.update!(selected: true)
|
||||||
|
|
||||||
render :toggle_selection
|
respond_to do |format|
|
||||||
|
format.html { redirect_to request.referer, notice: t("flash.actions.update.proposal") }
|
||||||
|
format.js { render :toggle_selection }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def deselect
|
def deselect
|
||||||
@proposal.update!(selected: false)
|
@proposal.update!(selected: false)
|
||||||
|
|
||||||
render :toggle_selection
|
respond_to do |format|
|
||||||
|
format.html { redirect_to request.referer, notice: t("flash.actions.update.proposal") }
|
||||||
|
format.js { render :toggle_selection }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|||||||
@@ -0,0 +1,61 @@
|
|||||||
|
require "rails_helper"
|
||||||
|
|
||||||
|
describe Admin::Legislation::ProposalsController, :admin do
|
||||||
|
describe "PATCH select" do
|
||||||
|
let(:proposal) { create(:legislation_proposal) }
|
||||||
|
|
||||||
|
it "selects the proposal" do
|
||||||
|
expect do
|
||||||
|
patch :select, xhr: true, params: { id: proposal.id, process_id: proposal.process.id }
|
||||||
|
end.to change { proposal.reload.selected? }.from(false).to(true)
|
||||||
|
|
||||||
|
expect(response).to be_successful
|
||||||
|
end
|
||||||
|
|
||||||
|
it "does not modify already selected proposals" do
|
||||||
|
proposal.update!(selected: true)
|
||||||
|
|
||||||
|
expect do
|
||||||
|
patch :select, xhr: true, params: { id: proposal.id, process_id: proposal.process.id }
|
||||||
|
end.not_to change { proposal.reload.selected? }
|
||||||
|
end
|
||||||
|
|
||||||
|
it "redirects admins without JavaScript to the same page" do
|
||||||
|
request.env["HTTP_REFERER"] = admin_proposals_path
|
||||||
|
|
||||||
|
patch :select, params: { id: proposal.id, process_id: proposal.process.id }
|
||||||
|
|
||||||
|
expect(response).to redirect_to admin_proposals_path
|
||||||
|
expect(flash[:notice]).to eq "Proposal updated successfully."
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "PATCH deselect" do
|
||||||
|
let(:proposal) { create(:legislation_proposal, :selected) }
|
||||||
|
|
||||||
|
it "deselects the proposal" do
|
||||||
|
expect do
|
||||||
|
patch :deselect, xhr: true, params: { id: proposal.id, process_id: proposal.process.id }
|
||||||
|
end.to change { proposal.reload.selected? }.from(true).to(false)
|
||||||
|
|
||||||
|
expect(response).to be_successful
|
||||||
|
end
|
||||||
|
|
||||||
|
it "does not modify non-selected proposals" do
|
||||||
|
proposal.update!(selected: false)
|
||||||
|
|
||||||
|
expect do
|
||||||
|
patch :deselect, xhr: true, params: { id: proposal.id, process_id: proposal.process.id }
|
||||||
|
end.not_to change { proposal.reload.selected? }
|
||||||
|
end
|
||||||
|
|
||||||
|
it "redirects admins without JavaScript to the same page" do
|
||||||
|
request.env["HTTP_REFERER"] = admin_proposals_path
|
||||||
|
|
||||||
|
patch :deselect, params: { id: proposal.id, process_id: proposal.process.id }
|
||||||
|
|
||||||
|
expect(response).to redirect_to admin_proposals_path
|
||||||
|
expect(flash[:notice]).to eq "Proposal updated successfully."
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
61
spec/controllers/admin/proposals_controller_spec.rb
Normal file
61
spec/controllers/admin/proposals_controller_spec.rb
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
require "rails_helper"
|
||||||
|
|
||||||
|
describe Admin::ProposalsController, :admin do
|
||||||
|
describe "PATCH select" do
|
||||||
|
let(:proposal) { create(:proposal) }
|
||||||
|
|
||||||
|
it "selects the proposal" do
|
||||||
|
expect do
|
||||||
|
patch :select, xhr: true, params: { id: proposal.id }
|
||||||
|
end.to change { proposal.reload.selected? }.from(false).to(true)
|
||||||
|
|
||||||
|
expect(response).to be_successful
|
||||||
|
end
|
||||||
|
|
||||||
|
it "does not modify already selected proposals" do
|
||||||
|
proposal.update!(selected: true)
|
||||||
|
|
||||||
|
expect do
|
||||||
|
patch :select, xhr: true, params: { id: proposal.id }
|
||||||
|
end.not_to change { proposal.reload.selected? }
|
||||||
|
end
|
||||||
|
|
||||||
|
it "redirects admins without JavaScript to the same page" do
|
||||||
|
request.env["HTTP_REFERER"] = admin_proposals_path
|
||||||
|
|
||||||
|
patch :select, params: { id: proposal.id }
|
||||||
|
|
||||||
|
expect(response).to redirect_to admin_proposals_path
|
||||||
|
expect(flash[:notice]).to eq "Proposal updated successfully."
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "PATCH deselect" do
|
||||||
|
let(:proposal) { create(:proposal, :selected) }
|
||||||
|
|
||||||
|
it "deselects the proposal" do
|
||||||
|
expect do
|
||||||
|
patch :deselect, xhr: true, params: { id: proposal.id }
|
||||||
|
end.to change { proposal.reload.selected? }.from(true).to(false)
|
||||||
|
|
||||||
|
expect(response).to be_successful
|
||||||
|
end
|
||||||
|
|
||||||
|
it "does not modify non-selected proposals" do
|
||||||
|
proposal.update!(selected: false)
|
||||||
|
|
||||||
|
expect do
|
||||||
|
patch :deselect, xhr: true, params: { id: proposal.id }
|
||||||
|
end.not_to change { proposal.reload.selected? }
|
||||||
|
end
|
||||||
|
|
||||||
|
it "redirects admins without JavaScript to the same page" do
|
||||||
|
request.env["HTTP_REFERER"] = admin_proposals_path
|
||||||
|
|
||||||
|
patch :deselect, params: { id: proposal.id }
|
||||||
|
|
||||||
|
expect(response).to redirect_to admin_proposals_path
|
||||||
|
expect(flash[:notice]).to eq "Proposal updated successfully."
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -177,5 +177,9 @@ FactoryBot.define do
|
|||||||
trait :hidden do
|
trait :hidden do
|
||||||
hidden_at { Time.current }
|
hidden_at { Time.current }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
trait :selected do
|
||||||
|
selected { true }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user