Add Segment for users without supports on Budget

Created not_supported_on_current_budget at UserSegment along with model
spec scenario and translation strings.
This commit is contained in:
Bertocq
2018-03-15 13:58:44 +01:00
parent bc03aee84d
commit 2ecbfc76e0
4 changed files with 33 additions and 1 deletions

View File

@@ -524,6 +524,7 @@ en:
feasible_and_undecided_investment_authors: "Authors of some investment in the current budget that does not comply with: [valuation finished unfesasible]"
selected_investment_authors: Authors of selected investments in the current budget
winner_investment_authors: Authors of winner investments in the current budget
not_supported_on_current_budget: Users that haven't supported investments on current budget
invalid_recipients_segment: "Recipients user segment is invalid"
newsletters:
create_success: Newsletter created successfully

View File

@@ -523,6 +523,7 @@ es:
feasible_and_undecided_investment_authors: "Usuarios autores de algún proyecto de gasto en los actuales presupuestos que no cumpla: [evaluación finalizada inviable]"
selected_investment_authors: Usuarios autores de proyectos de gasto seleccionadas en los actuales presupuestos
winner_investment_authors: Usuarios autores de proyectos de gasto ganadoras en los actuales presupuestos
not_supported_on_current_budget: Usuarios que no han apoyado proyectos de los actuales presupuestos
invalid_recipients_segment: "El segmento de destinatarios es inválido"
newsletters:
create_success: Newsletter creada correctamente

View File

@@ -5,7 +5,8 @@ class UserSegments
investment_authors
feasible_and_undecided_investment_authors
selected_investment_authors
winner_investment_authors)
winner_investment_authors
not_supported_on_current_budget)
def self.all_users
User.active
@@ -37,6 +38,17 @@ class UserSegments
author_ids(current_budget_investments.winners.pluck(:author_id).uniq)
end
def self.not_supported_on_current_budget
author_ids(
User.where(
'id NOT IN (SELECT DISTINCT(voter_id) FROM votes'\
' WHERE votable_type = ? AND votes.votable_id IN (?))',
'Budget::Investment',
current_budget_investments.pluck(:id)
)
)
end
def self.user_segment_emails(users_segment)
UserSegments.send(users_segment).newsletter.pluck(:email).compact
end

View File

@@ -172,4 +172,22 @@ describe UserSegments do
expect(current_budget_investments).not_to include investment2
end
end
describe "#not_supported_on_current_budget" do
it "only returns users that haven't supported investments on current budget" do
investment1 = create(:budget_investment)
investment2 = create(:budget_investment)
budget = create(:budget)
investment1.vote_by(voter: user1, vote: 'yes')
investment2.vote_by(voter: user2, vote: 'yes')
investment1.update(budget: budget)
investment2.update(budget: budget)
not_supported_on_current_budget = described_class.not_supported_on_current_budget
expect(not_supported_on_current_budget).to include user3
expect(not_supported_on_current_budget).not_to include user1
expect(not_supported_on_current_budget).not_to include user2
end
end
end