FactoryBot.define do factory :environment, class: Environment do sequence(:name) { |n| "environment#{n}" } association :project, :repository sequence(:external_url) { |n| "https://env#{n}.example.gitlab.com" } trait :with_review_app do |environment| transient do ref 'master' end # At this point `review app` is an ephemeral concept related to # deployments being deployed for given environment. There is no # first-class `review app` available so we need to create set of # interconnected objects to simulate a review app. # after(:create) do |environment, evaluator| pipeline = create(:ci_pipeline, project: environment.project) deployable = create(:ci_build, name: "#{environment.name}:deploy", pipeline: pipeline) deployment = create(:deployment, :success, environment: environment, project: environment.project, deployable: deployable, ref: evaluator.ref, sha: environment.project.commit(evaluator.ref).id) teardown_build = create(:ci_build, :manual, name: "#{environment.name}:teardown", pipeline: pipeline) deployment.update_column(:on_stop, teardown_build.name) environment.update_attribute(:deployments, [deployment]) end end trait :non_playable do status 'created' self.when 'manual' end end end