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