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
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

View File

@@ -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

View File

@@ -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?

View File

@@ -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