Files
grecia/spec/factories/budgets.rb
Senén Rodero Rodríguez 326a8a769b Use consistent coordinates in tests
When we create a budget heading through factories it's placed at Puerta del Sol,
Madrid. It seems reasonable that the `map_location` factory places the points near
there.

Before these changes sometimes the map center was placed in Madrid while map
locations were placed in Greenwich, therefore markers were not visible in the
map current pane.
2024-01-25 18:30:28 +01:00

296 lines
7.1 KiB
Ruby

FactoryBot.define do
factory :budget do
sequence(:name) { |n| "#{Faker::Lorem.word} #{n}" }
currency_symbol { "" }
published { true }
phase { "accepting" }
description_drafting { "This budget is drafting" }
description_informing { "This budget is informing" }
description_accepting { "This budget is accepting" }
description_reviewing { "This budget is reviewing" }
description_selecting { "This budget is selecting" }
description_valuating { "This budget is valuating" }
description_publishing_prices { "This budget is publishing prices" }
description_balloting { "This budget is balloting" }
description_reviewing_ballots { "This budget is reviewing ballots" }
description_finished { "This budget is finished" }
trait :drafting do
published { false }
end
trait :informing do
phase { "informing" }
end
trait :accepting do
phase { "accepting" }
end
trait :reviewing do
phase { "reviewing" }
end
trait :selecting do
phase { "selecting" }
end
trait :valuating do
phase { "valuating" }
end
trait :publishing_prices do
phase { "publishing_prices" }
end
trait :balloting do
phase { "balloting" }
end
trait :reviewing_ballots do
phase { "reviewing_ballots" }
end
trait :finished do
phase { "finished" }
results_enabled { true }
stats_enabled { true }
end
trait :knapsack do
voting_style { "knapsack" }
end
trait :approval do
voting_style { "approval" }
end
trait :with_image do
after(:create) { |budget| create(:image, imageable: budget) }
end
trait :with_winner do
after(:create) { |budget| create(:budget_investment, :winner, budget: budget) }
end
trait :hide_money do
hide_money { true }
end
end
factory :budget_group, class: "Budget::Group" do
budget
sequence(:name) { |n| "Group #{n}" }
trait :drafting_budget do
budget factory: [:budget, :drafting]
end
end
factory :budget_heading, class: "Budget::Heading" do
sequence(:name) { |n| "Heading #{n}" }
price { 1000000 }
population { 1234 }
latitude { Setting["map.latitude"] }
longitude { Setting["map.longitude"] }
transient { budget { nil } }
group { association :budget_group, budget: budget || association(:budget) }
trait :drafting_budget do
group factory: [:budget_group, :drafting_budget]
end
trait :with_investment_with_milestone do
after(:create) do |heading|
investment = create(:budget_investment, :winner, heading: heading)
create(:milestone, milestoneable: investment)
end
end
end
factory :budget_investment, class: "Budget::Investment" do
sequence(:title) { |n| "Budget Investment #{n} title" }
heading { budget&.headings&.reload&.sample || association(:budget_heading, budget: budget) }
author factory: :user
description { "Spend money on this" }
price { 10 }
unfeasibility_explanation { "" }
terms_of_service { "1" }
incompatible { false }
trait :with_confidence_score do
before(:save, &:calculate_confidence_score)
end
trait :feasible do
feasibility { "feasible" }
end
trait :unfeasible do
feasibility { "unfeasible" }
unfeasibility_explanation { "set to unfeasible on creation" }
end
trait :undecided do
feasibility { "undecided" }
end
trait :finished do
valuation_finished { true }
end
trait :open do
valuation_finished { false }
end
trait :selected do
selected { true }
feasibility { "feasible" }
valuation_finished { true }
end
trait :winner do
selected
winner { true }
end
trait :visible_to_valuators do
visible_to_valuators { true }
end
trait :invisible_to_valuators do
visible_to_valuators { false }
end
trait :incompatible do
selected
incompatible { true }
end
trait :selected_with_price do
selected
price { 1000 }
price_explanation { "Because of reasons" }
end
trait :unselected do
selected { false }
feasibility { "feasible" }
valuation_finished { true }
end
trait :hidden do
hidden_at { Time.current }
end
trait :with_ignored_flag do
ignored_flag_at { Time.current }
end
trait :with_administrator do
administrator
end
trait :with_valuator do
valuators { [create(:valuator)] }
end
trait :with_map_location do
map_location do
association :map_location,
longitude: heading.longitude.to_f + rand(-0.0001..0.0001),
latitude: heading.latitude.to_f + rand(-0.0001..0.0001)
end
end
trait :flagged do
after :create do |investment|
Flag.flag(create(:user), investment)
end
end
trait :with_confirmed_hide do
confirmed_hide_at { Time.current }
end
trait :with_milestone_tags do
after(:create) { |investment| investment.milestone_tags << create(:tag, :milestone) }
end
trait :with_image do
after(:create) { |investment| create(:image, imageable: investment) }
end
transient do
voters { [] }
followers { [] }
ballots { [] }
balloters { [] }
end
after(:create) do |investment, evaluator|
evaluator.voters.each { |voter| create(:vote, votable: investment, voter: voter) }
evaluator.followers.each { |follower| create(:follow, followable: investment, user: follower) }
evaluator.ballots.each do |ballot|
create(:budget_ballot_line, investment: investment, ballot: ballot)
end
evaluator.balloters.each do |balloter|
create(:budget_ballot_line, investment: investment, user: balloter)
end
end
end
factory :budget_phase, class: "Budget::Phase" do
budget
kind { :balloting }
summary { Faker::Lorem.sentence(word_count: 3) }
description { Faker::Lorem.sentence(word_count: 10) }
starts_at { Date.yesterday }
ends_at { Date.tomorrow }
enabled { true }
end
factory :budget_ballot, class: "Budget::Ballot" do
user
budget
transient { investments { [] } }
after(:create) do |ballot, evaluator|
evaluator.investments.each do |investment|
create(:budget_ballot_line, investment: investment, ballot: ballot)
end
end
end
factory :budget_ballot_line, class: "Budget::Ballot::Line" do
investment factory: :budget_investment
transient { user { nil } }
ballot do
association :budget_ballot, budget: investment.budget.reload, user: user || association(:user)
end
end
factory :budget_reclassified_vote, class: "Budget::ReclassifiedVote" do
user
investment factory: :budget_investment
reason { "unfeasible" }
end
factory :valuator_group, class: "ValuatorGroup" do
sequence(:name) { |n| "Valuator Group #{n}" }
end
factory :heading_content_block, class: "Budget::ContentBlock" do
heading factory: :budget_heading
locale { "en" }
body { "Some heading contents" }
end
end