Files
grecia/spec/factories/proposals.rb
Javi Martín e2d9d0f2b4 Fix default dashboard actions factories
We had a trait called `:admin_request` for actions that are requests to
administrators, but the default factories were also requests to
administrators.

The tests checking that the "Request" button is not present, which
shouldn't pass with the wrong default factories, were passing by
coincidence. The issue was that we weren't checking whether that the
request had finished before checking that the "Request" button wasn't
present. That meant that we were checking that the "Request" button
wasn't there right at the moment we pressed the link, before the request
was finished.

So we're now checking that the request is finished before checking that
the button isn't there.

On the other hand, the tests checking for the "Request resource" link
being present were checking a behavior that's no longer there since
commit 9d85b3935, when we changed the conditions affecting that link.
2024-10-11 15:05:24 +02:00

206 lines
4.5 KiB
Ruby

FactoryBot.define do
factory :proposal do
sequence(:title) { |n| "Proposal #{n} title" }
sequence(:summary) { |n| "In summary, what we want is... #{n}" }
description { "Proposal description" }
responsible_name { "John Snow" }
terms_of_service { "1" }
published_at { Time.current }
author factory: :user
trait :hidden do
hidden_at { Time.current }
end
trait :with_ignored_flag do
ignored_flag_at { Time.current }
end
trait :with_confirmed_hide do
confirmed_hide_at { Time.current }
end
trait :flagged do
after :create do |proposal|
Flag.flag(create(:user), proposal)
end
end
trait :archived do
created_at { 25.months.ago }
end
trait :selected do
selected { true }
end
trait :with_hot_score do
before(:save, &:calculate_hot_score)
end
trait :with_confidence_score do
before(:save, &:calculate_confidence_score)
end
trait :conflictive do
after :create do |debate|
Flag.flag(create(:user), debate)
4.times { create(:vote, votable: debate) }
end
end
trait :successful do
cached_votes_up { Proposal.votes_needed_for_success + 100 }
end
trait :draft do
published_at { nil }
end
trait :retired do
retired_at { Time.current }
retired_reason { "unfeasible" }
retired_explanation { "Retired explanation" }
end
trait :published do
published_at { Time.current }
end
trait :with_map_location do
map_location
end
trait :with_milestone_tags do
after(:create) { |proposal| proposal.milestone_tags << create(:tag, :milestone) }
end
trait :with_image do
after(:create) { |proposal| create(:image, imageable: proposal) }
end
trait :with_video do
video_url { "https://youtu.be/nhuNb0XtRhQ" }
end
transient do
voters { [] }
followers { [] }
end
after(:create) do |proposal, evaluator|
evaluator.voters.each { |voter| create(:vote, votable: proposal, voter: voter) }
evaluator.followers.each { |follower| create(:follow, followable: proposal, user: follower) }
end
end
factory :proposal_notification do
sequence(:title) { |n| "Thank you for supporting my proposal #{n}" }
sequence(:body) { |n| "Please let others know so we can make it happen #{n}" }
proposal
author factory: :user
trait :moderated do
moderated { true }
end
trait :ignored do
ignored_at { Date.current }
end
trait :hidden do
hidden_at { Time.current }
end
trait :with_confirmed_hide do
confirmed_hide_at { Time.current }
end
end
factory :signature_sheet do
signable factory: :proposal
author factory: :user
required_fields_to_verify { "123A, 456B, 789C" }
trait :with_title do
title { Faker::Lorem.sentence }
end
end
factory :signature do
signature_sheet
sequence(:document_number) { |n| "#{n}A" }
end
factory :activity do
user
action { "hide" }
actionable factory: :proposal
end
factory :dashboard_action, class: "Dashboard::Action" do
title { Faker::Lorem.sentence[0..79].strip }
description { Faker::Lorem.sentence }
request_to_administrators { false }
day_offset { 0 }
required_supports { 0 }
order { 0 }
active { true }
hidden_at { nil }
action_type { "proposed_action" }
trait :admin_request do
request_to_administrators { true }
end
trait :inactive do
active { false }
end
trait :active do
active { true }
end
trait :deleted do
hidden_at { Time.current }
end
trait :proposed_action do
action_type { "proposed_action" }
end
trait :resource do
action_type { "resource" }
end
end
factory :dashboard_executed_action, class: "Dashboard::ExecutedAction" do
proposal
action { |s| s.association(:dashboard_action) }
executed_at { Time.current }
end
factory :dashboard_administrator_task, class: "Dashboard::AdministratorTask" do
source { |s| s.association(:dashboard_executed_action) }
user
executed_at { Time.current }
trait :pending do
user { nil }
executed_at { nil }
end
trait :done do
user
executed_at { Time.current }
end
end
factory :link do
linkable { |s| s.association(:action) }
label { Faker::Lorem.sentence }
url { Faker::Internet.url }
end
end