+
+
+
diff --git a/app/views/shared/_tags.html.erb b/app/views/shared/_tags.html.erb
index 206b29759..9bb7537cf 100644
--- a/app/views/shared/_tags.html.erb
+++ b/app/views/shared/_tags.html.erb
@@ -4,7 +4,7 @@
<% if taggable.tags.any? %>
<% taggable.tag_list_with_limit(limit).each do |tag| %>
- <%= link_to sanitize(tag.name), send("#{taggable.class.to_s.downcase}_path", tag: tag.name) %>
+ <%= link_to sanitize(tag.name), send("#{taggable.class.to_s.downcase.pluralize}_path", tag: tag.name) %>
<% end %>
<% if taggable.tags_count_out_of_limit(limit) > 0 %>
diff --git a/spec/models/ability_spec.rb b/spec/models/ability_spec.rb
index f106ef14e..b9379d90a 100644
--- a/spec/models/ability_spec.rb
+++ b/spec/models/ability_spec.rb
@@ -3,8 +3,17 @@ require 'cancan/matchers'
describe Ability do
subject(:ability) { Ability.new(user) }
- let(:debate) { Debate.new }
+ let(:debate) { create(:debate) }
let(:comment) { create(:comment) }
+ let(:proposal) { create(:proposal) }
+
+ let(:own_debate) { create(:debate, author: user) }
+ let(:own_comment) { create(:comment, author: user) }
+ let(:own_proposal) { create(:proposal, author: user) }
+
+ let(:hidden_debate) { create(:debate, :hidden) }
+ let(:hidden_comment) { create(:comment, :hidden) }
+ let(:hidden_proposal) { create(:proposal, :hidden) }
describe "Non-logged in user" do
let(:user) { nil }
@@ -13,6 +22,15 @@ describe Ability do
it { should be_able_to(:show, debate) }
it { should_not be_able_to(:edit, Debate) }
it { should_not be_able_to(:vote, Debate) }
+ it { should_not be_able_to(:flag, Debate) }
+ it { should_not be_able_to(:unflag, Debate) }
+
+ it { should be_able_to(:index, Proposal) }
+ it { should be_able_to(:show, proposal) }
+ it { should_not be_able_to(:edit, Proposal) }
+ it { should_not be_able_to(:vote, Proposal) }
+ it { should_not be_able_to(:flag, Proposal) }
+ it { should_not be_able_to(:unflag, Proposal) }
end
describe "Citizen" do
@@ -28,8 +46,14 @@ describe Ability do
it { should be_able_to(:create, Comment) }
it { should be_able_to(:vote, Comment) }
+ it { should be_able_to(:index, Proposal) }
+ it { should be_able_to(:show, proposal) }
+ it { should_not be_able_to(:vote, Proposal) }
+
it { should_not be_able_to(:comment_as_administrator, debate) }
it { should_not be_able_to(:comment_as_moderator, debate) }
+ it { should_not be_able_to(:comment_as_administrator, proposal) }
+ it { should_not be_able_to(:comment_as_moderator, proposal) }
describe 'flagging content' do
it { should be_able_to(:flag, debate) }
@@ -38,18 +62,18 @@ describe Ability do
it { should be_able_to(:flag, comment) }
it { should be_able_to(:unflag, comment) }
- describe "own comments" do
- let(:own_comment) { create(:comment, author: user) }
+ it { should be_able_to(:flag, proposal) }
+ it { should be_able_to(:unflag, proposal) }
+ describe "own content" do
it { should_not be_able_to(:flag, own_comment) }
it { should_not be_able_to(:unflag, own_comment) }
- end
-
- describe "own debates" do
- let(:own_debate) { create(:debate, author: user) }
it { should_not be_able_to(:flag, own_debate) }
it { should_not be_able_to(:unflag, own_debate) }
+
+ it { should_not be_able_to(:flag, own_proposal) }
+ it { should_not be_able_to(:unflag, own_proposal) }
end
end
@@ -60,15 +84,28 @@ describe Ability do
end
describe "editing debates" do
- let(:own_debate) { create(:debate, author: user) }
let(:own_debate_non_editable) { create(:debate, author: user) }
-
before { allow(own_debate_non_editable).to receive(:editable?).and_return(false) }
it { should be_able_to(:edit, own_debate) }
it { should_not be_able_to(:edit, debate) } # Not his
it { should_not be_able_to(:edit, own_debate_non_editable) }
end
+
+ describe "editing proposals" do
+ let(:own_proposal_non_editable) { create(:proposal, author: user) }
+ before { allow(own_proposal_non_editable).to receive(:editable?).and_return(false) }
+
+ it { should be_able_to(:edit, own_proposal) }
+ it { should_not be_able_to(:edit, proposal) } # Not his
+ it { should_not be_able_to(:edit, own_proposal_non_editable) }
+ end
+
+ describe "when level 2 verified" do
+ before{ user.update(residence_verified_at: Time.now, confirmed_phone: "1") }
+
+ it { should be_able_to(:vote, Proposal) }
+ end
end
describe "Organization" do
@@ -82,6 +119,10 @@ describe Ability do
it { should be_able_to(:show, debate) }
it { should_not be_able_to(:vote, debate) }
+ it { should be_able_to(:index, Proposal) }
+ it { should be_able_to(:show, proposal) }
+ it { should_not be_able_to(:vote, Proposal) }
+
it { should be_able_to(:create, Comment) }
it { should_not be_able_to(:vote, Comment) }
end
@@ -96,6 +137,9 @@ describe Ability do
it { should be_able_to(:show, debate) }
it { should be_able_to(:vote, debate) }
+ it { should be_able_to(:index, Proposal) }
+ it { should be_able_to(:show, proposal) }
+
it { should be_able_to(:read, Organization) }
describe "organizations" do
@@ -114,12 +158,9 @@ describe Ability do
end
describe "hiding, reviewing and restoring" do
- let(:own_comment) { create(:comment, author: user) }
- let(:own_debate) { create(:debate, author: user) }
- let(:hidden_comment) { create(:comment, :hidden) }
- let(:hidden_debate) { create(:debate, :hidden) }
let(:ignored_comment) { create(:comment, :with_ignored_flag) }
let(:ignored_debate) { create(:debate, :with_ignored_flag) }
+ let(:ignored_proposal) { create(:proposal,:with_ignored_flag) }
it { should be_able_to(:hide, comment) }
it { should be_able_to(:hide_in_moderation_screen, comment) }
@@ -131,6 +172,11 @@ describe Ability do
it { should_not be_able_to(:hide, hidden_debate) }
it { should_not be_able_to(:hide, own_debate) }
+ it { should be_able_to(:hide, proposal) }
+ it { should be_able_to(:hide_in_moderation_screen, proposal) }
+ it { should_not be_able_to(:hide, hidden_proposal) }
+ it { should_not be_able_to(:hide, own_proposal) }
+
it { should be_able_to(:ignore_flag, comment) }
it { should_not be_able_to(:ignore_flag, hidden_comment) }
it { should_not be_able_to(:ignore_flag, ignored_comment) }
@@ -141,15 +187,23 @@ describe Ability do
it { should_not be_able_to(:ignore_flag, ignored_debate) }
it { should_not be_able_to(:ignore_flag, own_debate) }
+ it { should be_able_to(:ignore_flag, proposal) }
+ it { should_not be_able_to(:ignore_flag, hidden_proposal) }
+ it { should_not be_able_to(:ignore_flag, ignored_proposal) }
+ it { should_not be_able_to(:ignore_flag, own_proposal) }
+
it { should_not be_able_to(:hide, user) }
it { should be_able_to(:hide, other_user) }
it { should_not be_able_to(:restore, comment) }
it { should_not be_able_to(:restore, debate) }
+ it { should_not be_able_to(:restore, proposal) }
it { should_not be_able_to(:restore, other_user) }
it { should be_able_to(:comment_as_moderator, debate) }
+ it { should be_able_to(:comment_as_moderator, proposal) }
it { should_not be_able_to(:comment_as_administrator, debate) }
+ it { should_not be_able_to(:comment_as_administrator, proposal) }
end
end
@@ -160,32 +214,37 @@ describe Ability do
let(:other_user) { create(:user) }
let(:hidden_user) { create(:user, :hidden) }
- let(:hidden_debate) { create(:debate, :hidden) }
- let(:hidden_comment) { create(:comment, :hidden) }
- let(:own_debate) { create(:debate, author: user)}
- let(:own_comment) { create(:comment, author: user)}
-
it { should be_able_to(:index, Debate) }
it { should be_able_to(:show, debate) }
it { should be_able_to(:vote, debate) }
+ it { should be_able_to(:index, Proposal) }
+ it { should be_able_to(:show, proposal) }
+
it { should_not be_able_to(:restore, comment) }
it { should_not be_able_to(:restore, debate) }
+ it { should_not be_able_to(:restore, proposal) }
it { should_not be_able_to(:restore, other_user) }
it { should be_able_to(:restore, hidden_comment) }
it { should be_able_to(:restore, hidden_debate) }
+ it { should be_able_to(:restore, hidden_proposal) }
it { should be_able_to(:restore, hidden_user) }
it { should_not be_able_to(:confirm_hide, comment) }
it { should_not be_able_to(:confirm_hide, debate) }
+ it { should_not be_able_to(:confirm_hide, proposal) }
it { should_not be_able_to(:confirm_hide, other_user) }
it { should be_able_to(:confirm_hide, hidden_comment) }
it { should be_able_to(:confirm_hide, hidden_debate) }
+ it { should be_able_to(:confirm_hide, hidden_proposal) }
it { should be_able_to(:confirm_hide, hidden_user) }
it { should be_able_to(:comment_as_administrator, debate) }
it { should_not be_able_to(:comment_as_moderator, debate) }
+
+ it { should be_able_to(:comment_as_administrator, proposal) }
+ it { should_not be_able_to(:comment_as_moderator, proposal) }
end
end
+
+
+ <% if @search_terms %>
+
+ <% if @tag_filter || @search_terms %>
+ + <%= page_entries_info @proposals %> + <%= t("proposals.index.search_results", count: @proposals.size, search_term: @search_terms) %> +
+ <% elsif @tag_filter %> ++ <%= page_entries_info @proposals %> + <%= t("proposals.index.filter_topic", count: @proposals.size, topic: @tag_filter) %> +
+ <% end %> +
+
+ + <%= t("proposals.index.select_order") %> +
+ <% else %> +
+
+ + <%= t("proposals.index.select_order_long") %> +
+ <% end %> + +
+ <%= link_to t("proposals.index.start_proposal"), new_proposal_path, class: 'button radius expand' %>
+
+ <%= render @proposals %>
+ <%= paginate @proposals %>
+
+
+
+