diff --git a/app/models/dashboard/action.rb b/app/models/dashboard/action.rb index e88c5a714..b4a450b8f 100644 --- a/app/models/dashboard/action.rb +++ b/app/models/dashboard/action.rb @@ -89,14 +89,14 @@ class Dashboard::Action < ActiveRecord::Base course_for(proposal).first end - def self.detect_new_actions(proposal) + def self.detect_new_actions_since(date, proposal) actions_for_today = get_actions_for_today(proposal) - actions_for_yesterday = get_actions_for_yesterday(proposal) + actions_for_date = get_actions_for_date(proposal, date) actions_for_today_ids = actions_for_today.pluck(:id) - actions_for_yesterday_ids = actions_for_yesterday.pluck(:id) + actions_for_date_ids = actions_for_date.pluck(:id) - actions_for_today_ids - actions_for_yesterday_ids + actions_for_today_ids - actions_for_date_ids end private @@ -107,9 +107,9 @@ class Dashboard::Action < ActiveRecord::Base calculate_actions(proposal_votes, day_offset, proposal) end - def self.get_actions_for_yesterday(proposal) - proposal_votes = calculate_votes(proposal) - day_offset = calculate_day_offset(proposal, Date.yesterday) + def self.get_actions_for_date(proposal, date) + proposal_votes = calculate_votes(proposal, date) + day_offset = calculate_day_offset(proposal, date) calculate_actions(proposal_votes, day_offset, proposal) end @@ -125,7 +125,7 @@ class Dashboard::Action < ActiveRecord::Base .by_published_proposal(proposal.published?) end - def self.calculate_votes(proposal) - Vote.where(votable: proposal).where("created_at <= ?", Date.yesterday).count + def self.calculate_votes(proposal, date) + Vote.where(votable: proposal).where("created_at <= ?", date).count end end diff --git a/app/models/proposal.rb b/app/models/proposal.rb index 07723ea97..95473ed15 100644 --- a/app/models/proposal.rb +++ b/app/models/proposal.rb @@ -240,7 +240,7 @@ class Proposal < ActiveRecord::Base end def send_new_actions_notification_on_create - new_actions = Dashboard::Action.detect_new_actions(self) + new_actions = Dashboard::Action.detect_new_actions_since(Date.yesterday, self) if new_actions.present? Dashboard::Mailer.new_actions_notification_on_create(self).deliver_later @@ -248,7 +248,7 @@ class Proposal < ActiveRecord::Base end def send_new_actions_notification_on_published - new_actions_ids = Dashboard::Action.detect_new_actions(self) + new_actions_ids = Dashboard::Action.detect_new_actions_since(Date.yesterday, self) if new_actions_ids.present? Dashboard::Mailer.new_actions_notification_on_published(self, new_actions_ids).deliver_later diff --git a/lib/tasks/dashboards.rake b/lib/tasks/dashboards.rake index 8ec07f1f9..5e5264f01 100644 --- a/lib/tasks/dashboards.rake +++ b/lib/tasks/dashboards.rake @@ -3,7 +3,7 @@ namespace :dashboards do desc "Send to user notifications from new actions availability on dashboard" task send_notifications: :environment do Proposal.not_archived.each do |proposal| - new_actions_ids = Dashboard::Action.detect_new_actions(proposal) + new_actions_ids = Dashboard::Action.detect_new_actions_since(Date.yesterday, proposal) if new_actions_ids.present? if proposal.published? diff --git a/spec/models/dashboard/action_spec.rb b/spec/models/dashboard/action_spec.rb index bf9a85110..3d92cae79 100644 --- a/spec/models/dashboard/action_spec.rb +++ b/spec/models/dashboard/action_spec.rb @@ -225,7 +225,7 @@ describe Dashboard::Action do end end - context "#detect_new_actions" do + context "#detect_new_actions_since" do describe "No detect new actions" do @@ -237,7 +237,7 @@ describe Dashboard::Action do action.update(published_proposal: true) resource.update(published_proposal: true) - expect(described_class.detect_new_actions(proposal)).to eq [] + expect(described_class.detect_new_actions_since(Date.yesterday, proposal)).to eq [] end it "when there are news actions actived for draft_proposal but proposal is published" do @@ -245,7 +245,7 @@ describe Dashboard::Action do action.update(published_proposal: false, day_offset: 0) resource.update(published_proposal: false, day_offset: 0) - expect(described_class.detect_new_actions(proposal)).to eq [] + expect(described_class.detect_new_actions_since(Date.yesterday, proposal)).to eq [] end it "when there are not news actions actived for draft proposals" do @@ -253,7 +253,7 @@ describe Dashboard::Action do action.update(published_proposal: false) resource.update(published_proposal: false) - expect(described_class.detect_new_actions(proposal)).to eq [] + expect(described_class.detect_new_actions_since(Date.yesterday, proposal)).to eq [] end it "when there are news actions actived for published_proposal but proposal is draft" do @@ -261,7 +261,7 @@ describe Dashboard::Action do action.update(published_proposal: true, day_offset: 0) resource.update(published_proposal: true, day_offset: 0) - expect(described_class.detect_new_actions(proposal)).to eq [] + expect(described_class.detect_new_actions_since(Date.yesterday, proposal)).to eq [] end end @@ -275,8 +275,8 @@ describe Dashboard::Action do let!(:resource) { create(:dashboard_action, :resource, :active, day_offset: 0, published_proposal: true) } it "when proposal has been created today and day_offset is valid only for today" do - expect(described_class.detect_new_actions(proposal)).to include(resource.id) - expect(described_class.detect_new_actions(proposal)).to include(action.id) + expect(described_class.detect_new_actions_since(Date.yesterday, proposal)).to include(resource.id) + expect(described_class.detect_new_actions_since(Date.yesterday, proposal)).to include(action.id) end it "when proposal has received a new vote today" do @@ -285,8 +285,8 @@ describe Dashboard::Action do resource.update(required_supports: 0) create(:vote, voter: proposal.author, votable: proposal) - expect(described_class.detect_new_actions(proposal)).to include(action.id) - expect(described_class.detect_new_actions(proposal)).not_to include(resource.id) + expect(described_class.detect_new_actions_since(Date.yesterday, proposal)).to include(action.id) + expect(described_class.detect_new_actions_since(Date.yesterday, proposal)).not_to include(resource.id) end end @@ -298,8 +298,8 @@ describe Dashboard::Action do let!(:resource) { create(:dashboard_action, :resource, :active, day_offset: 0, published_proposal: false) } it "when day_offset field is valid for today and invalid for yesterday" do - expect(described_class.detect_new_actions(proposal)).to include(resource.id) - expect(described_class.detect_new_actions(proposal)).to include(action.id) + expect(described_class.detect_new_actions_since(Date.yesterday, proposal)).to include(resource.id) + expect(described_class.detect_new_actions_since(Date.yesterday, proposal)).to include(action.id) end it "when proposal has received a new vote today" do @@ -308,8 +308,8 @@ describe Dashboard::Action do resource.update(required_supports: 2) create(:vote, voter: proposal.author, votable: proposal) - expect(described_class.detect_new_actions(proposal)).to include(action.id) - expect(described_class.detect_new_actions(proposal)).not_to include(resource.id) + expect(described_class.detect_new_actions_since(Date.yesterday, proposal)).to include(action.id) + expect(described_class.detect_new_actions_since(Date.yesterday, proposal)).not_to include(resource.id) end end