Added newsletter specs
This commit is contained in:
153
spec/lib/user_segments_spec.rb
Normal file
153
spec/lib/user_segments_spec.rb
Normal file
@@ -0,0 +1,153 @@
|
||||
require 'rails_helper'
|
||||
|
||||
describe UserSegments do
|
||||
let(:user1) { create(:user) }
|
||||
let(:user2) { create(:user) }
|
||||
let(:user3) { create(:user) }
|
||||
|
||||
describe "#all_users" do
|
||||
it "returns all active users with newsletter enabled" do
|
||||
active_user1 = create(:user, newsletter: true)
|
||||
active_user2 = create(:user, newsletter: true)
|
||||
active_user3 = create(:user, newsletter: false)
|
||||
erased_user = create(:user, erased_at: Time.current)
|
||||
|
||||
expect(described_class.all_users).to include active_user1
|
||||
expect(described_class.all_users).to include active_user2
|
||||
expect(described_class.all_users).not_to include active_user3
|
||||
expect(described_class.all_users).not_to include erased_user
|
||||
end
|
||||
end
|
||||
|
||||
describe "#proposal_authors" do
|
||||
it "returns users that have created a proposal" do
|
||||
proposal = create(:proposal, author: user1)
|
||||
|
||||
proposal_authors = described_class.proposal_authors
|
||||
expect(proposal_authors).to include user1
|
||||
expect(proposal_authors).not_to include user2
|
||||
end
|
||||
|
||||
it "does not return duplicated users" do
|
||||
proposal1 = create(:proposal, author: user1)
|
||||
proposal2 = create(:proposal, author: user1)
|
||||
|
||||
proposal_authors = described_class.proposal_authors
|
||||
expect(proposal_authors).to contain_exactly(user1)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#investment_authors" do
|
||||
it "returns users that have created a budget investment" do
|
||||
investment = create(:budget_investment, author: user1)
|
||||
budget = create(:budget)
|
||||
investment.update(budget: budget)
|
||||
|
||||
investment_authors = described_class.investment_authors
|
||||
expect(investment_authors).to include user1
|
||||
expect(investment_authors).not_to include user2
|
||||
end
|
||||
|
||||
it "does not return duplicated users" do
|
||||
investment1 = create(:budget_investment, author: user1)
|
||||
investment2 = create(:budget_investment, author: user1)
|
||||
budget = create(:budget)
|
||||
investment1.update(budget: budget)
|
||||
investment2.update(budget: budget)
|
||||
|
||||
investment_authors = described_class.investment_authors
|
||||
expect(investment_authors).to contain_exactly(user1)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#feasible_and_undecided_investment_authors" do
|
||||
it "returns authors of a feasible or an undecided budget investment" do
|
||||
feasible_investment = create(:budget_investment, :feasible, author: user1)
|
||||
undecided_investment = create(:budget_investment, :undecided, author: user2)
|
||||
unfeasible_investment = create(:budget_investment, :unfeasible, author: user3)
|
||||
budget = create(:budget)
|
||||
feasible_investment.update(budget: budget)
|
||||
undecided_investment.update(budget: budget)
|
||||
unfeasible_investment.update(budget: budget)
|
||||
|
||||
investment_authors = described_class.feasible_and_undecided_investment_authors
|
||||
expect(investment_authors).to include user1
|
||||
expect(investment_authors).to include user2
|
||||
expect(investment_authors).not_to include user3
|
||||
end
|
||||
|
||||
it "does not return duplicated users" do
|
||||
feasible_investment = create(:budget_investment, :feasible, author: user1)
|
||||
undecided_investment = create(:budget_investment, :undecided, author: user1)
|
||||
budget = create(:budget)
|
||||
feasible_investment.update(budget: budget)
|
||||
undecided_investment.update(budget: budget)
|
||||
|
||||
investment_authors = described_class.feasible_and_undecided_investment_authors
|
||||
expect(investment_authors).to contain_exactly(user1)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#selected_investment_authors" do
|
||||
it "returns authors of selected budget investments" do
|
||||
selected_investment = create(:budget_investment, :selected, author: user1)
|
||||
unselected_investment = create(:budget_investment, :unselected, author: user2)
|
||||
budget = create(:budget)
|
||||
selected_investment.update(budget: budget)
|
||||
unselected_investment.update(budget: budget)
|
||||
|
||||
investment_authors = described_class.selected_investment_authors
|
||||
expect(investment_authors).to include user1
|
||||
expect(investment_authors).not_to include user2
|
||||
end
|
||||
|
||||
it "does not return duplicated users" do
|
||||
selected_investment1 = create(:budget_investment, :selected, author: user1)
|
||||
selected_investment2 = create(:budget_investment, :selected, author: user1)
|
||||
budget = create(:budget)
|
||||
selected_investment1.update(budget: budget)
|
||||
selected_investment2.update(budget: budget)
|
||||
|
||||
investment_authors = described_class.selected_investment_authors
|
||||
expect(investment_authors).to contain_exactly(user1)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#winner_investment_authors" do
|
||||
it "returns authors of winner budget investments" do
|
||||
winner_investment = create(:budget_investment, :winner, author: user1)
|
||||
selected_investment = create(:budget_investment, :selected, author: user2)
|
||||
budget = create(:budget)
|
||||
winner_investment.update(budget: budget)
|
||||
selected_investment.update(budget: budget)
|
||||
|
||||
investment_authors = described_class.winner_investment_authors
|
||||
expect(investment_authors).to include user1
|
||||
expect(investment_authors).not_to include user2
|
||||
end
|
||||
|
||||
it "does not return duplicated users" do
|
||||
winner_investment1 = create(:budget_investment, :winner, author: user1)
|
||||
winner_investment2 = create(:budget_investment, :winner, author: user1)
|
||||
budget = create(:budget)
|
||||
winner_investment1.update(budget: budget)
|
||||
winner_investment2.update(budget: budget)
|
||||
|
||||
investment_authors = described_class.winner_investment_authors
|
||||
expect(investment_authors).to contain_exactly(user1)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#current_budget_investments" do
|
||||
it "only returns investments from the current budget" do
|
||||
investment1 = create(:budget_investment, author: create(:user))
|
||||
investment2 = create(:budget_investment, author: create(:user))
|
||||
budget = create(:budget)
|
||||
investment1.update(budget: budget)
|
||||
|
||||
current_budget_investments = described_class.current_budget_investments
|
||||
expect(current_budget_investments).to include investment1
|
||||
expect(current_budget_investments).not_to include investment2
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user