Check if debate phase is open to create answers
This commit is contained in:
@@ -9,13 +9,20 @@ class Legislation::AnswersController < Legislation::BaseController
|
|||||||
respond_to :html, :js
|
respond_to :html, :js
|
||||||
|
|
||||||
def create
|
def create
|
||||||
|
if @process.open_phase?(:debate)
|
||||||
@answer.user = current_user
|
@answer.user = current_user
|
||||||
@answer.save
|
@answer.save
|
||||||
|
track_event
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.js {}
|
format.js
|
||||||
format.html { redirect_to legislation_process_question_path(@process, @question) }
|
format.html { redirect_to legislation_process_question_path(@process, @question) }
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
respond_to do |format|
|
||||||
|
format.js
|
||||||
|
format.html { redirect_to legislation_process_question_path(@process, @question), alert: t('legislation.questions.participation.phase_not_open') }
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
@@ -24,4 +31,11 @@ class Legislation::AnswersController < Legislation::BaseController
|
|||||||
:legislation_question_option_id,
|
:legislation_question_option_id,
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def track_event
|
||||||
|
ahoy.track "legislation_answer_created".to_sym,
|
||||||
|
"legislation_answer_id": @answer.id,
|
||||||
|
"legislation_question_option_id": @answer.legislation_question_option_id,
|
||||||
|
"legislation_question_id": @answer.legislation_question_id
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,12 +1,28 @@
|
|||||||
<% if question.question_options.any? %>
|
<% if question.question_options.any? %>
|
||||||
<%= form_for answer, url: legislation_process_question_answers_path(process, question, answer), remote: true , html: { class: "controls-stacked participation-allowed"} do |f| %>
|
<% if process.open_phase?(:debate) && !answer.persisted? %>
|
||||||
|
|
||||||
|
<%= form_for answer, url: legislation_process_question_answers_path(process, question, answer), remote: true , html: { class: "controls-stacked"} do |f| %>
|
||||||
<% question.question_options.each do |question_option| %>
|
<% question.question_options.each do |question_option| %>
|
||||||
<label class="control radio <%= 'active' if @answer.legislation_question_option_id == question_option.id %>">
|
<label class="control radio <%= 'active' if @answer.legislation_question_option_id == question_option.id %>">
|
||||||
<%= f.radio_button :legislation_question_option_id, question_option.id, label: false, disabled: answer.persisted? %>
|
<%= f.radio_button :legislation_question_option_id, question_option.id, label: false %>
|
||||||
<span class="control-indicator"></span>
|
<span class="control-indicator"></span>
|
||||||
<%= question_option.value %>
|
<%= question_option.value %>
|
||||||
</label>
|
</label>
|
||||||
<% end %>
|
<% end %>
|
||||||
<%= f.submit t('legislation.questions.show.answer_question'), class: "button" unless answer.persisted? %>
|
<%= f.submit t('legislation.questions.show.answer_question'), class: "button" %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<% else %>
|
||||||
|
|
||||||
|
<form class="controls-stacked disabled">
|
||||||
|
<% question.question_options.each do |question_option| %>
|
||||||
|
<label class="control radio <%= 'active' if answer.persisted? && (answer.legislation_question_option_id == question_option.id) %>">
|
||||||
|
<input id="quiz-1" name="radio" type="radio" disabled="true">
|
||||||
|
<span class="control-indicator"></span>
|
||||||
|
<%= question_option.value %>
|
||||||
|
</label>
|
||||||
|
<% end %>
|
||||||
|
</form>
|
||||||
|
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
@@ -279,6 +279,7 @@ en:
|
|||||||
share_gplus: Share on Google+
|
share_gplus: Share on Google+
|
||||||
title: Collaborative legislation process
|
title: Collaborative legislation process
|
||||||
participation:
|
participation:
|
||||||
|
phase_not_open: This phase is not open
|
||||||
organizations: Organisations are not permitted to participate in the debate
|
organizations: Organisations are not permitted to participate in the debate
|
||||||
signin: Sign in
|
signin: Sign in
|
||||||
signup: Sign up
|
signup: Sign up
|
||||||
|
|||||||
@@ -279,6 +279,7 @@ es:
|
|||||||
share_gplus: Compartir en Google+
|
share_gplus: Compartir en Google+
|
||||||
title: Proceso de legislación colaborativa
|
title: Proceso de legislación colaborativa
|
||||||
participation:
|
participation:
|
||||||
|
phase_not_open: Esta fase no está abierta
|
||||||
organizations: Las organizaciones no pueden participar en el debate
|
organizations: Las organizaciones no pueden participar en el debate
|
||||||
signin: iniciar sesión
|
signin: iniciar sesión
|
||||||
signup: registrarte
|
signup: registrarte
|
||||||
|
|||||||
43
spec/controllers/legislation/answers_controller_spec.rb
Normal file
43
spec/controllers/legislation/answers_controller_spec.rb
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
describe Legislation::AnswersController do
|
||||||
|
|
||||||
|
describe 'POST create' do
|
||||||
|
before(:each) do
|
||||||
|
InvisibleCaptcha.timestamp_enabled = false
|
||||||
|
@process = create(:legislation_process, debate_start_date: Date.current - 3.day, debate_end_date: Date.current + 2.days)
|
||||||
|
@question = create(:legislation_question, process: @process, title: "Question 1")
|
||||||
|
@question_option = create(:legislation_question_option, question: @question, value: "Yes")
|
||||||
|
@user = create(:user, :level_two)
|
||||||
|
end
|
||||||
|
|
||||||
|
after(:each) do
|
||||||
|
InvisibleCaptcha.timestamp_enabled = true
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should create an ahoy event' do
|
||||||
|
sign_in @user
|
||||||
|
|
||||||
|
post :create, process_id: @process.id, question_id: @question.id, legislation_answer: { legislation_question_option_id: @question_option.id }
|
||||||
|
expect(Ahoy::Event.where(name: :legislation_answer_created).count).to eq 1
|
||||||
|
expect(Ahoy::Event.last.properties['legislation_answer_id']).to eq Legislation::Answer.last.id
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should create an answer if the process debate phase is open' do
|
||||||
|
sign_in @user
|
||||||
|
|
||||||
|
expect do
|
||||||
|
xhr :post, :create, process_id: @process.id, question_id: @question.id, legislation_answer: { legislation_question_option_id: @question_option.id }
|
||||||
|
end.to change { @question.reload.answers_count }.by(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should not create an answer if the process debate phase is not open' do
|
||||||
|
sign_in @user
|
||||||
|
@process.update_attribute(:debate_end_date, Date.current - 1.day)
|
||||||
|
|
||||||
|
expect do
|
||||||
|
xhr :post, :create, process_id: @process.id, question_id: @question.id, legislation_answer: { legislation_question_option_id: @question_option.id }
|
||||||
|
end.to_not change { @question.reload.answers_count }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -3,7 +3,7 @@ require 'rails_helper'
|
|||||||
feature 'Legislation' do
|
feature 'Legislation' do
|
||||||
context 'process debate page' do
|
context 'process debate page' do
|
||||||
before(:each) do
|
before(:each) do
|
||||||
@process = create(:legislation_process, debate_start_date: Date.current - 1.day, debate_end_date: Date.current + 2.days)
|
@process = create(:legislation_process, debate_start_date: Date.current - 3.day, debate_end_date: Date.current + 2.days)
|
||||||
create(:legislation_question, process: @process, title: "Question 1")
|
create(:legislation_question, process: @process, title: "Question 1")
|
||||||
create(:legislation_question, process: @process, title: "Question 2")
|
create(:legislation_question, process: @process, title: "Question 2")
|
||||||
create(:legislation_question, process: @process, title: "Question 3")
|
create(:legislation_question, process: @process, title: "Question 3")
|
||||||
@@ -69,9 +69,9 @@ feature 'Legislation' do
|
|||||||
|
|
||||||
visit legislation_process_question_path(@process, question)
|
visit legislation_process_question_path(@process, question)
|
||||||
|
|
||||||
expect(page).to have_content("Yes")
|
expect(page).to have_selector(:radio_button, "Yes")
|
||||||
expect(page).to have_content("No")
|
expect(page).to have_selector(:radio_button, "No")
|
||||||
expect(page).to have_content("I don't know")
|
expect(page).to have_selector(:radio_button, "I don't know")
|
||||||
expect(page).to have_selector(:link_or_button, "Submit answer")
|
expect(page).to have_selector(:link_or_button, "Submit answer")
|
||||||
|
|
||||||
choose("I don't know")
|
choose("I don't know")
|
||||||
@@ -87,5 +87,24 @@ feature 'Legislation' do
|
|||||||
expect(question.reload.answers_count).to eq(1)
|
expect(question.reload.answers_count).to eq(1)
|
||||||
expect(option.reload.answers_count).to eq(1)
|
expect(option.reload.answers_count).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario 'cannot answer question when phase not open' do
|
||||||
|
@process.update_attribute(:debate_end_date, Date.current - 1.day)
|
||||||
|
question = @process.questions.first
|
||||||
|
create(:legislation_question_option, question: question, value: "Yes")
|
||||||
|
create(:legislation_question_option, question: question, value: "No")
|
||||||
|
create(:legislation_question_option, question: question, value: "I don't know")
|
||||||
|
user = create(:user, :level_two)
|
||||||
|
|
||||||
|
login_as(user)
|
||||||
|
|
||||||
|
visit legislation_process_question_path(@process, question)
|
||||||
|
|
||||||
|
expect(page).to have_selector(:radio_button, "Yes", disabled: true)
|
||||||
|
expect(page).to have_selector(:radio_button, "No", disabled: true)
|
||||||
|
expect(page).to have_selector(:radio_button, "I don't know", disabled: true)
|
||||||
|
|
||||||
|
expect(page).to_not have_selector(:link_or_button, "Submit answer")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user