@@ -2043,36 +2043,6 @@ table {
|
|||||||
|
|
||||||
.activity {
|
.activity {
|
||||||
|
|
||||||
.accordion li {
|
|
||||||
margin-bottom: $line-height / 2;
|
|
||||||
|
|
||||||
.accordion-title {
|
|
||||||
border-bottom: 1px solid $border;
|
|
||||||
background: #f8f9fb;
|
|
||||||
font-size: $small-font-size;
|
|
||||||
padding: $line-height / 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.accordion-content {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.accordion .title {
|
|
||||||
display: block;
|
|
||||||
line-height: $line-height;
|
|
||||||
}
|
|
||||||
|
|
||||||
.accordion .icon {
|
|
||||||
font-size: rem-calc(20);
|
|
||||||
float: left;
|
|
||||||
margin-right: $line-height / 3;
|
|
||||||
|
|
||||||
&.icon-debates {
|
|
||||||
margin-top: rem-calc(3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.retired {
|
.retired {
|
||||||
text-decoration: line-through;
|
text-decoration: line-through;
|
||||||
}
|
}
|
||||||
@@ -2082,6 +2052,45 @@ table {
|
|||||||
|
|
||||||
li {
|
li {
|
||||||
margin-right: $line-height / 4;
|
margin-right: $line-height / 4;
|
||||||
|
|
||||||
|
span {
|
||||||
|
background: none;
|
||||||
|
border: 1px solid #ececec;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.following {
|
||||||
|
|
||||||
|
.follow-list {
|
||||||
|
list-style-type: circle;
|
||||||
|
padding: $line-height / 2;
|
||||||
|
|
||||||
|
li {
|
||||||
|
margin-bottom: $line-height / 2;
|
||||||
|
margin-left: $line-height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: rem-calc(24);
|
||||||
|
margin-top: $line-height;
|
||||||
|
padding-left: rem-calc(30);
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
span {
|
||||||
|
left: 0;
|
||||||
|
position: absolute;
|
||||||
|
top: 2px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.interests {
|
||||||
|
|
||||||
|
@include breakpoint(medium) {
|
||||||
|
border-left: 1px solid #ececec;
|
||||||
|
padding-left: $line-height;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -657,29 +657,6 @@
|
|||||||
.budget-investments-list .budget-investment,
|
.budget-investments-list .budget-investment,
|
||||||
.proposals-list .proposal {
|
.proposals-list .proposal {
|
||||||
|
|
||||||
.no-image {
|
|
||||||
background: $brand;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.budget-investments-list .budget-investment,
|
|
||||||
.proposals-list .proposal {
|
|
||||||
|
|
||||||
@include breakpoint(small) {
|
|
||||||
|
|
||||||
.no-image {
|
|
||||||
width: 100%;
|
|
||||||
max-width: rem-calc(300);
|
|
||||||
margin: 0 auto;
|
|
||||||
|
|
||||||
&::before {
|
|
||||||
content: '';
|
|
||||||
display: block;
|
|
||||||
padding-top: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@include breakpoint(medium) {
|
@include breakpoint(medium) {
|
||||||
|
|
||||||
.panel {
|
.panel {
|
||||||
@@ -687,12 +664,6 @@
|
|||||||
&.with-image {
|
&.with-image {
|
||||||
padding: 0 $line-height / 2 0 0;
|
padding: 0 $line-height / 2 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.no-image {
|
|
||||||
height: 100%;
|
|
||||||
min-height: rem-calc(245);
|
|
||||||
width: rem-calc(140);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.column:first-child {
|
.column:first-child {
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ module FollowablesHelper
|
|||||||
|
|
||||||
def render_follow(follow)
|
def render_follow(follow)
|
||||||
followable = follow.followable
|
followable = follow.followable
|
||||||
partial = followable_class_name(followable)
|
partial = followable_class_name(followable) + "_follow"
|
||||||
locals = {followable_class_name(followable).to_sym => followable}
|
locals = {followable_class_name(followable).to_sym => followable}
|
||||||
|
|
||||||
render partial, locals
|
render partial, locals
|
||||||
|
|||||||
@@ -64,12 +64,4 @@ module UsersHelper
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def empty_interests_message_text(user)
|
|
||||||
if current_user == user
|
|
||||||
t('account.show.public_interests_my_empty_list')
|
|
||||||
else
|
|
||||||
t('account.show.public_interests_user_empty_list')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -21,9 +21,11 @@
|
|||||||
<%= f.text_field :external_url %>
|
<%= f.text_field :external_url %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="images small-12 column">
|
<% if feature?(:allow_images) %>
|
||||||
<%= render 'images/nested_image', imageable: @investment, f: f %>
|
<div class="images small-12 column">
|
||||||
</div>
|
<%= render 'images/nested_image', imageable: @investment, f: f %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
<div class="documents small-12 column">
|
<div class="documents small-12 column">
|
||||||
<%= render 'documents/nested_documents', documentable: @investment, f: f %>
|
<%= render 'documents/nested_documents', documentable: @investment, f: f %>
|
||||||
|
|||||||
@@ -1,18 +1,20 @@
|
|||||||
<div id="<%= dom_id(investment) %>" class="budget-investment clear">
|
<div id="<%= dom_id(investment) %>" class="budget-investment clear">
|
||||||
<div class="panel with-image">
|
<div class="panel <%= ('with-image' if feature?(:allow_images) && investment.image.present?) %>">
|
||||||
|
|
||||||
|
<% if feature?(:allow_images) && investment.image.present? %>
|
||||||
<div class="row" data-equalizer>
|
<div class="row" data-equalizer>
|
||||||
|
|
||||||
<div class="small-12 medium-3 large-2 column text-center">
|
<div class="small-12 medium-3 large-2 column text-center">
|
||||||
<div data-equalizer-watch>
|
<div data-equalizer-watch>
|
||||||
<% if investment.image.present? %>
|
<%= image_tag investment.image_url(:thumb), alt: investment.image.title %>
|
||||||
<%= image_tag investment.image_url(:thumb), alt: investment.image.title %>
|
|
||||||
<% else %>
|
|
||||||
<div class="no-image"></div>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="small-12 medium-6 large-7 column">
|
<div class="small-12 medium-6 large-7 column">
|
||||||
|
<% else %>
|
||||||
|
<div class="row">
|
||||||
|
<div class="small-12 medium-9 column">
|
||||||
|
<% end %>
|
||||||
<div class="budget-investment-content">
|
<div class="budget-investment-content">
|
||||||
|
|
||||||
<% cache [locale_and_user_status(investment), 'index', investment, investment.author] do %>
|
<% cache [locale_and_user_status(investment), 'index', investment, investment.author] do %>
|
||||||
@@ -55,7 +57,8 @@
|
|||||||
|
|
||||||
<% if investment.should_show_votes? %>
|
<% if investment.should_show_votes? %>
|
||||||
<div id="<%= dom_id(investment) %>_votes"
|
<div id="<%= dom_id(investment) %>_votes"
|
||||||
class="small-12 medium-3 column text-center" data-equalizer-watch>
|
class="small-12 medium-3 column text-center"
|
||||||
|
<%= 'data-equalizer-watch' if feature?(:allow_images) && investment.image.present? %>>
|
||||||
<%= render partial: '/budgets/investments/votes', locals: {
|
<%= render partial: '/budgets/investments/votes', locals: {
|
||||||
investment: investment,
|
investment: investment,
|
||||||
investment_votes: investment_votes,
|
investment_votes: investment_votes,
|
||||||
@@ -64,7 +67,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<% elsif investment.should_show_vote_count? %>
|
<% elsif investment.should_show_vote_count? %>
|
||||||
<div id="<%= dom_id(investment) %>_votes"
|
<div id="<%= dom_id(investment) %>_votes"
|
||||||
class="small-12 medium-3 column text-center" data-equalizer-watch>
|
class="small-12 medium-3 column text-center"
|
||||||
|
<%= 'data-equalizer-watch' if feature?(:allow_images) && investment.image.present? %>>
|
||||||
<div class="supports js-participation">
|
<div class="supports js-participation">
|
||||||
<span class="total-supports no-button">
|
<span class="total-supports no-button">
|
||||||
<%= t("budgets.investments.investment.supports",
|
<%= t("budgets.investments.investment.supports",
|
||||||
@@ -74,7 +78,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<% elsif investment.should_show_ballots? %>
|
<% elsif investment.should_show_ballots? %>
|
||||||
<div id="<%= dom_id(investment) %>_ballot"
|
<div id="<%= dom_id(investment) %>_ballot"
|
||||||
class="small-12 medium-3 column text-center" data-equalizer-watch>
|
class="small-12 medium-3 column text-center"
|
||||||
|
<%= 'data-equalizer-watch' if feature?(:allow_images) && investment.image.present? %>>
|
||||||
<%= render partial: '/budgets/investments/ballot', locals: {
|
<%= render partial: '/budgets/investments/ballot', locals: {
|
||||||
investment: investment,
|
investment: investment,
|
||||||
investment_ids: investment_ids,
|
investment_ids: investment_ids,
|
||||||
@@ -83,13 +88,14 @@
|
|||||||
</div>
|
</div>
|
||||||
<% elsif investment.should_show_price? %>
|
<% elsif investment.should_show_price? %>
|
||||||
<div id="<%= dom_id(investment) %>_price"
|
<div id="<%= dom_id(investment) %>_price"
|
||||||
class="supports small-12 medium-3 column text-center" data-equalizer-watch>
|
class="supports small-12 medium-3 column text-center"
|
||||||
|
<%= 'data-equalizer-watch' if feature?(:allow_images) && investment.image.present? %>>
|
||||||
<p class="investment-project-amount margin-top">
|
<p class="investment-project-amount margin-top">
|
||||||
<%= investment.formatted_price %>
|
<%= investment.formatted_price %>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<% else %>
|
<% else %>
|
||||||
<div data-equalizer-watch></div>
|
<div <%= 'data-equalizer-watch' if feature?(:allow_images) && investment.image.present? %>></div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
@@ -46,7 +46,9 @@
|
|||||||
<%= safe_html_with_links investment.description.html_safe %>
|
<%= safe_html_with_links investment.description.html_safe %>
|
||||||
|
|
||||||
<% if feature?(:map) && map_location_available?(@investment.map_location) %>
|
<% if feature?(:map) && map_location_available?(@investment.map_location) %>
|
||||||
<%= render_map(@investment.map_location, "budget_investment", false, nil) %>
|
<div class="margin">
|
||||||
|
<%= render_map(@investment.map_location, "budget_investment", false, nil) %>
|
||||||
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% if investment.external_url.present? %>
|
<% if investment.external_url.present? %>
|
||||||
@@ -129,6 +131,9 @@
|
|||||||
} %>
|
} %>
|
||||||
|
|
||||||
<% if current_user %>
|
<% if current_user %>
|
||||||
|
<div class="sidebar-divider"></div>
|
||||||
|
<p class="sidebar-title"><%= t("shared.follow") %></p>
|
||||||
|
|
||||||
<%= render 'follows/follow_button', follow: find_or_build_follow(current_user, investment) %>
|
<%= render 'follows/follow_button', follow: find_or_build_follow(current_user, investment) %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
|||||||
@@ -1,24 +1,19 @@
|
|||||||
<span class="js-follow">
|
<div class="js-follow">
|
||||||
<span class="followable-content">
|
<span class="followable-content">
|
||||||
|
|
||||||
<% if follow.followable.followed_by?(current_user) %>
|
<% if follow.followable.followed_by?(current_user) %>
|
||||||
|
<%= link_to t('shared.following'),
|
||||||
<%= link_to t('shared.unfollow'),
|
|
||||||
follow_path(follow),
|
follow_path(follow),
|
||||||
method: :delete, remote: true,
|
method: :delete, remote: true,
|
||||||
title: unfollow_text(follow.followable),
|
title: unfollow_text(follow.followable),
|
||||||
class: 'button hollow' %>
|
class: 'button expanded' %>
|
||||||
|
|
||||||
<% else %>
|
<% else %>
|
||||||
|
<%= link_to follow_text(follow.followable),
|
||||||
<%= link_to t('shared.follow'),
|
|
||||||
follows_path(followable_id: follow.followable.id,
|
follows_path(followable_id: follow.followable.id,
|
||||||
followable_type: follow.followable.class.name),
|
followable_type: follow.followable.class.name),
|
||||||
method: :post, remote: true,
|
method: :post, remote: true,
|
||||||
title: follow_text(follow.followable),
|
title: follow_text(follow.followable),
|
||||||
class: 'button hollow' %>
|
class: 'button hollow expanded' %>
|
||||||
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</div>
|
||||||
|
|||||||
@@ -10,8 +10,6 @@
|
|||||||
<div class="image-container" data-equalizer-watch>
|
<div class="image-container" data-equalizer-watch>
|
||||||
<% if poll.image.present? %>
|
<% if poll.image.present? %>
|
||||||
<%= image_tag poll.image_url(:large), alt: poll.image.title %>
|
<%= image_tag poll.image_url(:large), alt: poll.image.title %>
|
||||||
<% else %>
|
|
||||||
<div class="no-image"></div>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -46,9 +46,11 @@
|
|||||||
<%= f.text_field :external_url, placeholder: t("proposals.form.proposal_external_url"), label: false %>
|
<%= f.text_field :external_url, placeholder: t("proposals.form.proposal_external_url"), label: false %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="images small-12 column">
|
<% if feature?(:allow_images) %>
|
||||||
<%= render 'images/nested_image', imageable: @proposal, f: f %>
|
<div class="images small-12 column">
|
||||||
</div>
|
<%= render 'images/nested_image', imageable: @proposal, f: f %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
<div class="documents small-12 column">
|
<div class="documents small-12 column">
|
||||||
<%= render 'documents/nested_documents', documentable: @proposal, f: f %>
|
<%= render 'documents/nested_documents', documentable: @proposal, f: f %>
|
||||||
|
|||||||
@@ -1,21 +1,23 @@
|
|||||||
<div id="<%= dom_id(proposal) %>"
|
<div id="<%= dom_id(proposal) %>"
|
||||||
class="proposal clear <%= ("successful" if proposal.total_votes > Proposal.votes_needed_for_success) %>"
|
class="proposal clear <%= ("successful" if proposal.total_votes > Proposal.votes_needed_for_success) %>"
|
||||||
data-type="proposal">
|
data-type="proposal">
|
||||||
<div class="panel with-image">
|
<div class="panel <%= ('with-image' if feature?(:allow_images) && proposal.image.present?) %>">
|
||||||
<div class="icon-successful"></div>
|
<div class="icon-successful"></div>
|
||||||
<div class="row" data-equalizer>
|
|
||||||
|
|
||||||
<div class="small-12 medium-3 large-2 column text-center">
|
<% if feature?(:allow_images) && proposal.image.present? %>
|
||||||
<div data-equalizer-watch>
|
<div class="row" data-equalizer>
|
||||||
<% if proposal.image.present? %>
|
|
||||||
|
<div class="small-12 medium-3 large-2 column text-center">
|
||||||
|
<div data-equalizer-watch>
|
||||||
<%= image_tag proposal.image_url(:thumb), alt: proposal.image.title %>
|
<%= image_tag proposal.image_url(:thumb), alt: proposal.image.title %>
|
||||||
<% else %>
|
</div>
|
||||||
<div class="no-image"></div>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="small-12 medium-6 large-7 column">
|
<div class="small-12 medium-6 large-7 column">
|
||||||
|
<% else %>
|
||||||
|
<div class="row">
|
||||||
|
<div class="small-12 medium-9 column">
|
||||||
|
<% end %>
|
||||||
<div class="proposal-content">
|
<div class="proposal-content">
|
||||||
<% cache [locale_and_user_status(proposal), 'index', proposal, proposal.author] do %>
|
<% cache [locale_and_user_status(proposal), 'index', proposal, proposal.author] do %>
|
||||||
<h3><%= link_to proposal.title, namespaced_proposal_path(proposal) %></h3>
|
<h3><%= link_to proposal.title, namespaced_proposal_path(proposal) %></h3>
|
||||||
@@ -60,7 +62,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="<%= dom_id(proposal) %>_votes" class="small-12 medium-3 column supports-container" data-equalizer-watch>
|
<div id="<%= dom_id(proposal) %>_votes"
|
||||||
|
class="small-12 medium-3 column supports-container"
|
||||||
|
<%= 'data-equalizer-watch' if feature?(:allow_images) && proposal.image.present? %>>
|
||||||
<% if proposal.successful? %>
|
<% if proposal.successful? %>
|
||||||
<div class="padding text-center">
|
<div class="padding text-center">
|
||||||
|
|
||||||
|
|||||||
@@ -69,7 +69,9 @@
|
|||||||
<%= safe_html_with_links @proposal.description %>
|
<%= safe_html_with_links @proposal.description %>
|
||||||
|
|
||||||
<% if feature?(:map) && map_location_available?(@proposal.map_location) %>
|
<% if feature?(:map) && map_location_available?(@proposal.map_location) %>
|
||||||
<%= render_map(@proposal.map_location, "proposal", false, nil) %>
|
<div class="margin">
|
||||||
|
<%= render_map(@proposal.map_location, "proposal", false, nil) %>
|
||||||
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% if @proposal.external_url.present? %>
|
<% if @proposal.external_url.present? %>
|
||||||
@@ -180,6 +182,9 @@
|
|||||||
} %>
|
} %>
|
||||||
|
|
||||||
<% if current_user %>
|
<% if current_user %>
|
||||||
|
<div class="sidebar-divider"></div>
|
||||||
|
<p class="sidebar-title"><%= t("shared.follow") %></p>
|
||||||
|
|
||||||
<%= render 'follows/follow_button', follow: find_or_build_follow(current_user, @proposal) %>
|
<%= render 'follows/follow_button', follow: find_or_build_follow(current_user, @proposal) %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
|||||||
3
app/views/users/_budget_investment_follow.html.erb
Normal file
3
app/views/users/_budget_investment_follow.html.erb
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<li id="budget_investment_<%= budget_investment.id %>">
|
||||||
|
<%= link_to budget_investment.title, budget_investment_path(budget_investment.budget, budget_investment) %>
|
||||||
|
</li>
|
||||||
@@ -1,30 +1,27 @@
|
|||||||
<ul class="accordion" data-accordion data-allow-all-closed="true">
|
<div class="row following margin-top" data-equalizer data-equalize-on="medium" >
|
||||||
|
<div class="small-12 medium-8 column" data-equalizer-watch>
|
||||||
|
<ul class="menu simple clear">
|
||||||
|
<% @follows.each do |followable_type, follows| %>
|
||||||
|
<li><%= link_to followable_type_title(followable_type), "##{followable_type_title(followable_type).parameterize.underscore}" %></li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<% @follows.each do |followable_type, follows| %>
|
<% @follows.each do |followable_type, follows| %>
|
||||||
|
|
||||||
<li class="accordion-item" data-accordion-item>
|
<h3 id="<%= followable_type_title(followable_type).parameterize.underscore %>">
|
||||||
|
<span class="icon-<%= followable_icon(followable_type) %>"></span>
|
||||||
|
<%= followable_type_title(followable_type) %>
|
||||||
|
</h3>
|
||||||
|
|
||||||
<a href="#" class="accordion-title">
|
<ul class="follow-list">
|
||||||
<span class="icon">
|
<% follows.each do |follow| %>
|
||||||
<i class="icon icon-<%= followable_icon(followable_type) %>"></i>
|
<%= render_follow(follow) %>
|
||||||
</span>
|
<% end %>
|
||||||
<span class="title">
|
</ul>
|
||||||
<strong><%= followable_type_title(followable_type) %></strong>
|
<% end %>
|
||||||
</span>
|
</div>
|
||||||
</a>
|
|
||||||
|
|
||||||
<div class="accordion-content" data-tab-content>
|
<div class="small-12 medium-4 column interests" data-equalizer-watch>
|
||||||
<table>
|
<%= render 'interests', user: @user if valid_interests_access? %>
|
||||||
<tbody>
|
</div>
|
||||||
<% follows.each do |follow| %>
|
</div>
|
||||||
<%= render_follow(follow) %>
|
|
||||||
<% end %>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
|
|||||||
@@ -2,18 +2,10 @@
|
|||||||
<h4><%= interests_title_text(user) %></h4>
|
<h4><%= interests_title_text(user) %></h4>
|
||||||
|
|
||||||
<% if user.interests.any? %>
|
<% if user.interests.any? %>
|
||||||
|
|
||||||
<ul class="no-bullet tags">
|
<ul class="no-bullet tags">
|
||||||
<% user.interests.each do |interest| %>
|
<% user.interests.each do |interest| %>
|
||||||
<li class="inline-block"><span><%= interest %></span></li>
|
<li class="inline-block"><span><%= interest %></span></li>
|
||||||
<% end %>
|
<% end %>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<% else %>
|
|
||||||
|
|
||||||
<div class="callout primary">
|
|
||||||
<%= empty_interests_message_text(user) %>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
6
app/views/users/_proposal_follow.html.erb
Normal file
6
app/views/users/_proposal_follow.html.erb
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<li id="proposal_<%= proposal.id %>">
|
||||||
|
<%= link_to proposal.title, proposal, proposal.retired? ? { class: 'retired' } : {} %>
|
||||||
|
<% if proposal.retired? %>
|
||||||
|
<span class="label alert"><%= t('users.proposals.retired') %></span>
|
||||||
|
<% end %>
|
||||||
|
</li>
|
||||||
@@ -38,18 +38,20 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<%= t("users.show.no_activity") if @activity_counts.values.inject(&:+) == 0 %>
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
<% if @activity_counts.values.inject(&:+) == 0 %>
|
||||||
|
<div class="callout primary">
|
||||||
|
<%= t("users.show.no_activity") %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
<%= render "activity_page" %>
|
<%= render "activity_page" %>
|
||||||
<% else %>
|
<% else %>
|
||||||
<div class="callout warning margin">
|
<div class="callout warning margin">
|
||||||
<%= t('users.show.private_activity') %>
|
<%= t('users.show.private_activity') %>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= render 'interests', user: @user if valid_interests_access? %>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|||||||
@@ -13,10 +13,8 @@ en:
|
|||||||
phone_number_label: Phone number
|
phone_number_label: Phone number
|
||||||
public_activity_label: Keep my list of activities public
|
public_activity_label: Keep my list of activities public
|
||||||
public_interests_label: Keep my interests public
|
public_interests_label: Keep my interests public
|
||||||
public_interests_my_title_list: List of interests (tags of elements you follow)
|
public_interests_my_title_list: Tags of elements you follow
|
||||||
public_interests_user_title_list: List of interests (tags of elements this user follows)
|
public_interests_user_title_list: Tags of elements this user follows
|
||||||
public_interests_my_empty_list: You do not follow any elements yet.
|
|
||||||
public_interests_user_empty_list: This user does not follow any elements yet.
|
|
||||||
save_changes_submit: Save changes
|
save_changes_submit: Save changes
|
||||||
subscription_to_website_newsletter_label: Receive by email website relevant information
|
subscription_to_website_newsletter_label: Receive by email website relevant information
|
||||||
email_on_direct_message_label: Receive emails about direct messages
|
email_on_direct_message_label: Receive emails about direct messages
|
||||||
@@ -570,6 +568,7 @@ en:
|
|||||||
collective: Collective
|
collective: Collective
|
||||||
flag: Flag as inappropriate
|
flag: Flag as inappropriate
|
||||||
follow: "Follow"
|
follow: "Follow"
|
||||||
|
following: "Following"
|
||||||
follow_entity: "Follow %{entity}"
|
follow_entity: "Follow %{entity}"
|
||||||
followable:
|
followable:
|
||||||
budget_investment:
|
budget_investment:
|
||||||
@@ -614,7 +613,6 @@ en:
|
|||||||
target_blank_html: " (link opens in new window)"
|
target_blank_html: " (link opens in new window)"
|
||||||
you_are_in: "You are in"
|
you_are_in: "You are in"
|
||||||
unflag: Unflag
|
unflag: Unflag
|
||||||
unfollow: "Unfollow"
|
|
||||||
unfollow_entity: "Unfollow %{entity}"
|
unfollow_entity: "Unfollow %{entity}"
|
||||||
outline:
|
outline:
|
||||||
budget: Participatory budget
|
budget: Participatory budget
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ en:
|
|||||||
recommendations: Recommendeds
|
recommendations: Recommendeds
|
||||||
community: Community on proposals and investments
|
community: Community on proposals and investments
|
||||||
map: Proposals and budget investments geolocation
|
map: Proposals and budget investments geolocation
|
||||||
|
allow_images: Allow upload and show images
|
||||||
map_latitude: Latitude
|
map_latitude: Latitude
|
||||||
map_longitude: Longitude
|
map_longitude: Longitude
|
||||||
map_zoom: Zoom
|
map_zoom: Zoom
|
||||||
|
|||||||
@@ -13,10 +13,8 @@ es:
|
|||||||
phone_number_label: Teléfono
|
phone_number_label: Teléfono
|
||||||
public_activity_label: Mostrar públicamente mi lista de actividades
|
public_activity_label: Mostrar públicamente mi lista de actividades
|
||||||
public_interests_label: Mostrar públicamente mis intereses
|
public_interests_label: Mostrar públicamente mis intereses
|
||||||
public_interests_my_title_list: Lista de intereses (etiquetas de los elementos que sigues)
|
public_interests_my_title_list: Etiquetas de los elementos que sigues
|
||||||
public_interests_user_title_list: Lista de intereses (etiquetas de los elementos seguidos este usuario)
|
public_interests_user_title_list: Etiquetas de los elementos que sigue este usuario
|
||||||
public_interests_my_empty_list: Aún no sigues ningún elemento.
|
|
||||||
public_interests_user_empty_list: Este usuario no sigue ningún elemento todavía.
|
|
||||||
save_changes_submit: Guardar cambios
|
save_changes_submit: Guardar cambios
|
||||||
subscription_to_website_newsletter_label: Recibir emails con información interesante sobre la web
|
subscription_to_website_newsletter_label: Recibir emails con información interesante sobre la web
|
||||||
email_on_direct_message_label: Recibir emails con mensajes privados
|
email_on_direct_message_label: Recibir emails con mensajes privados
|
||||||
@@ -567,6 +565,7 @@ es:
|
|||||||
collective: Colectivo
|
collective: Colectivo
|
||||||
flag: Denunciar como inapropiado
|
flag: Denunciar como inapropiado
|
||||||
follow: "Seguir"
|
follow: "Seguir"
|
||||||
|
following: "Siguiendo"
|
||||||
follow_entity: "Seguir %{entity}"
|
follow_entity: "Seguir %{entity}"
|
||||||
followable:
|
followable:
|
||||||
budget_investment:
|
budget_investment:
|
||||||
@@ -611,7 +610,6 @@ es:
|
|||||||
target_blank_html: " (se abre en ventana nueva)"
|
target_blank_html: " (se abre en ventana nueva)"
|
||||||
you_are_in: "Estás en"
|
you_are_in: "Estás en"
|
||||||
unflag: Deshacer denuncia
|
unflag: Deshacer denuncia
|
||||||
unfollow: "Dejar de seguir"
|
|
||||||
unfollow_entity: "Dejar de seguir %{entity}"
|
unfollow_entity: "Dejar de seguir %{entity}"
|
||||||
outline:
|
outline:
|
||||||
budget: Presupuestos participativos
|
budget: Presupuestos participativos
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ es:
|
|||||||
recommendations: Recomendaciones
|
recommendations: Recomendaciones
|
||||||
community: Comunidad en propuestas y proyectos de inversión
|
community: Comunidad en propuestas y proyectos de inversión
|
||||||
map: Geolocalización de propuestas y proyectos de inversión
|
map: Geolocalización de propuestas y proyectos de inversión
|
||||||
|
allow_images: Permitir subir y mostrar imágenes
|
||||||
map_latitude: Latitud
|
map_latitude: Latitud
|
||||||
map_longitude: Longitud
|
map_longitude: Longitud
|
||||||
map_zoom: Zoom
|
map_zoom: Zoom
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ section "Creating Settings" do
|
|||||||
Setting.create(key: 'feature.user.recommendations', value: "true")
|
Setting.create(key: 'feature.user.recommendations', value: "true")
|
||||||
Setting.create(key: 'feature.community', value: "true")
|
Setting.create(key: 'feature.community', value: "true")
|
||||||
Setting.create(key: 'feature.map', value: "true")
|
Setting.create(key: 'feature.map', value: "true")
|
||||||
|
Setting.create(key: 'feature.allow_images', value: "true")
|
||||||
Setting.create(key: 'feature.public_stats', value: "true")
|
Setting.create(key: 'feature.public_stats', value: "true")
|
||||||
Setting.create(key: 'per_page_code_head', value: "")
|
Setting.create(key: 'per_page_code_head', value: "")
|
||||||
Setting.create(key: 'per_page_code_body', value: "")
|
Setting.create(key: 'per_page_code_body', value: "")
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ Setting['feature.legislation'] = true
|
|||||||
Setting['feature.user.recommendations'] = true
|
Setting['feature.user.recommendations'] = true
|
||||||
Setting['feature.community'] = true
|
Setting['feature.community'] = true
|
||||||
Setting['feature.map'] = nil
|
Setting['feature.map'] = nil
|
||||||
|
Setting['feature.allow_images'] = true
|
||||||
|
|
||||||
# Spending proposals feature flags
|
# Spending proposals feature flags
|
||||||
Setting['feature.spending_proposal_features.voting_allowed'] = nil
|
Setting['feature.spending_proposal_features.voting_allowed'] = nil
|
||||||
|
|||||||
@@ -19,7 +19,8 @@ describe InstallationController, type: :request do
|
|||||||
'user.recommendations' => nil,
|
'user.recommendations' => nil,
|
||||||
'community' => nil,
|
'community' => nil,
|
||||||
'map' => 't',
|
'map' => 't',
|
||||||
'spending_proposal_features.voting_allowed' => 't'
|
'spending_proposal_features.voting_allowed' => 't',
|
||||||
|
'allow_images' => 't'
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -42,6 +43,7 @@ describe InstallationController, type: :request do
|
|||||||
Setting['feature.community'] = true
|
Setting['feature.community'] = true
|
||||||
Setting['feature.map'] = nil
|
Setting['feature.map'] = nil
|
||||||
Setting['feature.spending_proposal_features.voting_allowed'] = nil
|
Setting['feature.spending_proposal_features.voting_allowed'] = nil
|
||||||
|
Setting['feature.allow_images'] = true
|
||||||
end
|
end
|
||||||
|
|
||||||
specify "with query string inside query params" do
|
specify "with query string inside query params" do
|
||||||
|
|||||||
@@ -9,6 +9,14 @@ feature 'Budget Investments' do
|
|||||||
let(:group) { create(:budget_group, name: "Health", budget: budget) }
|
let(:group) { create(:budget_group, name: "Health", budget: budget) }
|
||||||
let!(:heading) { create(:budget_heading, name: "More hospitals", group: group) }
|
let!(:heading) { create(:budget_heading, name: "More hospitals", group: group) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
Setting['feature.allow_images'] = true
|
||||||
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
Setting['feature.allow_images'] = nil
|
||||||
|
end
|
||||||
|
|
||||||
scenario 'Index' do
|
scenario 'Index' do
|
||||||
investments = [create(:budget_investment, heading: heading),
|
investments = [create(:budget_investment, heading: heading),
|
||||||
create(:budget_investment, heading: heading),
|
create(:budget_investment, heading: heading),
|
||||||
@@ -37,7 +45,7 @@ feature 'Budget Investments' do
|
|||||||
visit budget_investments_path(budget, heading_id: heading.id)
|
visit budget_investments_path(budget, heading_id: heading.id)
|
||||||
|
|
||||||
within("#budget_investment_#{investment.id}") do
|
within("#budget_investment_#{investment.id}") do
|
||||||
expect(page).to have_css("div.no-image")
|
expect(page).to_not have_css("div.with-image")
|
||||||
end
|
end
|
||||||
within("#budget_investment_#{investment_with_image.id}") do
|
within("#budget_investment_#{investment_with_image.id}") do
|
||||||
expect(page).to have_css("img[alt='#{investment_with_image.image.title}']")
|
expect(page).to have_css("img[alt='#{investment_with_image.image.title}']")
|
||||||
|
|||||||
@@ -10,6 +10,15 @@ feature 'Proposals' do
|
|||||||
end
|
end
|
||||||
|
|
||||||
context 'Index' do
|
context 'Index' do
|
||||||
|
|
||||||
|
before do
|
||||||
|
Setting['feature.allow_images'] = true
|
||||||
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
Setting['feature.allow_images'] = nil
|
||||||
|
end
|
||||||
|
|
||||||
scenario 'Lists featured and regular proposals' do
|
scenario 'Lists featured and regular proposals' do
|
||||||
featured_proposals = create_featured_proposals
|
featured_proposals = create_featured_proposals
|
||||||
proposals = [create(:proposal), create(:proposal), create(:proposal)]
|
proposals = [create(:proposal), create(:proposal), create(:proposal)]
|
||||||
@@ -61,7 +70,7 @@ feature 'Proposals' do
|
|||||||
visit proposals_path(proposal)
|
visit proposals_path(proposal)
|
||||||
|
|
||||||
within("#proposal_#{proposal.id}") do
|
within("#proposal_#{proposal.id}") do
|
||||||
expect(page).to have_css("div.no-image")
|
expect(page).to_not have_css("div.with-image")
|
||||||
end
|
end
|
||||||
within("#proposal_#{proposal_with_image.id}") do
|
within("#proposal_#{proposal_with_image.id}") do
|
||||||
expect(page).to have_css("img[alt='#{proposal_with_image.image.title}']")
|
expect(page).to have_css("img[alt='#{proposal_with_image.image.title}']")
|
||||||
|
|||||||
@@ -259,6 +259,9 @@ feature 'Users' do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario 'User can display public page' do
|
scenario 'User can display public page' do
|
||||||
|
proposal = create(:proposal, tag_list: "Sport")
|
||||||
|
create(:follow, :followed_proposal, followable: proposal, user: @user)
|
||||||
|
|
||||||
login_as(@user)
|
login_as(@user)
|
||||||
visit account_path
|
visit account_path
|
||||||
|
|
||||||
@@ -267,22 +270,29 @@ feature 'Users' do
|
|||||||
|
|
||||||
logout
|
logout
|
||||||
|
|
||||||
visit user_path(@user)
|
visit user_path(@user, filter: 'follows', page: '1')
|
||||||
|
|
||||||
expect(page).to have_css('#public_interests')
|
expect(page).to have_css('#public_interests')
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario 'Is always visible for the owner' do
|
scenario 'Is always visible for the owner' do
|
||||||
|
proposal = create(:proposal, tag_list: "Sport")
|
||||||
|
create(:follow, :followed_proposal, followable: proposal, user: @user)
|
||||||
|
|
||||||
login_as(@user)
|
login_as(@user)
|
||||||
visit account_path
|
visit account_path
|
||||||
|
|
||||||
uncheck 'account_public_interests'
|
uncheck 'account_public_interests'
|
||||||
click_button 'Save changes'
|
click_button 'Save changes'
|
||||||
|
|
||||||
visit user_path(@user)
|
visit user_path(@user, filter: 'follows', page: '1')
|
||||||
expect(page).to have_css('#public_interests')
|
expect(page).to have_css('#public_interests')
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario 'Is always visible for admins' do
|
scenario 'Is always visible for admins' do
|
||||||
|
proposal = create(:proposal, tag_list: "Sport")
|
||||||
|
create(:follow, :followed_proposal, followable: proposal, user: @user)
|
||||||
|
|
||||||
login_as(@user)
|
login_as(@user)
|
||||||
visit account_path
|
visit account_path
|
||||||
|
|
||||||
@@ -292,11 +302,14 @@ feature 'Users' do
|
|||||||
logout
|
logout
|
||||||
|
|
||||||
login_as(create(:administrator).user)
|
login_as(create(:administrator).user)
|
||||||
visit user_path(@user)
|
visit user_path(@user, filter: 'follows', page: '1')
|
||||||
expect(page).to have_css('#public_interests')
|
expect(page).to have_css('#public_interests')
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario 'Is always visible for moderators' do
|
scenario 'Is always visible for moderators' do
|
||||||
|
proposal = create(:proposal, tag_list: "Sport")
|
||||||
|
create(:follow, :followed_proposal, followable: proposal, user: @user)
|
||||||
|
|
||||||
login_as(@user)
|
login_as(@user)
|
||||||
visit account_path
|
visit account_path
|
||||||
|
|
||||||
@@ -306,38 +319,29 @@ feature 'Users' do
|
|||||||
logout
|
logout
|
||||||
|
|
||||||
login_as(create(:moderator).user)
|
login_as(create(:moderator).user)
|
||||||
visit user_path(@user)
|
visit user_path(@user, filter: 'follows', page: '1')
|
||||||
expect(page).to have_css('#public_interests')
|
expect(page).to have_css('#public_interests')
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario 'Should display generic interests title' do
|
scenario 'Should display generic interests title' do
|
||||||
@user.update(public_interests: true)
|
proposal = create(:proposal, tag_list: "Sport")
|
||||||
visit user_path(@user)
|
create(:follow, :followed_proposal, followable: proposal, user: @user)
|
||||||
|
|
||||||
expect(page).to have_content("List of interests (tags of elements this user follows)")
|
@user.update(public_interests: true)
|
||||||
|
visit user_path(@user, filter: 'follows', page: '1')
|
||||||
|
|
||||||
|
expect(page).to have_content("Tags of elements this user follows")
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario 'Should display custom interests title when user is visiting own user page' do
|
scenario 'Should display custom interests title when user is visiting own user page' do
|
||||||
|
proposal = create(:proposal, tag_list: "Sport")
|
||||||
|
create(:follow, :followed_proposal, followable: proposal, user: @user)
|
||||||
|
|
||||||
@user.update(public_interests: true)
|
@user.update(public_interests: true)
|
||||||
login_as(@user)
|
login_as(@user)
|
||||||
visit user_path(@user)
|
visit user_path(@user, filter: 'follows', page: '1')
|
||||||
|
|
||||||
expect(page).to have_content("List of interests (tags of elements you follow)")
|
expect(page).to have_content("Tags of elements you follow")
|
||||||
end
|
|
||||||
|
|
||||||
scenario 'Should display generic empty interests list message when visited user has not interests defined' do
|
|
||||||
@user.update(public_interests: true)
|
|
||||||
visit user_path(@user)
|
|
||||||
|
|
||||||
expect(page).to have_content("This user does not follow any elements yet.")
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario 'Should display custom empty interests list message when user has not interests defined and user is visiting own user page' do
|
|
||||||
@user.update(public_interests: true)
|
|
||||||
login_as(@user)
|
|
||||||
visit user_path(@user)
|
|
||||||
|
|
||||||
expect(page).to have_content("You do not follow any elements yet.")
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -418,22 +422,22 @@ feature 'Users' do
|
|||||||
expect(page).to have_content('1 Following')
|
expect(page).to have_content('1 Following')
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario 'Display accordion proposal tab when user is following one proposal at least' do
|
scenario 'Display proposal tab when user is following one proposal at least' do
|
||||||
proposal = create(:proposal)
|
proposal = create(:proposal)
|
||||||
create(:follow, followable: proposal, user: @user)
|
create(:follow, followable: proposal, user: @user)
|
||||||
|
|
||||||
visit user_path(@user, filter: "follows")
|
visit user_path(@user, filter: "follows")
|
||||||
|
|
||||||
expect(page).to have_link('Citizen proposals', href: "#")
|
expect(page).to have_link('Citizen proposals', href: "#citizen_proposals")
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario 'Not display accordion proposal tab when user is not following any proposal' do
|
scenario 'Not display proposal tab when user is not following any proposal' do
|
||||||
visit user_path(@user, filter: "follows")
|
visit user_path(@user, filter: "follows")
|
||||||
|
|
||||||
expect(page).not_to have_link('Citizen proposals', href: "#")
|
expect(page).not_to have_link('Citizen proposals', href: "#citizen_proposals")
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario 'Display proposal with action buttons inside accordion proposal tab when current user is proposal author', :js do
|
scenario 'Display proposals with link to proposal' do
|
||||||
proposal = create(:proposal, author: @user)
|
proposal = create(:proposal, author: @user)
|
||||||
create(:follow, followable: proposal, user: @user)
|
create(:follow, followable: proposal, user: @user)
|
||||||
login_as @user
|
login_as @user
|
||||||
@@ -442,35 +446,7 @@ feature 'Users' do
|
|||||||
click_link 'Citizen proposals'
|
click_link 'Citizen proposals'
|
||||||
|
|
||||||
expect(page).to have_content proposal.title
|
expect(page).to have_content proposal.title
|
||||||
expect(page).to have_link "Send notification"
|
|
||||||
expect(page).to have_link "Retire"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario 'Display proposal with action buttons inside accordion proposal tab when there is no logged user', :js do
|
|
||||||
proposal = create(:proposal, author: @user)
|
|
||||||
create(:follow, followable: proposal, user: @user)
|
|
||||||
|
|
||||||
visit user_path(@user, filter: "follows")
|
|
||||||
click_link 'Citizen proposals'
|
|
||||||
|
|
||||||
expect(page).to have_content proposal.title
|
|
||||||
expect(page).not_to have_link "Send notification"
|
|
||||||
expect(page).not_to have_link "Retire"
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario 'Display proposal without action buttons inside accordion proposal tab when current user is not proposal author', :js do
|
|
||||||
proposal = create(:proposal)
|
|
||||||
create(:follow, followable: proposal, user: @user)
|
|
||||||
login_as @user
|
|
||||||
|
|
||||||
visit user_path(@user, filter: "follows")
|
|
||||||
click_link 'Citizen proposals'
|
|
||||||
|
|
||||||
expect(page).to have_content proposal.title
|
|
||||||
expect(page).not_to have_link "Send notification"
|
|
||||||
expect(page).not_to have_link "Retire"
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'Budget Investments' do
|
describe 'Budget Investments' do
|
||||||
@@ -484,35 +460,22 @@ feature 'Users' do
|
|||||||
expect(page).to have_content('1 Following')
|
expect(page).to have_content('1 Following')
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario 'Display accordion budget investment tab when user is following one budget investment at least' do
|
scenario 'Display budget investment tab when user is following one budget investment at least' do
|
||||||
budget_investment = create(:budget_investment)
|
budget_investment = create(:budget_investment)
|
||||||
create(:follow, followable: budget_investment, user: @user)
|
create(:follow, followable: budget_investment, user: @user)
|
||||||
|
|
||||||
visit user_path(@user, filter: "follow")
|
visit user_path(@user, filter: "follows")
|
||||||
|
|
||||||
expect(page).to have_link('Investments', href: "#")
|
expect(page).to have_link('Investments', href: "#investments")
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario 'Not display accordion budget investment tab when user is not following any budget investment' do
|
scenario 'Not display budget investment tab when user is not following any budget investment' do
|
||||||
visit user_path(@user, filter: "follow")
|
visit user_path(@user, filter: "follows")
|
||||||
|
|
||||||
expect(page).not_to have_link('Investments', href: "#")
|
expect(page).not_to have_link('Investments', href: "#investments")
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario 'Display budget investment with action buttons inside accordion budget investment tab when current user is a verified user and author', :js do
|
scenario 'Display budget investment with link to budget investment' do
|
||||||
user = create(:user, :level_two)
|
|
||||||
budget_investment = create(:budget_investment, author: user)
|
|
||||||
create(:follow, followable: budget_investment, user: user)
|
|
||||||
login_as user
|
|
||||||
|
|
||||||
visit user_path(user, filter: "follows")
|
|
||||||
click_link 'Investments'
|
|
||||||
|
|
||||||
expect(page).to have_link budget_investment.title
|
|
||||||
expect(page).to have_link "Delete"
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario 'Display budget investment with action buttons inside accordion budget investment tab when there is no logged user', :js do
|
|
||||||
user = create(:user, :level_two)
|
user = create(:user, :level_two)
|
||||||
budget_investment = create(:budget_investment, author: user)
|
budget_investment = create(:budget_investment, author: user)
|
||||||
create(:follow, followable: budget_investment, user: user)
|
create(:follow, followable: budget_investment, user: user)
|
||||||
@@ -521,22 +484,7 @@ feature 'Users' do
|
|||||||
click_link 'Investments'
|
click_link 'Investments'
|
||||||
|
|
||||||
expect(page).to have_link budget_investment.title
|
expect(page).to have_link budget_investment.title
|
||||||
expect(page).not_to have_link "Delete"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario 'Display budget investment without action buttons inside accordion budget investment tab when current user is not budget investment author', :js do
|
|
||||||
user = create(:user, :level_two)
|
|
||||||
budget_investment = create(:budget_investment)
|
|
||||||
create(:follow, followable: budget_investment, user: user)
|
|
||||||
login_as user
|
|
||||||
|
|
||||||
visit user_path(user, filter: "follows")
|
|
||||||
click_link 'Investments'
|
|
||||||
|
|
||||||
expect(page).to have_link budget_investment.title
|
|
||||||
expect(page).not_to have_link "Delete"
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ shared_examples "followable" do |followable_class_name, followable_path, followa
|
|||||||
visit send(followable_path, arguments)
|
visit send(followable_path, arguments)
|
||||||
|
|
||||||
within "##{dom_id(followable)}" do
|
within "##{dom_id(followable)}" do
|
||||||
expect(page).to have_link("Follow")
|
expect(page).to have_link("Follow #{followable.model_name.human.downcase}")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -37,8 +37,7 @@ shared_examples "followable" do |followable_class_name, followable_path, followa
|
|||||||
login_as(user)
|
login_as(user)
|
||||||
|
|
||||||
visit send(followable_path, arguments)
|
visit send(followable_path, arguments)
|
||||||
|
expect(page).to have_link("Follow #{followable.model_name.human.downcase}")
|
||||||
expect(page).to have_link("Follow")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario "Should display unfollow after user clicks on follow button", :js do
|
scenario "Should display unfollow after user clicks on follow button", :js do
|
||||||
@@ -47,10 +46,10 @@ shared_examples "followable" do |followable_class_name, followable_path, followa
|
|||||||
|
|
||||||
visit send(followable_path, arguments)
|
visit send(followable_path, arguments)
|
||||||
within "##{dom_id(followable)}" do
|
within "##{dom_id(followable)}" do
|
||||||
click_link "Follow"
|
click_link("Follow #{followable.model_name.human.downcase}")
|
||||||
|
|
||||||
expect(page).not_to have_link "Follow"
|
expect(page).not_to have_link("Follow")
|
||||||
expect(page).to have_link "Unfollow"
|
expect(page).to have_link("Following")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -60,7 +59,7 @@ shared_examples "followable" do |followable_class_name, followable_path, followa
|
|||||||
|
|
||||||
visit send(followable_path, arguments)
|
visit send(followable_path, arguments)
|
||||||
within "##{dom_id(followable)}" do
|
within "##{dom_id(followable)}" do
|
||||||
click_link "Follow"
|
click_link("Follow #{followable.model_name.human.downcase}")
|
||||||
end
|
end
|
||||||
|
|
||||||
expect(page).to have_content strip_tags(t("shared.followable.#{followable_class_name}.create.notice_html"))
|
expect(page).to have_content strip_tags(t("shared.followable.#{followable_class_name}.create.notice_html"))
|
||||||
@@ -73,7 +72,7 @@ shared_examples "followable" do |followable_class_name, followable_path, followa
|
|||||||
|
|
||||||
visit send(followable_path, arguments)
|
visit send(followable_path, arguments)
|
||||||
|
|
||||||
expect(page).to have_link("Unfollow")
|
expect(page).to have_link("Following")
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario "Should update follow button and show destroy notice after user clicks on unfollow button", :js do
|
scenario "Should update follow button and show destroy notice after user clicks on unfollow button", :js do
|
||||||
@@ -83,10 +82,10 @@ shared_examples "followable" do |followable_class_name, followable_path, followa
|
|||||||
|
|
||||||
visit send(followable_path, arguments)
|
visit send(followable_path, arguments)
|
||||||
within "##{dom_id(followable)}" do
|
within "##{dom_id(followable)}" do
|
||||||
click_link "Unfollow"
|
click_link("Unfollow #{followable.model_name.human.downcase}")
|
||||||
|
|
||||||
expect(page).not_to have_link "Unfollow"
|
expect(page).not_to have_link("Unfollow")
|
||||||
expect(page).to have_link "Follow"
|
expect(page).to have_link("Follow #{followable.model_name.human.downcase}")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -97,7 +96,7 @@ shared_examples "followable" do |followable_class_name, followable_path, followa
|
|||||||
|
|
||||||
visit send(followable_path, arguments)
|
visit send(followable_path, arguments)
|
||||||
within "##{dom_id(followable)}" do
|
within "##{dom_id(followable)}" do
|
||||||
click_link "Unfollow"
|
click_link("Unfollow #{followable.model_name.human.downcase}")
|
||||||
end
|
end
|
||||||
|
|
||||||
expect(page).to have_content strip_tags(t("shared.followable.#{followable_class_name}.destroy.notice_html"))
|
expect(page).to have_content strip_tags(t("shared.followable.#{followable_class_name}.destroy.notice_html"))
|
||||||
|
|||||||
@@ -9,6 +9,9 @@ shared_examples "nested imageable" do |imageable_factory_name, path, imageable_p
|
|||||||
let!(:imageable) { create(imageable_factory_name) }
|
let!(:imageable) { create(imageable_factory_name) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
|
||||||
|
Setting['feature.allow_images'] = true
|
||||||
|
|
||||||
imageable_path_arguments&.each do |argument_name, path_to_value|
|
imageable_path_arguments&.each do |argument_name, path_to_value|
|
||||||
arguments.merge!("#{argument_name}": imageable.send(path_to_value))
|
arguments.merge!("#{argument_name}": imageable.send(path_to_value))
|
||||||
end
|
end
|
||||||
@@ -16,6 +19,10 @@ shared_examples "nested imageable" do |imageable_factory_name, path, imageable_p
|
|||||||
imageable.update(author: user) if imageable.respond_to?(:author)
|
imageable.update(author: user) if imageable.respond_to?(:author)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
Setting['feature.allow_images'] = nil
|
||||||
|
end
|
||||||
|
|
||||||
describe "at #{path}" do
|
describe "at #{path}" do
|
||||||
|
|
||||||
scenario "Should show new image link when imageable has not an associated image defined" do
|
scenario "Should show new image link when imageable has not an associated image defined" do
|
||||||
|
|||||||
Reference in New Issue
Block a user