gitlab-org--gitlab-foss/spec/factories/go_module_commits.rb

87 lines
2.2 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
FactoryBot.define do
factory :go_module_commit, class: 'Commit' do
skip_create
transient do
files { { 'foo.txt' => 'content' } }
message { 'Message' }
# rubocop: disable FactoryBot/InlineAssociation
# We need a persisted project so we can create commits and tags
# in `commit` otherwise linting this factory with `build` strategy
# will fail.
project { create(:project, :repository) }
# rubocop: enable FactoryBot/InlineAssociation
service do
Files::MultiService.new(
project,
project.first_owner,
commit_message: message,
start_branch: project.repository.root_ref || 'master',
branch_name: project.repository.root_ref || 'master',
actions: files.map do |path, content|
{ action: :create, file_path: path, content: content }
end
)
end
tag { nil }
tag_message { nil }
commit do
r = service.execute
raise "operation failed: #{r}" unless r[:status] == :success
commit = project.repository.commit_by(oid: r[:result])
if tag
r = Tags::CreateService.new(project, project.first_owner).execute(tag, commit.sha, tag_message)
raise "operation failed: #{r}" unless r[:status] == :success
end
commit
end
end
trait :files do
transient do
message { 'Add files' }
end
end
trait :package do
transient do
path { 'pkg' }
message { 'Add package' }
files { { "#{path}/b.go" => "package b\nfunc Bye() { println(\"Goodbye world!\") }\n" } }
end
end
trait :module do
transient do
name { nil }
message { 'Add module' }
host_prefix { "#{::Gitlab.config.gitlab.host}/#{project.path_with_namespace}" }
url { name ? "#{host_prefix}/#{name}" : host_prefix }
path { "#{name}/" }
files do
{
"#{path}go.mod" => "module #{url}\n",
"#{path}a.go" => "package a\nfunc Hi() { println(\"Hello world!\") }\n"
}
end
end
end
initialize_with do
commit
end
end
end