Files
grecia/db/dev_seeds/polls.rb
2018-09-21 20:51:13 +02:00

256 lines
8.8 KiB
Ruby

section "Creating polls" do
Poll.create(name: I18n.t('seeds.polls.current_poll'),
starts_at: 7.days.ago,
ends_at: 7.days.from_now,
geozone_restricted: false)
Poll.create(name: I18n.t('seeds.polls.current_poll_geozone_restricted'),
starts_at: 5.days.ago,
ends_at: 5.days.from_now,
geozone_restricted: true,
geozones: Geozone.reorder("RANDOM()").limit(3))
Poll.create(name: I18n.t('seeds.polls.incoming_poll'),
starts_at: 1.month.from_now,
ends_at: 2.months.from_now)
Poll.create(name: I18n.t('seeds.polls.recounting_poll'),
starts_at: 15.days.ago,
ends_at: 2.days.ago)
Poll.create(name: I18n.t('seeds.polls.expired_poll_without_stats'),
starts_at: 2.months.ago,
ends_at: 1.month.ago)
Poll.create(name: I18n.t('seeds.polls.expired_poll_with_stats'),
starts_at: 2.months.ago,
ends_at: 1.month.ago,
results_enabled: true,
stats_enabled: true)
Poll.find_each do |poll|
name = poll.name
I18n.available_locales.map do |locale|
Globalize.with_locale(locale) do
poll.name = "#{name} (#{locale})"
poll.summary = "Summary for locale #{locale}"
poll.description = "Description for locale #{locale}"
end
end
poll.save!
end
end
section "Creating Poll Questions & Answers" do
Poll.find_each do |poll|
(1..4).to_a.sample.times do
title = Faker::Lorem.sentence(3).truncate(60) + '?'
question = Poll::Question.new(author: User.all.sample,
title: title,
poll: poll)
I18n.available_locales.map do |locale|
Globalize.with_locale(locale) do
question.title = "#{title} (#{locale})"
end
end
question.save!
Faker::Lorem.words((2..4).to_a.sample).each do |title|
description = "<p>#{Faker::Lorem.paragraphs.join('</p><p>')}</p>"
answer = Poll::Question::Answer.new(question: question,
title: title.capitalize,
description: description)
I18n.available_locales.map do |locale|
Globalize.with_locale(locale) do
answer.title = "#{title} (#{locale})"
answer.description = "#{description} (#{locale})"
end
end
answer.save!
end
end
end
end
section "Creating Poll Booths & BoothAssignments" do
20.times do |i|
Poll::Booth.create(name: "Booth #{i}",
location: Faker::Address.street_address,
polls: [Poll.all.sample])
end
end
section "Creating Poll Shifts for Poll Officers" do
Poll.find_each do |poll|
Poll::BoothAssignment.where(poll: poll).each do |booth_assignment|
scrutiny = (poll.ends_at.to_datetime..poll.ends_at.to_datetime + Poll::RECOUNT_DURATION)
Poll::Officer.find_each do |poll_officer|
{
vote_collection: (poll.starts_at.to_datetime..poll.ends_at.to_datetime),
recount_scrutiny: scrutiny
}.each do |task_name, task_dates|
task_dates.each do |shift_date|
Poll::Shift.create(booth: booth_assignment.booth,
officer: poll_officer,
date: shift_date,
officer_name: poll_officer.name,
officer_email: poll_officer.email,
task: task_name)
end
end
end
end
end
end
section "Commenting Polls" do
30.times do
author = User.all.sample
poll = Poll.all.sample
Comment.create!(user: author,
created_at: rand(poll.created_at..Time.current),
commentable: poll,
body: Faker::Lorem.sentence)
end
end
section "Creating Poll Voters" do
def vote_poll_on_booth(user, poll)
Poll::Voter.create!(document_type: user.document_type,
document_number: user.document_number,
user: user,
poll: poll,
origin: 'booth',
officer: Poll::Officer.all.sample)
end
def vote_poll_on_web(user, poll)
randomly_answer_questions(poll, user)
Poll::Voter.create!(document_type: user.document_type,
document_number: user.document_number,
user: user,
poll: poll,
origin: 'web',
token: SecureRandom.hex(32))
end
def randomly_answer_questions(poll, user)
poll.questions.each do |question|
next unless [true, false].sample
Poll::Answer.create!(question_id: question.id,
author: user,
answer: question.question_answers.sample.title)
end
end
(Poll.expired + Poll.current + Poll.recounting).uniq.each do |poll|
level_two_verified_users = User.level_two_verified
if poll.geozone_restricted?
level_two_verified_users = level_two_verified_users.where(geozone_id: poll.geozone_ids)
end
user_groups = level_two_verified_users.in_groups(2)
user_groups.first.each { |user| vote_poll_on_booth(user, poll) }
user_groups.second.compact.each { |user| vote_poll_on_web(user, poll) }
end
end
section "Creating Poll Recounts" do
Poll.find_each do |poll|
poll.booth_assignments.each do |booth_assignment|
officer_assignment = poll.officer_assignments.first
author = Poll::Officer.first.user
Poll::Recount.create!(officer_assignment: officer_assignment,
booth_assignment: booth_assignment,
author: author,
date: poll.ends_at,
white_amount: rand(0..10),
null_amount: rand(0..10),
total_amount: rand(100..9999),
origin: "booth")
end
end
end
section "Creating Poll Results" do
Poll.find_each do |poll|
poll.booth_assignments.each do |booth_assignment|
officer_assignment = poll.officer_assignments.first
author = Poll::Officer.first.user
poll.questions.each do |question|
question.question_answers.each do |answer|
Poll::PartialResult.create!(officer_assignment: officer_assignment,
booth_assignment: booth_assignment,
date: Date.current,
question: question,
answer: answer.title,
author: author,
amount: rand(999),
origin: "booth")
end
end
end
end
end
section "Creating Poll Questions from Proposals" do
3.times do
proposal = Proposal.all.sample
poll = Poll.current.first
question = Poll::Question.create(poll: poll)
Faker::Lorem.words((2..4).to_a.sample).each do |title|
description = "<p>#{Faker::ChuckNorris.fact}</p>"
answer = Poll::Question::Answer.new(question: question,
title: title.capitalize,
description: description)
I18n.available_locales.map do |locale|
Globalize.with_locale(locale) do
answer.title = "#{title} (#{locale})"
answer.description = "#{description} (#{locale})"
end
end
answer.save!
end
question.copy_attributes_from_proposal(proposal)
title = question.title
I18n.available_locales.map do |locale|
Globalize.with_locale(locale) do
question.title = "#{title} (#{locale})"
end
end
question.save!
end
end
section "Creating Successful Proposals" do
10.times do
proposal = Proposal.all.sample
poll = Poll.current.first
question = Poll::Question.create(poll: poll)
Faker::Lorem.words((2..4).to_a.sample).each do |title|
description = "<p>#{Faker::ChuckNorris.fact}</p>"
answer = Poll::Question::Answer.new(question: question,
title: title.capitalize,
description: description)
I18n.available_locales.map do |locale|
Globalize.with_locale(locale) do
answer.title = "#{title} (#{locale})"
answer.description = "#{description} (#{locale})"
end
end
answer.save!
end
question.copy_attributes_from_proposal(proposal)
title = question.title
I18n.available_locales.map do |locale|
Globalize.with_locale(locale) do
question.title = "#{title} (#{locale})"
end
end
question.save!
end
end