diff --git a/app/controllers/admin/activity_controller.rb b/app/controllers/admin/activity_controller.rb index 5cb86abc5..99e97c535 100644 --- a/app/controllers/admin/activity_controller.rb +++ b/app/controllers/admin/activity_controller.rb @@ -1,5 +1,5 @@ class Admin::ActivityController < Admin::BaseController - has_filters %w[all on_users on_proposals on_debates on_comments on_system_emails] + has_filters %w[all on_users on_proposals on_debates on_comments on_budget_investments on_system_emails] def show @activity = Activity.for_render.send(@current_filter) diff --git a/app/models/community.rb b/app/models/community.rb index 48a6029d3..1852aa4f0 100644 --- a/app/models/community.rb +++ b/app/models/community.rb @@ -49,8 +49,8 @@ class Community < ApplicationRecord end def users_who_topics_author - author_ids = topics.pluck(:author_id) - User.by_authors(author_ids) + ids = topics.pluck(:author_id) + User.with_ids(ids) end def author_from_community diff --git a/app/models/concerns/filterable.rb b/app/models/concerns/filterable.rb index 92f419ef3..6f730641c 100644 --- a/app/models/concerns/filterable.rb +++ b/app/models/concerns/filterable.rb @@ -2,10 +2,7 @@ module Filterable extend ActiveSupport::Concern included do - scope :by_date_range, ->(date_range) { where(created_at: date_range) } - scope :by_official_level, ->(official_level) do - where(users: { official_level: official_level }).joins(:author) - end + scope :by_date_range, ->(date_range) { where(created_at: date_range) } end class_methods do diff --git a/app/models/debate.rb b/app/models/debate.rb index 7cba511d8..c40438400 100644 --- a/app/models/debate.rb +++ b/app/models/debate.rb @@ -38,7 +38,6 @@ class Debate < ApplicationRecord scope :sort_by_hot_score, -> { reorder(hot_score: :desc) } scope :sort_by_confidence_score, -> { reorder(confidence_score: :desc) } scope :sort_by_created_at, -> { reorder(created_at: :desc) } - scope :sort_by_most_commented, -> { reorder(comments_count: :desc) } scope :sort_by_relevance, -> { all } scope :sort_by_flags, -> { order(flags_count: :desc, updated_at: :desc) } scope :sort_by_recommendations, -> { order(cached_votes_total: :desc) } diff --git a/app/models/legislation/proposal.rb b/app/models/legislation/proposal.rb index 63dc9221b..1f4fb6808 100644 --- a/app/models/legislation/proposal.rb +++ b/app/models/legislation/proposal.rb @@ -40,11 +40,8 @@ class Legislation::Proposal < ApplicationRecord before_save :calculate_hot_score, :calculate_confidence_score - scope :for_render, -> { includes(:tags) } - scope :sort_by_hot_score, -> { reorder(hot_score: :desc) } scope :sort_by_confidence_score, -> { reorder(confidence_score: :desc) } scope :sort_by_created_at, -> { reorder(created_at: :desc) } - scope :sort_by_most_commented, -> { reorder(comments_count: :desc) } scope :sort_by_title, -> { reorder(title: :asc) } scope :sort_by_id, -> { reorder(id: :asc) } scope :sort_by_supports, -> { reorder(cached_votes_score: :desc) } diff --git a/app/models/poll.rb b/app/models/poll.rb index 2702ebdd1..2ccaf01e5 100644 --- a/app/models/poll.rb +++ b/app/models/poll.rb @@ -72,7 +72,6 @@ class Poll < ApplicationRecord scope :expired, -> { where(ends_at: ...Time.current) } scope :recounting, -> { where(ends_at: (RECOUNT_DURATION.ago)...Time.current) } scope :published, -> { where(published: true) } - scope :by_geozone_id, ->(geozone_id) { where(geozones: { id: geozone_id }.joins(:geozones)) } scope :public_for_api, -> { all } scope :not_budget, -> { where(budget_id: nil) } scope :created_by_admin, -> { where(related_type: nil) } diff --git a/app/models/poll/answer.rb b/app/models/poll/answer.rb index 664e2f426..129959f12 100644 --- a/app/models/poll/answer.rb +++ b/app/models/poll/answer.rb @@ -12,6 +12,5 @@ class Poll::Answer < ApplicationRecord validates :answer, inclusion: { in: ->(poll_answer) { poll_answer.option.possible_answers }}, if: ->(poll_answer) { poll_answer.option.present? } - scope :by_author, ->(author_id) { where(author_id: author_id) } scope :by_question, ->(question_id) { where(question_id: question_id) } end diff --git a/app/models/poll/partial_result.rb b/app/models/poll/partial_result.rb index d671d6184..b24f39bb1 100644 --- a/app/models/poll/partial_result.rb +++ b/app/models/poll/partial_result.rb @@ -15,7 +15,6 @@ class Poll::PartialResult < ApplicationRecord validates :origin, inclusion: { in: ->(*) { VALID_ORIGINS }} validates :option, uniqueness: { scope: [:booth_assignment_id, :date] }, allow_nil: true - scope :by_author, ->(author_id) { where(author_id: author_id) } scope :by_question, ->(question_id) { where(question_id: question_id) } before_save :update_logs diff --git a/app/models/poll/recount.rb b/app/models/poll/recount.rb index 5e1692792..5eaaa4e04 100644 --- a/app/models/poll/recount.rb +++ b/app/models/poll/recount.rb @@ -12,8 +12,6 @@ class Poll::Recount < ApplicationRecord scope :booth, -> { where(origin: "booth") } scope :letter, -> { where(origin: "letter") } - scope :by_author, ->(author_id) { where(author_id: author_id) } - before_save :update_logs def update_logs diff --git a/app/models/proposal.rb b/app/models/proposal.rb index 99850827e..65765981f 100644 --- a/app/models/proposal.rb +++ b/app/models/proposal.rb @@ -90,7 +90,6 @@ class Proposal < ApplicationRecord scope :draft, -> { excluding(published) } scope :not_supported_by_user, ->(user) { where.not(id: user.find_voted_items(votable_type: "Proposal")) } - scope :created_by, ->(author) { where(author: author) } def publish update!(published_at: Time.current) diff --git a/app/models/user.rb b/app/models/user.rb index cbd23dd85..f813787b6 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -112,7 +112,7 @@ class User < ApplicationRecord scope :erased, -> { where.not(erased_at: nil) } scope :active, -> { excluding(erased) } scope :public_for_api, -> { all } - scope :by_authors, ->(author_ids) { where(id: author_ids) } + scope :with_ids, ->(ids) { where(id: ids) } scope :by_comments, ->(commentables) do joins(:comments).where("comments.commentable": commentables).distinct end diff --git a/app/models/verified_user.rb b/app/models/verified_user.rb index 205c2dfe9..847baed42 100644 --- a/app/models/verified_user.rb +++ b/app/models/verified_user.rb @@ -1,7 +1,5 @@ class VerifiedUser < ApplicationRecord scope :by_user, ->(user) { where(document_number: user.document_number) } - - scope :by_email, ->(email) { where(email: email) } scope :by_phone, ->(phone) { where(phone: phone) } def self.phone?(user) diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index d6917a5e5..44fb8d57a 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -62,6 +62,7 @@ en: filter: Show filters: all: All + on_budget_investments: Investment projects on_comments: Comments on_debates: Debates on_proposals: Proposals diff --git a/config/locales/en/general.yml b/config/locales/en/general.yml index ae79e1ba7..269452fb7 100644 --- a/config/locales/en/general.yml +++ b/config/locales/en/general.yml @@ -88,7 +88,6 @@ en: confidence_score: highest rated created_at: newest hot_score: most active - most_commented: most commented relevance: relevance recommendations: recommendations recommendations: diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index 8db768fed..6fbc020c5 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -62,6 +62,7 @@ es: filter: Mostrar filters: all: Todos + on_budget_investments: Proyectos de gasto on_comments: Comentarios on_debates: Debates on_proposals: Propuestas diff --git a/config/locales/es/general.yml b/config/locales/es/general.yml index dd7e63c3e..9bcb5566a 100644 --- a/config/locales/es/general.yml +++ b/config/locales/es/general.yml @@ -88,7 +88,6 @@ es: confidence_score: Mejor valorados created_at: Nuevos hot_score: Más activos - most_commented: Más comentados relevance: Más relevantes recommendations: Recomendaciones recommendations: diff --git a/spec/models/debate_spec.rb b/spec/models/debate_spec.rb index 91761dc4f..acf266689 100644 --- a/spec/models/debate_spec.rb +++ b/spec/models/debate_spec.rb @@ -650,20 +650,6 @@ describe Debate do expect(results).to eq [newest, recent, oldest] end - - it "is able to reorder by most commented after searching" do - least_commented = create(:debate, title: "stop corruption", cached_votes_up: 1, comments_count: 1) - most_commented = create(:debate, title: "stop corruption", cached_votes_up: 2, comments_count: 100) - some_comments = create(:debate, title: "stop corruption", cached_votes_up: 3, comments_count: 10) - - results = Debate.search("stop corruption") - - expect(results).to eq [some_comments, most_commented, least_commented] - - results = results.sort_by_most_commented - - expect(results).to eq [most_commented, some_comments, least_commented] - end end context "no results" do diff --git a/spec/system/admin/activity_spec.rb b/spec/system/admin/activity_spec.rb index e92270c2b..850043ad8 100644 --- a/spec/system/admin/activity_spec.rb +++ b/spec/system/admin/activity_spec.rb @@ -1,7 +1,7 @@ require "rails_helper" describe "Admin activity" do - let(:admin) { create(:administrator) } + let(:admin) { create(:administrator, user: create(:user, username: "Admin Smith")) } before do login_as(admin.user) @@ -9,135 +9,117 @@ describe "Admin activity" do context "Proposals" do scenario "Shows moderation activity on proposals" do - proposal = create(:proposal, description: "
Description with html tag
") + proposal = create(:proposal, description: "Description with html tag
", title: "Sample proposal") visit proposal_path(proposal) - within("#proposal_#{proposal.id}") do - accept_confirm("Are you sure? Hide \"#{proposal.title}\"") { click_button "Hide" } - end - expect(page).to have_css("#proposal_#{proposal.id}.faded") + accept_confirm('Are you sure? Hide "Sample proposal"') { click_button "Hide" } - visit admin_activity_path + expect(page).to have_css "#proposal_#{proposal.id}.faded" - within first("tbody tr") do - expect(page).to have_content(proposal.title) - expect(page).to have_content("Hidden") - expect(page).to have_content(admin.user.username) - expect(page).to have_css("p", exact_text: "Description with html tag") + visit admin_activity_path(filter: "on_proposals") + + within "tbody tr" do + expect(page).to have_content "Sample proposal" + expect(page).to have_content "Hidden" + expect(page).to have_content "Admin Smith" + expect(page).to have_css "p", exact_text: "Description with html tag" end end scenario "Shows moderation activity from moderation screen" do - proposal1 = create(:proposal) - proposal2 = create(:proposal) - proposal3 = create(:proposal) + create(:proposal, title: "Sample proposal 1") + create(:proposal, title: "Sample proposal 2") + create(:proposal, title: "Sample proposal 3") visit moderation_proposals_path(filter: "all") - within("#proposal_#{proposal1.id}") do - check "proposal_#{proposal1.id}_check" - end - - within("#proposal_#{proposal3.id}") do - check "proposal_#{proposal3.id}_check" - end - + check "Sample proposal 1" + check "Sample proposal 3" accept_confirm("Are you sure? Hide proposals") { click_button "Hide proposals" } - expect(page).not_to have_content(proposal1.title) + expect(page).not_to have_content "Sample proposal 1" - visit admin_activity_path + visit admin_activity_path(filter: "on_proposals") - expect(page).to have_content(proposal1.title) - expect(page).not_to have_content(proposal2.title) - expect(page).to have_content(proposal3.title) + expect(page).to have_content "Sample proposal 1" + expect(page).not_to have_content "Sample proposal 2" + expect(page).to have_content "Sample proposal 3" end scenario "Shows admin restores" do - proposal = create(:proposal, :hidden) + create(:proposal, :hidden, title: "Sample proposal") visit admin_hidden_proposals_path - within("#proposal_#{proposal.id}") do - accept_confirm("Are you sure? Restore") { click_button "Restore" } - end + accept_confirm("Are you sure? Restore") { click_button "Restore" } expect(page).to have_content "There are no hidden proposals" - visit admin_activity_path + visit admin_activity_path(filter: "on_proposals") - within first("tbody tr") do - expect(page).to have_content(proposal.title) - expect(page).to have_content("Restored") - expect(page).to have_content(admin.user.username) + within "tbody tr" do + expect(page).to have_content "Sample proposal" + expect(page).to have_content "Restored" + expect(page).to have_content "Admin Smith" end end end context "Debates" do scenario "Shows moderation activity on debates" do - debate = create(:debate) + debate = create(:debate, title: "Sample debate") visit debate_path(debate) - within("#debate_#{debate.id}") do - accept_confirm("Are you sure? Hide \"#{debate.title}\"") { click_button "Hide" } - end - expect(page).to have_css("#debate_#{debate.id}.faded") + accept_confirm('Are you sure? Hide "Sample debate"') { click_button "Hide" } - visit admin_activity_path + expect(page).to have_css "#debate_#{debate.id}.faded" - within first("tbody tr") do - expect(page).to have_content(debate.title) - expect(page).to have_content("Hidden") - expect(page).to have_content(admin.user.username) + visit admin_activity_path(filter: "on_debates") + + within "tbody tr" do + expect(page).to have_content "Sample debate" + expect(page).to have_content "Hidden" + expect(page).to have_content "Admin Smith" end end scenario "Shows moderation activity from moderation screen" do - debate1 = create(:debate) - debate2 = create(:debate) - debate3 = create(:debate) + create(:debate, title: "Sample debate 1") + create(:debate, title: "Sample debate 2") + create(:debate, title: "Sample debate 3") visit moderation_debates_path(filter: "all") - within("#debate_#{debate1.id}") do - check "debate_#{debate1.id}_check" - end - - within("#debate_#{debate3.id}") do - check "debate_#{debate3.id}_check" - end - + check "Sample debate 1" + check "Sample debate 3" accept_confirm("Are you sure? Hide debates") { click_button "Hide debates" } - expect(page).not_to have_content(debate1.title) + expect(page).not_to have_content "Sample debate 1" - visit admin_activity_path + visit admin_activity_path(filter: "on_debates") - expect(page).to have_content(debate1.title) - expect(page).not_to have_content(debate2.title) - expect(page).to have_content(debate3.title) + expect(page).to have_content "Sample debate 1" + expect(page).not_to have_content "Sample debate 2" + expect(page).to have_content "Sample debate 3" end scenario "Shows admin restores" do - debate = create(:debate, :hidden) + create(:debate, :hidden, title: "Sample debate") visit admin_hidden_debates_path - within("#debate_#{debate.id}") do - accept_confirm("Are you sure? Restore") { click_button "Restore" } - end + accept_confirm("Are you sure? Restore") { click_button "Restore" } expect(page).to have_content "There are no hidden debates" - visit admin_activity_path + visit admin_activity_path(filter: "on_debates") - within first("tbody tr") do - expect(page).to have_content(debate.title) - expect(page).to have_content("Restored") - expect(page).to have_content(admin.user.username) + within "tbody tr" do + expect(page).to have_content "Sample debate" + expect(page).to have_content "Restored" + expect(page).to have_content "Admin Smith" end end end @@ -145,186 +127,159 @@ describe "Admin activity" do context "Comments" do scenario "Shows moderation activity on comments" do debate = create(:debate) - comment = create(:comment, commentable: debate) + comment = create(:comment, commentable: debate, body: "Sample comment") visit debate_path(debate) - within("#comment_#{comment.id}") do - accept_confirm("Are you sure? Hide \"#{comment.body}\"") { click_button "Hide" } - expect(page).to have_css(".faded") + within "#comment_#{comment.id}" do + accept_confirm('Are you sure? Hide "Sample comment"') { click_button "Hide" } + expect(page).to have_css ".faded" end - visit admin_activity_path + visit admin_activity_path(filter: "on_comments") - within first("tbody tr") do - expect(page).to have_content(comment.body) - expect(page).to have_content("Hidden") - expect(page).to have_content(admin.user.username) + within "tbody tr" do + expect(page).to have_content "Sample comment" + expect(page).to have_content "Hidden" + expect(page).to have_content "Admin Smith" end end scenario "Shows moderation activity from moderation screen" do comment1 = create(:comment, body: "SPAM") - comment2 = create(:comment) + create(:comment, body: "Not Spam") comment3 = create(:comment, body: "Offensive!") visit moderation_comments_path(filter: "all") - within("#comment_#{comment1.id}") do - check "comment_#{comment1.id}_check" - end - - within("#comment_#{comment3.id}") do - check "comment_#{comment3.id}_check" - end - + check "comment_#{comment1.id}_check" + check "comment_#{comment3.id}_check" accept_confirm("Are you sure? Hide comments") { click_button "Hide comments" } - expect(page).not_to have_content(comment1.body) + expect(page).not_to have_content "SPAM" - visit admin_activity_path + visit admin_activity_path(filter: "on_comments") - expect(page).to have_content(comment1.body) - expect(page).not_to have_content(comment2.body) - expect(page).to have_content(comment3.body) + expect(page).to have_content "SPAM" + expect(page).not_to have_content "Not Spam" + expect(page).to have_content "Offensive!" end scenario "Shows admin restores" do - comment = create(:comment, :hidden) + create(:comment, :hidden, body: "Sample comment") visit admin_hidden_comments_path - within("#comment_#{comment.id}") do - accept_confirm("Are you sure? Restore") { click_button "Restore" } - end + accept_confirm("Are you sure? Restore") { click_button "Restore" } expect(page).to have_content "There are no hidden comments" - visit admin_activity_path + visit admin_activity_path(filter: "on_comments") - within first("tbody tr") do - expect(page).to have_content(comment.body) - expect(page).to have_content("Restored") - expect(page).to have_content(admin.user.username) + within "tbody tr" do + expect(page).to have_content "Sample comment" + expect(page).to have_content "Restored" + expect(page).to have_content "Admin Smith" end end end context "User" do scenario "Shows moderation activity on users" do - proposal = create(:proposal, author: create(:user, username: "Sam")) + proposal = create(:proposal, author: create(:user, username: "Sam", email: "sam@example.com")) visit proposal_path(proposal) - within("#proposal_#{proposal.id}") do - accept_confirm("Are you sure? This will hide the user \"Sam\" and all their contents.") do - click_button "Block author" - end - - expect(page).to have_current_path(proposals_path) + accept_confirm('Are you sure? This will hide the user "Sam" and all their contents.') do + click_button "Block author" end - visit admin_activity_path + expect(page).to have_current_path proposals_path - within first("tbody tr") do + visit admin_activity_path(filter: "on_users") + + within "tbody tr" do expect(page).to have_content("Blocked") - expect(page).to have_content(proposal.author.username) - expect(page).to have_content(proposal.author.email) - expect(page).to have_content(admin.user.username) - expect(page).not_to have_content(proposal.title) + expect(page).to have_content "Sam" + expect(page).to have_content "sam@example.com" + expect(page).to have_content "Admin Smith" + expect(page).not_to have_content proposal.title end end scenario "Shows moderation activity from moderation screen" do - user = create(:user) + create(:user, username: "Sam", email: "sam@example.com") - visit moderation_users_path(search: user.username) + visit moderation_users_path(search: "Sam") - within("#moderation_users") do - accept_confirm { click_button "Block" } - end + accept_confirm { click_button "Block" } expect(page).to have_content "The user has been blocked" - visit admin_activity_path + visit admin_activity_path(filter: "on_users") - within first("tbody tr") do - expect(page).to have_content(user.username) - expect(page).to have_content(user.email) - expect(page).to have_content(admin.user.username) + within "tbody tr" do + expect(page).to have_content "Sam" + expect(page).to have_content "sam@example.com" + expect(page).to have_content "Admin Smith" end end scenario "Shows moderation activity from proposals moderation screen" do - proposal1 = create(:proposal) - proposal2 = create(:proposal) - proposal3 = create(:proposal) + proposal1 = create(:proposal, title: "Sample proposal 1") + proposal2 = create(:proposal, title: "Sample proposal 2") + proposal3 = create(:proposal, title: "Sample proposal 3") visit moderation_proposals_path(filter: "all") - within("#proposal_#{proposal1.id}") do - check "proposal_#{proposal1.id}_check" - end - - within("#proposal_#{proposal3.id}") do - check "proposal_#{proposal3.id}_check" - end + check "Sample proposal 1" + check "Sample proposal 3" accept_confirm("Are you sure? Block authors") { click_button "Block authors" } - expect(page).not_to have_content(proposal1.author.username) + expect(page).not_to have_content "Sample proposal 1" - visit admin_activity_path + visit admin_activity_path(filter: "on_users") - expect(page).to have_content(proposal1.author.username) - expect(page).to have_content(proposal1.author.email) - expect(page).to have_content(proposal3.author.username) - expect(page).to have_content(proposal3.author.email) - expect(page).not_to have_content(proposal2.author.username) + expect(page).to have_content proposal1.author.username + expect(page).to have_content proposal1.author.email + expect(page).to have_content proposal3.author.username + expect(page).to have_content proposal3.author.email + expect(page).not_to have_content proposal2.author.username end scenario "Shows moderation activity from debates moderation screen" do - debate1 = create(:debate) - debate2 = create(:debate) - debate3 = create(:debate) + debate1 = create(:debate, title: "Sample debate 1") + debate2 = create(:debate, title: "Sample debate 2") + debate3 = create(:debate, title: "Sample debate 3") visit moderation_debates_path(filter: "all") - within("#debate_#{debate1.id}") do - check "debate_#{debate1.id}_check" - end - - within("#debate_#{debate3.id}") do - check "debate_#{debate3.id}_check" - end + check "Sample debate 1" + check "Sample debate 3" accept_confirm("Are you sure? Block authors") { click_button "Block authors" } - expect(page).not_to have_content(debate1.author.username) + expect(page).not_to have_content debate1.author.username visit admin_activity_path - expect(page).to have_content(debate1.author.username) - expect(page).to have_content(debate1.author.email) - expect(page).to have_content(debate3.author.username) - expect(page).to have_content(debate3.author.email) - expect(page).not_to have_content(debate2.author.username) + expect(page).to have_content debate1.author.username + expect(page).to have_content debate1.author.email + expect(page).to have_content debate3.author.username + expect(page).to have_content debate3.author.email + expect(page).not_to have_content debate2.author.username end scenario "Shows moderation activity from comments moderation screen" do - comment1 = create(:comment, body: "SPAM") + comment1 = create(:comment) comment2 = create(:comment) - comment3 = create(:comment, body: "Offensive!") + comment3 = create(:comment) visit moderation_comments_path(filter: "all") - within("#comment_#{comment1.id}") do - check "comment_#{comment1.id}_check" - end - - within("#comment_#{comment3.id}") do - check "comment_#{comment3.id}_check" - end + check "comment_#{comment1.id}_check" + check "comment_#{comment3.id}_check" accept_confirm("Are you sure? Block authors") { click_button "Block authors" } @@ -332,31 +287,29 @@ describe "Admin activity" do visit admin_activity_path - expect(page).to have_content(comment1.author.username) - expect(page).to have_content(comment1.author.email) - expect(page).to have_content(comment3.author.username) - expect(page).to have_content(comment3.author.email) - expect(page).not_to have_content(comment2.author.username) + expect(page).to have_content comment1.author.username + expect(page).to have_content comment1.author.email + expect(page).to have_content comment3.author.username + expect(page).to have_content comment3.author.email + expect(page).not_to have_content comment2.author.username end scenario "Shows admin restores" do - user = create(:user, :hidden) + create(:user, :hidden, username: "Sam", email: "sam@example.com") visit admin_hidden_users_path - within("#user_#{user.id}") do - accept_confirm("Are you sure? Restore") { click_button "Restore" } - end + accept_confirm("Are you sure? Restore") { click_button "Restore" } expect(page).to have_content "There are no hidden users" - visit admin_activity_path + visit admin_activity_path(filter: "on_users") - within first("tbody tr") do - expect(page).to have_content(user.username) - expect(page).to have_content(user.email) - expect(page).to have_content("Restored") - expect(page).to have_content(admin.user.username) + within "tbody tr" do + expect(page).to have_content "Sam" + expect(page).to have_content "sam@example.com" + expect(page).to have_content "Restored" + expect(page).to have_content "Admin Smith" end end end @@ -369,12 +322,70 @@ describe "Admin activity" do body: "Proposal A Notification Body") proposal_notification.moderate_system_email(admin.user) - visit admin_activity_path + visit admin_activity_path(filter: "on_system_emails") - within first("tbody tr") do - expect(page).to have_content(proposal_notification.title) - expect(page).to have_content("Hidden") - expect(page).to have_content(admin.user.username) + within "tbody tr" do + expect(page).to have_content "Proposal A Title" + expect(page).to have_content "Hidden" + expect(page).to have_content "Admin Smith" + end + end + end + + context "Budget investments" do + scenario "Shows moderation activity on budget investments" do + investment = create(:budget_investment, title: "Sample investment") + + visit budget_investment_path(investment.budget, investment) + + accept_confirm('Are you sure? Hide "Sample investment"') { click_button "Hide" } + + expect(page).to have_css "#budget_investment_#{investment.id}.faded" + + visit admin_activity_path(filter: "on_budget_investments") + + within "tbody tr" do + expect(page).to have_content "Sample investment" + expect(page).to have_content "Hidden" + expect(page).to have_content "Admin Smith" + end + end + + scenario "Shows moderation activity from moderation screen" do + create(:budget_investment, title: "Sample investment 1") + create(:budget_investment, title: "Sample investment 2") + create(:budget_investment, title: "Sample investment 3") + + visit moderation_budget_investments_path(filter: "all") + + check "Sample investment 1" + check "Sample investment 3" + accept_confirm("Are you sure? Hide budget investments") { click_button "Hide budget investments" } + + expect(page).not_to have_content "Sample investment 1" + + visit admin_activity_path(filter: "on_budget_investments") + + expect(page).to have_content "Sample investment 1" + expect(page).not_to have_content "Sample investment 2" + expect(page).to have_content "Sample investment 3" + end + + scenario "Shows admin restores" do + create(:budget_investment, :hidden, title: "Sample investment") + + visit admin_hidden_budget_investments_path + + accept_confirm("Are you sure? Restore") { click_button "Restore" } + + expect(page).to have_content "There are no hidden budget investments" + + visit admin_activity_path(filter: "on_budget_investments") + + within "tbody tr" do + expect(page).to have_content "Sample investment" + expect(page).to have_content "Restored" + expect(page).to have_content "Admin Smith" end end end