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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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?
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user