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.
206 lines
4.5 KiB
Ruby
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
|