Move comments form to component
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
<% cache [locale_and_user_status, parent_id, commentable_cache_key(commentable), valuation] do %>
|
||||
<% cache cache_key do %>
|
||||
<% if comments_closed_for_commentable?(commentable) %>
|
||||
<br>
|
||||
<div data-alert class="callout primary">
|
||||
<%= comments_closed_text(commentable) %>
|
||||
<%= comments_closed_text %>
|
||||
</div>
|
||||
<% elsif require_verified_resident_for_commentable?(commentable, current_user) %>
|
||||
<br>
|
||||
32
app/components/comments/form_component.rb
Normal file
32
app/components/comments/form_component.rb
Normal file
@@ -0,0 +1,32 @@
|
||||
class Comments::FormComponent < ApplicationComponent
|
||||
attr_reader :commentable, :parent_id, :valuation
|
||||
use_helpers :current_user, :locale_and_user_status, :commentable_cache_key,
|
||||
:comments_closed_for_commentable?, :require_verified_resident_for_commentable?,
|
||||
:link_to_verify_account, :parent_or_commentable_dom_id, :leave_comment_text, :can?,
|
||||
:comment_button_text
|
||||
|
||||
def initialize(commentable, parent_id: nil, valuation: false)
|
||||
@commentable = commentable
|
||||
@parent_id = parent_id
|
||||
@valuation = valuation
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def cache_key
|
||||
[
|
||||
locale_and_user_status,
|
||||
parent_id,
|
||||
commentable_cache_key(commentable),
|
||||
valuation
|
||||
]
|
||||
end
|
||||
|
||||
def comments_closed_text
|
||||
if commentable.class == Legislation::Question
|
||||
t("legislation.questions.comments.comments_closed")
|
||||
else
|
||||
t("comments.comments_closed")
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
<% cache cache_key do %>
|
||||
<% if current_user %>
|
||||
<%= render "comments/form", { commentable: record, parent_id: nil, valuation: valuation } %>
|
||||
<%= render Comments::FormComponent.new(record, valuation: valuation) %>
|
||||
<% else %>
|
||||
<%= render "shared/login_to_comment" %>
|
||||
<% end %>
|
||||
|
||||
@@ -74,12 +74,4 @@ module CommentsHelper
|
||||
def comments_closed_for_commentable?(commentable)
|
||||
commentable.respond_to?(:comments_closed?) && commentable.comments_closed?
|
||||
end
|
||||
|
||||
def comments_closed_text(commentable)
|
||||
if commentable.class == Legislation::Question
|
||||
t("legislation.questions.comments.comments_closed")
|
||||
else
|
||||
t("comments.comments_closed")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -99,9 +99,9 @@
|
||||
<% end %>
|
||||
|
||||
<% if !valuation || can?(:comment_valuation, comment.commentable) %>
|
||||
<%= render "comments/form", { commentable: comment.commentable,
|
||||
parent_id: comment.id,
|
||||
valuation: valuation } %>
|
||||
<%= render Comments::FormComponent.new(comment.commentable,
|
||||
parent_id: comment.id,
|
||||
valuation: valuation) %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
44
spec/components/comments/form_component_spec.rb
Normal file
44
spec/components/comments/form_component_spec.rb
Normal file
@@ -0,0 +1,44 @@
|
||||
require "rails_helper"
|
||||
|
||||
describe Comments::FormComponent do
|
||||
context "Legislation annotation" do
|
||||
it "disables comments when the allegations phase is closed" do
|
||||
process = create(:legislation_process,
|
||||
allegations_start_date: 1.month.ago,
|
||||
allegations_end_date: Date.yesterday)
|
||||
|
||||
version = create(:legislation_draft_version, process: process)
|
||||
annotation = create(:legislation_annotation, draft_version: version, text: "One annotation")
|
||||
|
||||
render_inline Comments::FormComponent.new(annotation)
|
||||
|
||||
expect(page).to have_content "Comments are closed"
|
||||
expect(page).not_to have_content "Leave your comment"
|
||||
expect(page).not_to have_button "Publish comment"
|
||||
end
|
||||
end
|
||||
|
||||
context "Legislation question" do
|
||||
let(:process) { create(:legislation_process, :in_debate_phase) }
|
||||
let(:question) { create(:legislation_question, process: process) }
|
||||
|
||||
it "prevents unverified users from creating comments" do
|
||||
unverified_user = create(:user)
|
||||
sign_in unverified_user
|
||||
|
||||
render_inline Comments::FormComponent.new(question)
|
||||
|
||||
expect(page).to have_content "To participate verify your account"
|
||||
end
|
||||
|
||||
it "blocks comment creation when the debate phase is not open" do
|
||||
user = create(:user, :level_two)
|
||||
process.update!(debate_start_date: Date.current - 2.days, debate_end_date: Date.current - 1.day)
|
||||
sign_in(user)
|
||||
|
||||
render_inline Comments::FormComponent.new(question)
|
||||
|
||||
expect(page).to have_content "Closed phase"
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -236,25 +236,6 @@ describe "Commenting legislation questions" do
|
||||
expect(page).to have_content "Can't be blank"
|
||||
end
|
||||
|
||||
scenario "Comments are disabled when the allegations phase is closed" do
|
||||
process = create(:legislation_process,
|
||||
allegations_start_date: 1.month.ago,
|
||||
allegations_end_date: Date.yesterday)
|
||||
|
||||
version = create(:legislation_draft_version, process: process)
|
||||
annotation = create(:legislation_annotation, draft_version: version, text: "One annotation")
|
||||
|
||||
login_as(user)
|
||||
|
||||
visit polymorphic_path(annotation)
|
||||
|
||||
within "#comments" do
|
||||
expect(page).to have_content "Comments are closed"
|
||||
expect(page).not_to have_content "Leave your comment"
|
||||
expect(page).not_to have_button "Publish comment"
|
||||
end
|
||||
end
|
||||
|
||||
scenario "Reply" do
|
||||
citizen = create(:user, username: "Ana")
|
||||
manuela = create(:user, username: "Manuela")
|
||||
|
||||
@@ -231,24 +231,6 @@ describe "Commenting legislation questions" do
|
||||
expect(page).to have_content "Can't be blank"
|
||||
end
|
||||
|
||||
scenario "Unverified user can't create comments" do
|
||||
unverified_user = create(:user)
|
||||
login_as(unverified_user)
|
||||
|
||||
visit legislation_process_question_path(question.process, question)
|
||||
|
||||
expect(page).to have_content "To participate verify your account"
|
||||
end
|
||||
|
||||
scenario "Can't create comments if debate phase is not open" do
|
||||
process.update!(debate_start_date: Date.current - 2.days, debate_end_date: Date.current - 1.day)
|
||||
login_as(user)
|
||||
|
||||
visit legislation_process_question_path(question.process, question)
|
||||
|
||||
expect(page).to have_content "Closed phase"
|
||||
end
|
||||
|
||||
scenario "Reply" do
|
||||
citizen = create(:user, username: "Ana")
|
||||
manuela = create(:user, :level_two, username: "Manuela")
|
||||
|
||||
Reference in New Issue
Block a user