This fixes a validation error being raised in these specs, as we were missing some attributes that are required. Using the factory trait the missing attributes are correctly filled out.
227 lines
8.8 KiB
Ruby
227 lines
8.8 KiB
Ruby
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 enabled" do
|
|
active_user = create(:user)
|
|
erased_user = create(:user, erased_at: Time.current)
|
|
|
|
expect(described_class.all_users).to include active_user
|
|
expect(described_class.all_users).not_to include erased_user
|
|
end
|
|
end
|
|
|
|
describe "#administrators" do
|
|
it "returns all active administrators users" do
|
|
active_user = create(:user)
|
|
active_admin = create(:administrator).user
|
|
erased_user = create(:user, erased_at: Time.current)
|
|
|
|
expect(described_class.administrators).to include active_admin
|
|
expect(described_class.administrators).not_to include active_user
|
|
expect(described_class.administrators).not_to include erased_user
|
|
end
|
|
end
|
|
|
|
describe "#all_proposal_authors" do
|
|
it "returns users that have created a proposal even if is archived or retired" do
|
|
create(:proposal, author: user1)
|
|
create(:proposal, :archived, author: user2)
|
|
create(:proposal, :retired, author: user3)
|
|
|
|
all_proposal_authors = described_class.all_proposal_authors
|
|
expect(all_proposal_authors).to include user1
|
|
expect(all_proposal_authors).to include user2
|
|
expect(all_proposal_authors).to include user3
|
|
end
|
|
|
|
it "does not return duplicated users" do
|
|
create(:proposal, author: user1)
|
|
create(:proposal, :archived, author: user1)
|
|
create(:proposal, :retired, author: user1)
|
|
|
|
all_proposal_authors = described_class.all_proposal_authors
|
|
expect(all_proposal_authors).to contain_exactly(user1)
|
|
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
|
|
user4 = create(:user)
|
|
user5 = create(:user)
|
|
user6 = create(:user)
|
|
|
|
feasible_investment_finished = create(:budget_investment, :feasible, :finished, author: user1)
|
|
undecided_investment_finished = create(:budget_investment, :undecided, :finished, author: user2)
|
|
feasible_investment_unfinished = create(:budget_investment, :feasible, author: user3)
|
|
undecided_investment_unfinished = create(:budget_investment, :undecided, author: user4)
|
|
unfeasible_investment_unfinished = create(:budget_investment, :unfeasible, author: user5)
|
|
unfeasible_investment_finished = create(:budget_investment, :unfeasible, :finished, author: user6)
|
|
|
|
budget = create(:budget)
|
|
feasible_investment_finished.update(budget: budget)
|
|
undecided_investment_finished.update(budget: budget)
|
|
feasible_investment_unfinished.update(budget: budget)
|
|
undecided_investment_unfinished.update(budget: budget)
|
|
unfeasible_investment_unfinished.update(budget: budget)
|
|
unfeasible_investment_finished.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).to include user3
|
|
expect(investment_authors).to include user4
|
|
expect(investment_authors).to include user5
|
|
expect(investment_authors).not_to include user6
|
|
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
|
|
|
|
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
|
|
|
|
describe "#user_segment_emails" do
|
|
it "returns list of emails sorted by user creation date" do
|
|
create(:user, email: "first@email.com", created_at: 1.day.ago)
|
|
create(:user, email: "last@email.com")
|
|
|
|
emails = described_class.user_segment_emails(:all_users)
|
|
expect(emails.first).to eq "first@email.com"
|
|
expect(emails.last).to eq "last@email.com"
|
|
end
|
|
end
|
|
|
|
end
|