Allow detect new actions since a custom date

- Rename method "detect_new_actions" to "detect_new_actions_since". Add new param date.
This commit is contained in:
taitus
2019-03-13 23:27:18 +01:00
parent b115c3af49
commit 8b1c458fdf
4 changed files with 25 additions and 25 deletions

View File

@@ -89,14 +89,14 @@ class Dashboard::Action < ActiveRecord::Base
course_for(proposal).first course_for(proposal).first
end 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_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_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 end
private private
@@ -107,9 +107,9 @@ class Dashboard::Action < ActiveRecord::Base
calculate_actions(proposal_votes, day_offset, proposal) calculate_actions(proposal_votes, day_offset, proposal)
end end
def self.get_actions_for_yesterday(proposal) def self.get_actions_for_date(proposal, date)
proposal_votes = calculate_votes(proposal) proposal_votes = calculate_votes(proposal, date)
day_offset = calculate_day_offset(proposal, Date.yesterday) day_offset = calculate_day_offset(proposal, date)
calculate_actions(proposal_votes, day_offset, proposal) calculate_actions(proposal_votes, day_offset, proposal)
end end
@@ -125,7 +125,7 @@ class Dashboard::Action < ActiveRecord::Base
.by_published_proposal(proposal.published?) .by_published_proposal(proposal.published?)
end end
def self.calculate_votes(proposal) def self.calculate_votes(proposal, date)
Vote.where(votable: proposal).where("created_at <= ?", Date.yesterday).count Vote.where(votable: proposal).where("created_at <= ?", date).count
end end
end end

View File

@@ -240,7 +240,7 @@ class Proposal < ActiveRecord::Base
end end
def send_new_actions_notification_on_create 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? if new_actions.present?
Dashboard::Mailer.new_actions_notification_on_create(self).deliver_later Dashboard::Mailer.new_actions_notification_on_create(self).deliver_later
@@ -248,7 +248,7 @@ class Proposal < ActiveRecord::Base
end end
def send_new_actions_notification_on_published 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? if new_actions_ids.present?
Dashboard::Mailer.new_actions_notification_on_published(self, new_actions_ids).deliver_later Dashboard::Mailer.new_actions_notification_on_published(self, new_actions_ids).deliver_later

View File

@@ -3,7 +3,7 @@ namespace :dashboards do
desc "Send to user notifications from new actions availability on dashboard" desc "Send to user notifications from new actions availability on dashboard"
task send_notifications: :environment do task send_notifications: :environment do
Proposal.not_archived.each do |proposal| 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 new_actions_ids.present?
if proposal.published? if proposal.published?

View File

@@ -225,7 +225,7 @@ describe Dashboard::Action do
end end
end end
context "#detect_new_actions" do context "#detect_new_actions_since" do
describe "No detect new actions" do describe "No detect new actions" do
@@ -237,7 +237,7 @@ describe Dashboard::Action do
action.update(published_proposal: true) action.update(published_proposal: true)
resource.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 end
it "when there are news actions actived for draft_proposal but proposal is published" do 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) action.update(published_proposal: false, day_offset: 0)
resource.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 end
it "when there are not news actions actived for draft proposals" do 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) action.update(published_proposal: false)
resource.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 end
it "when there are news actions actived for published_proposal but proposal is draft" do 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) action.update(published_proposal: true, day_offset: 0)
resource.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
end end
@@ -275,8 +275,8 @@ describe Dashboard::Action do
let!(:resource) { create(:dashboard_action, :resource, :active, day_offset: 0, published_proposal: true) } 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 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_since(Date.yesterday, 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(action.id)
end end
it "when proposal has received a new vote today" do it "when proposal has received a new vote today" do
@@ -285,8 +285,8 @@ describe Dashboard::Action do
resource.update(required_supports: 0) resource.update(required_supports: 0)
create(:vote, voter: proposal.author, votable: proposal) create(:vote, voter: proposal.author, votable: proposal)
expect(described_class.detect_new_actions(proposal)).to include(action.id) expect(described_class.detect_new_actions_since(Date.yesterday, 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)).not_to include(resource.id)
end end
end end
@@ -298,8 +298,8 @@ describe Dashboard::Action do
let!(:resource) { create(:dashboard_action, :resource, :active, day_offset: 0, published_proposal: false) } 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 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_since(Date.yesterday, 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(action.id)
end end
it "when proposal has received a new vote today" do it "when proposal has received a new vote today" do
@@ -308,8 +308,8 @@ describe Dashboard::Action do
resource.update(required_supports: 2) resource.update(required_supports: 2)
create(:vote, voter: proposal.author, votable: proposal) create(:vote, voter: proposal.author, votable: proposal)
expect(described_class.detect_new_actions(proposal)).to include(action.id) expect(described_class.detect_new_actions_since(Date.yesterday, 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)).not_to include(resource.id)
end end
end end