1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
# frozen_string_literal: true
FactoryBot.define do
factory :group, class: 'Group', parent: :namespace do
sequence(:name) { |n| "group#{n}" }
path { name.downcase.gsub(/\s/, '_') }
type { Group.sti_name }
owner { nil }
project_creation_level { ::Gitlab::Access::MAINTAINER_PROJECT_ACCESS }
transient do
# rubocop:disable Lint/EmptyBlock -- block is required by factorybot
guests {}
reporters {}
developers {}
maintainers {}
owners {}
creator {}
# rubocop:enable Lint/EmptyBlock
end
after(:create) do |group, evaluator|
if group.owner
# We could remove this after we have proper constraint:
# https://gitlab.com/gitlab-org/gitlab-foss/issues/43292
raise "Don't set owner for groups, use `group.add_owner(user)` instead"
end
create(:namespace_settings, namespace: group) unless group.namespace_settings
group.add_members(Array.wrap(evaluator.guests), :guest)
group.add_members(Array.wrap(evaluator.reporters), :reporter)
group.add_members(Array.wrap(evaluator.developers), :developer)
group.add_members(Array.wrap(evaluator.maintainers), :maintainer)
group.add_members(Array.wrap(evaluator.owners), :owner)
group.add_creator(evaluator.creator) if evaluator.creator
end
trait :with_organization do
association :organization
end
trait :public do
visibility_level { Gitlab::VisibilityLevel::PUBLIC }
end
trait :internal do
visibility_level { Gitlab::VisibilityLevel::INTERNAL }
end
trait :private do
visibility_level { Gitlab::VisibilityLevel::PRIVATE }
end
trait :with_avatar do
avatar { fixture_file_upload('spec/fixtures/dk.png') }
end
trait :request_access_disabled do
request_access_enabled { false }
end
trait :nested do
parent factory: :group
end
trait :auto_devops_enabled do
auto_devops_enabled { true }
end
trait :auto_devops_disabled do
auto_devops_enabled { false }
end
trait :owner_subgroup_creation_only do
subgroup_creation_level { ::Gitlab::Access::OWNER_SUBGROUP_ACCESS }
end
trait :shared_runners_disabled do
shared_runners_enabled { false }
end
trait :with_export do
after(:create) do |group, _evaluator|
export_file = fixture_file_upload('spec/fixtures/group_export.tar.gz')
create(:import_export_upload, group: group, export_file: export_file)
end
end
trait :shared_runners_disabled_and_unoverridable do
shared_runners_disabled
allow_descendants_override_disabled_shared_runners { false }
end
trait :shared_runners_disabled_and_overridable do
shared_runners_disabled
allow_descendants_override_disabled_shared_runners { true }
end
trait :shared_runners_enabled do
shared_runners_enabled { true }
end
# Construct a hierarchy underneath the group.
# Each group will have `children` amount of children,
# and `depth` levels of descendants.
trait :with_hierarchy do
transient do
children { 4 }
depth { 4 }
end
after(:create) do |group, evaluator|
def create_graph(parent: nil, children: 4, depth: 4)
return unless depth > 1
children.times do
factory_name = parent.model_name.singular
child = FactoryBot.create(factory_name, parent: parent)
create_graph(parent: child, children: children, depth: depth - 1)
end
parent
end
create_graph(
parent: group,
children: evaluator.children,
depth: evaluator.depth
)
end
end
trait :crm_disabled do
after(:create) do |group|
create(:crm_settings, group: group, enabled: false)
end
end
trait :with_root_storage_statistics do
association :root_storage_statistics, factory: :namespace_root_storage_statistics
end
end
end
|